面向对象
特征:继承,封装跟多态
类:相关属性和行为的集合
定义格式
public class ClassName{
成员变量
成员方法
}
1,成员方法不要写static关键字
2,成员变量是直接定义在类中,在方法外
public class student {
String name;
int age;
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
public void study() {
System.out.println("study");
}
}
使用
1,导包
2,创建
类名 对象名 = new 类名称();
student stu = new student();
3,使用
想用谁,就用对象名点谁;
public class JAVA1 {
public static void main(String[] args) {
student stu = new student();
stu.name = "frfgrf";
stu.age = 15;
System.out.println(stu.age);
System.out.println(stu.name);
stu.eat();
stu.sleep();
stu.study();
}
}
局部变量没有默认值,如果想使用必须手动赋值。位于栈内存
成员变量,若没有赋值,会有默认值,规则跟数组一样。位于堆内存
封装性
方法就是一种封装
可以用private关键字将需要保护的成员变量进行修饰
间接访问private成员变量,设置一堆set/get方法
setXXX() 不能有返回值,参数类型和成员变量相同
getXXX() 不能有参数,返回值类型与成员变量对应
对于基本类型中的bool型,getXXX一定要写成isXXX
package demo2.java;
public class Student {
private String name;
private int age;
private boolean male;
public void setName(String str) {
name = str;
}
public String getName() {
return name;
}
public void setAge(int num) {
age = num;
}
public int getAge() {
return age;
}
public void setMale(boolean b) {
male = b;
}
public boolean isMale() {
return male;
}
}
package demo2.java;
public class students {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student = new Student();
student.setAge(18);
student.setName("marry");
student.setMale(false);
System.out.println("name is: " + student.getName());
System.out.println("age is: " + student.getAge());
System.out.println("is or not male: " + student.isMale());
}
}
封装优化1——this关键字
方法局部变量和类成员变量重名的时候,就近原则,优先使用 局部变量
需要访问本类的成员变量,需要使用 this.成员变量名(通过谁调用的方法,谁就是this【地址】)
package demo3.java;
public class Person {
String name;
public void sayHello(String name) {
System.out.println(name + ", hello i am " + this.name);
}
}
package demo3.java;
public class demoperson {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person person = new Person();
person.name = "wang si cong";
person.sayHello("ma yun ");
}
}
封装优化2——构造方法
专门用来创建对象的方法,通过关键字new创建对象时,其实就是住在调用构造方法
public 类名称(参数类型 参数名称){
方法体
}
1,构造方法的名称必须跟类名称完全一致
2, 不需要写返回值类型, 连void都不写
3, 不能return一个具体的返回值
4, 如果没有编写任何构造方法,编译器会赠送一个,没有参数,方法体什么事都不做
标准代码——JavaBean
1,所有成员变量都要使用private关键字
2,编写一个无参数跟全参数的构造方法
public class Student {
//成员变量
private String name;
private int age;
//构造方法
public Student() {}
public Student(String name,int age) {
this.name = name;
this.age = age;
}
//成员方法
publicvoid setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
publicvoid setAge(int age) {
this.age = age;
}
publicint getAge() {
return age;
}
}
public class TestStudent {
public static void main(String[] args) {
//无参构造使用
Student s= new Student();
s.setName("柳岩");
s.setAge(18);
System.out.println(s.getName()+"‐‐‐"+s.getAge());
//带参构造使用
Student s2= new Student("赵丽颖",18);
System.out.println(s2.getName()+"‐‐‐"+s2.getAge());
}
}
SCANNER类
可以实现键盘输入数据到程序当中
只有java.lang下不需要导包
import java.util.Scanner;
public class Scanner_ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(str);
int num = sc.nextInt();
System.out.println(num);
}
}
练习1 键盘输入两个数字求和
import java.util.Scanner;
public class Scanner_ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
System.out.println(num1+num2);
}
}
Random类
import java.util.Random
生成1,n之间随机数
import java.util.Random;
public class demo {
public static void main(String[] args) {
int n = 10;
Random r = new Random();
for (int i =0;i<100;i++) {
int num = r.nextInt(n)+1;
System.out.println(num);
}
}
}
猜数字小游戏 【1,100】
package demo3.java;
import java.util.Random;
import java.util.Scanner;
//1,产生随机数
//2.键盘输入
//3.获取键盘输入
//4.if判断 提示太大或者太小并且重试,猜中游戏结束
//5.重试就是再来一次, 不确定次数,用while
package demo3.java;
import java.util.Random;
import java.util.Scanner;
//1,产生随机数
//2.键盘输入
//3.获取键盘输入
//4.if判断 提示太大或者太小并且重试,猜中游戏结束
//5.重试就是再来一次, 不确定次数,用while
public class NumGame {
public static void main(String[] args) {
Random r = new Random();
int answer = r.nextInt(100)+1;
Scanner sc = new Scanner(System.in);
System.out.println("Please input the number you guess : ");
int count = 0;
while (true) {
if(count==10) {
System.out.println("Your chance has run out,Game Over! ");
break;}
int guessNmuber = sc.nextInt();
if (guessNmuber > answer) {
count+=1;
System.out.println("Your number is higher than the answeer, Please try again!");
}else if(guessNmuber < answer) {
count+=1;
System.out.println("Your number is lowerr than the answeer, Please try again!");
}else {
System.out.println("Congratulations! Your guess is right");
break;
}
}System.out.println("Game Over");
}
}
对象数组
ArryList长度是可变的
ArrayList<E> 泛型(只能是引用类型)
若想往集合中存储基本类型数据,必须使用基本类型对应的包装类
byte --->Byte
short --->Short
int ---->Integer
long ---->Long
float --->Float
double --->Double
char ---->Character
boolean --->Boolean
自动装箱,基本类型 -----》引用类型
自动拆箱,引用类型------》基本类型
创建
ArrayList<String> list = new ArrayList<String>();
直接打印得到的是内容,若为空,打印【】
常用方法
public boolean add(E e) :将指定的元素添加到集合的尾部。
public E remove(int index) :移除集合中指定位置的元素。返回被删除的元素。
public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
返回值代表操作是否成功
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
import java.util.ArrayList;
public class DemoArryList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("wenlong");
list.add("sbg");
list.add("ggr");
list.add("gerg");
System.out.println(list);
System.out.println(list.get(2));
System.out.println(list.remove(2));
System.out.println(list);
System.out.println(list.size());
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
生成6个1~33之间的随机整数,添加到集合,并遍历
import java.util.Random;
import java.util.ArrayList;
public class DemoAlist {
public static void main(String[] args) {
Random num = new Random();
ArrayList<Integer> intList = new ArrayList<Integer>();
for(int i =0;i<6;i++) {
int temp = num.nextInt(33) + 1;
intList.add(temp);
}
System.out.println(intList);
for(int i = 0;i<intList.size();i++) {
System.out.println(intList.get(i));
}
}
}
自定义4个学生对象,添加到集合,并遍历
import java.util.ArrayList;
public class StudentArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Student> studentlist = new ArrayList<Student>();
Student stu1 = new Student("zhao",18);
Student stu2 = new Student("qian",28);
Student stu3 = new Student("sun",38);
Student stu4 = new Student("li",48);
studentlist.add(stu1);
studentlist.add(stu2);
studentlist.add(stu3);
studentlist.add(stu4);
for(int i = 0;i<studentlist.size();i++) {
System.out.println(studentlist.get(i).getName() + studentlist.get(i).getAge());
}
}
定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。格式参照 {元素
@元素@元素}。
import java.util.ArrayList;
public class Pt {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("张三丰");
list.add("宋远桥");
list.add("张无忌");
list.add("殷梨亭");
// 调用方法
ptArry(list);
}
public static void ptArry(ArrayList<String> list) {
System.out.print("{");
for(int i =0;i<list.size();i++) {
if(i!=list.size()-1) {
System.out.print(list.get(i)+"@");
}else {
System.out.print("}");
}
}
}
定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)
import java.util.ArrayList;
import java.util.Random;
public class EvenSelect {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
Random num = new Random();
for(int i = 0;i<20;i++) {
int temp = num.nextInt(80);
list.add(temp);
}
System.out.println(SelectEven(list));
}
public static ArrayList<Integer> SelectEven(ArrayList<Integer> list) {
ArrayList<Integer> evenList = new ArrayList<Integer>();
for(int i =0;i<list.size();i++) {
if(list.get(i)%2==0) {
evenList.add(list.get(i));
}
}
return evenList;
}
}