# 类和对象
类: 对象的模板,描述的是一类对象的行为和状态
- 属性(Field): 局部变量,成员变量,类变量(即静态变量)
- 方法(Method): 构造方法,类方法(静态方法)
对象: 对象根据类创建,是类的一个实例
- 声明: 声明一个对象,包括类型和名称
- 实例化: 使用关键字
new
来创建一个对象 - 初始化: 使用
new
创建对象时,会调用构造方法(constructor)初始化对象
# 内存分析
- 堆内存(Heap): 保存类的实例,由关键字
new
开辟的内存空间 - 栈内存(Stack): 保存实例的引用,是实例在堆内存的地址
- 垃圾(Garbage): 没有任何引用指向的堆内存空间,由JVM通过GC不定期回收
# 关键字this
this
: 当前对象的引用,可以用于访问当前对象的属性和方法this()
: 调用本类的构造方法,只能放在构造方法首行,且只能调用一次- 实例对象调用自身方法时,实例对象自身的引用会被作为隐式参数传入
# 封装
封装(Encapsulation)是Java面向对象三大特性之一
主要思想:需要隐藏的隐藏,需要暴露的暴露
# 优点/目的
- 隐藏信息和实现细节
- 通过实现好的方法对字段进行访问和修改,避免不合理的访问,提高了安全性
- 良好的封装可以减少耦合,修改类的内部结构,不影响对外的 API
# 访问修饰符
Java通过访问修饰符(Access modifiers),控制类、变量、方法的访问,支持 4 种不同的修饰符
- default: 也称 package-private,在同一 package 下可见。可以修饰:类、接口、变量、方法
- private: 仅在同一 class 内可见。可以修饰:变量、方法
- protected: 仅对同一 package 的 class 和所有 sub-class 可见。可以修饰:变量、方法
- public: 对所有 class 可见。可以修饰:类、接口、变量、方法
注意
default
指的是默认情况下,即不加任何访问修饰符时的访问控制状态
不能直接使用default
作为访问修饰符,default
关键词实际上用于接口方法定义
同一个类的实例,在内部可以互相访问对方的 private
属性:访问修饰符在类级别而不是在对象级别上工作
default | private | protected | public | |
---|---|---|---|---|
Same class | ✔️ | ✔️ | ✔️ | ✔️ |
Same package, subclass | ✔️ | ❌ | ✔️ | ✔️ |
Same package, non-subclass | ✔️ | ❌ | ✔️ | ✔️ |
Different package, subclass | ❌ | ❌ | ✔️ | ✔️ |
Different package, non-subclass | ❌ | ❌ | ❌ | ✔️ |
public class Student {
private int age;
public int getAge() {
return this.age;
}
public boolean setAge(int ageIn) {
if (ageIn < 6 || ageIn > 100) return false;
this.age = ageIn;
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13