面向对象
类和对象
类(属性和行为)
类是对象的数据类型
类是具有相同属性和行为的一组对象的集合
行为:对象能够执行的操作(方法)
类是对象的抽象
对象是类的实体
- 类是Java程序的基本组成单位
- 类的组成(属性和行为)
- 属性:在类中通过成员变量来体现(类中方法外的变量)
- 行为:在类中通过成员方法来实现(去点static关键字的方法)
- 类的定义步骤
- 定义类
- 编写类的成员变量(属性)
- 编写类的成员方法(方法)
- 创建使用对象
- 类名 对象名 = new 类名()
- Student s = new Student();
成员变量和局部变量
成员变量:类中方法外的变量(堆内存) 有默认的初始化值
局部变量:方法中的变量(栈内存)
对象创建过程
- 1.分配空间
- 2.读取类中所有定义的属性
- 3.按照类中定义代码的顺序
- 读取类中的代码块(此时属性是有可能没有赋值的)
- 如果属性有赋值运算,给属性赋值
- 4.如果属性没有得到赋值,则使用默认值
- 5.初始化类中的所有成员方法(将方法加载到方法区。不调用方法)
- 6.调用构造方法,完成类的创建
类加载过程
概念:JVM第一次读取一个类(字节码文件)的时候,将类的信息加载到内存中的一个过程。
一个类在整个程序的运行的过程中,类加载只会发生一次
- 1.分配空间
- 2.将静态属性读取到内存
- 3.按照类中定义代码的顺序
- 执行静态代码块中的信息,完成类的初始化工作
- 静态属性如果有赋值语句,则进行赋值
- 4.如果静态属性没有进行赋值,则取默认值作为对应的值
- 5.将静态方法加入到对应的方法区中,等待被调用
private(权限修饰符)
- 可以修饰成员变量和成员方法
- 作用:保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量如果需要被其他类使用,则需要提供对应的get/set方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
this关键字
public void setName(String name) {
//this.name代表成员变量
//name代表形参(局部变量)
this.name = name;
}
- this修饰的变量用于指代成员变量
- 什么时候使用this关键字呢?
- 解决局部变量隐藏成员变量
- this:代表所在类的对象引用
方法被哪个对象调用,this就代表哪个对象
构造方法(一种特殊的方法)
- 作用
- 创建对象
- 为对象的属性赋值
注意事项
- 创建
类中如果没有定义构造方法,系统则给出一个默认的无参构造方法
若定义了构造方法,系统将不再提供默认的构造方法
- 方法重载
如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法
- 推荐
无论是否使用,都手工书写无参构造方法
标准类制作(Alt+insert)
- 成员变量(private修饰)
- 构造方法
- 提供一个无参构造方法
- 提供一个带参构造方法
- 成员方法
- 提供每一个成员变量的set/get方法
- 提供一个类的其他方法(eat/jump等)-可写可不写
- 创建对象并为其成员变量赋值
- 无参构造方法创建对象后用set方法赋值
- 使用带参构造方法直接创建对象并且为成员变量赋值
public class Driver {
private String name;
private int age;
private String sex;
private Car car;
public Driver() {
}
public Driver(String name, int age, String sex, Car car) {
this.name = name;
this.age = age;
this.sex = sex;
this.car = car;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public void drive(){
System.out.println("驾驶");
}
}