- 关于面向对象的特点:
- 角色发生了转换,将我们从指挥者变成了执行者
- 在面向对象编程中,我们通过创建对象并定义对象之间的关系,来实现程序的功能。我们成为了执行者,负责创建对象、调用方法等,从而完成程序的执行。
- 可以将复杂的事情简单化
- 是一种更符合我们思考习惯的思想
- 类和对象的关系
- 类可以看作是对象的模板或者蓝图,定义了对象的结构和行为
- 对象是类的实例,也是类的具体实现
- 类和对象之间是一种包含关系
- 类包含了一组具有相似特征和行为的对象的共性
- 一个类可以创建多个对象,这些对象共享了类定义的属性和行为
- 举例来说,如果有一个类 Person,它定义了人的特征和行为(比如姓名、年龄、工作等),那么具体的人(比如小明、小红)就是 Person 类的对象。
- 成员变量和局部变量的关系
- 在一个类中,成员变量和成员方法的定义顺序并没有强制要求,可以根据需要灵活安排
- 成员变量有默认初始化值,局部变量没有默认初始化值
- 成员变量在整个类中都可以使用,局部变量只能在所属的方法中使用
- 成员变量被定义在类中方法外,局部变量被定义在方法声明上或者方法内部
- 成员变量存储在堆内存中,因为它们随着对象的创建而分配内存,并随着对象的销毁而释放
- 局部变量存储在栈内存中,因为它们随着方法的执行而临时分配内存,当方法执行结束后就会释放
- 关于private的描述
- 被private修饰的成员变量和成员方法,只能在本类中使用,不能在其他类中直接访问
- private是一个修饰符,可以完成类对成员变量的封装,防止外部非法访问
- 类的成员变量被private修饰,如果想让成员变量被其他类使用,可以为成员变量提供对应public的setXxx和getXxx方法
- 除了成员变量,private 也可以用来修饰方法,使得方法只能在当前类中被访问
- 关于this的描述
- this的使用场景:成员变量和局部变量重名
- 当局部变量和成员变量重名时候,直接写变量名代表局部变量
public class Person {
String name;
public Person(String name) {
this.name = name;
}
public void printName(String name) {
System.out.println("局部变量name:" + name);
System.out.println("成员变量name:" + this.name);
}
public static void main(String[] args) {
Person person = new Person("John");
person.printName("Mike");
}
}
- 关于构造方法的描述
- 构造方法必须和类名一致
- 同一个类的多个构造方法,可以构成方法重载
- 构造方法的返回值类型不能指定具体的类型,它实际上没有返回值类型,甚至不能指定为 void。构造方法的作用是初始化对象,而不是返回值
- 定义一个类,如果没有定义构造方法,那么这个类没有构造方法
- 当定义了带参数的构造方法,系统默认的不带参数的构造方法依然会自动提供
- 构造方法可以使用 return 语句来提前结束方法的执行,并且可以返回一个值(通常用于特殊情况下的处理)
- 构造方法的访问修饰符可以是 public、protected、private 或者默认(即不写修饰符),根据需要来设定
- 标准类的定义
- 成员变量私有
- 提供公共setter和getter方法
- 提供public修饰的空参构造和满参构造
- == 和 equals的区别
- 对于基本类型,==比较的是值是,对于引用类型,==比较的是内存地址
- equals的方法在String或者Integer等类中会被重写,比较的是内容
- 默认情况下,equals 方法和 == 一样,比较的是对象的内存地址,即比较引用是否相等。