一. this和super
1. this
- this指 当前对象本身 或 当前正在创建的对象
- this.属性 和 this.方法 调用时可以省略this,当方法的形参和类属性同名时,this不可省略
- this(形参) 调用本类中相同参数形式的另一构造函数,必须为构造函数中的第一条语句
2. super
- super指向离自己最近的一个父类,通常可以省略
- 当子类和父类有同名属性,为了指定调用了父类的属性,不可省略super
- 当子类和父类有同名方法,为了指定重写了父类的方法,不可省略super
- super(形参)调用父类中相同参数形式的构造函数,必须为构造函数中的第一条语句
二. final
1. final 变量
- 对于基本类型,final使数值不变
- 对于引用类型,final使引用不变,即不能引用其他对象,但被引用对象本身可以改变
2. final 方法
- 父类中的final方法可以被子类继承,但是不能被子类重写
3. final 类
- final类不能被继承
final域可以保证多线程访问的安全性
//JVM保证final修饰的accounts引用必须在Bank的构造函数执行后才能生效
class Bank {
private fianl Map<String, Double> accounts = new HashMap<>();
public Bank() {
accounts.put("张三", 3000);
accounts.put("李四", 4000);
}
}
三. static
1. static 变量
- 又称类变量,即此变量属于类,无论一个类实例化多少个对象,它们都共享同一静态变量
- 静态变量随着类的加载而加载,因此早于对象的创建,且在内存中只存在一份
- 一个类实例化多个对象,某个对象修改了静态变量,其他对象调用也是修改过的静态变量
- 类中的常量通常声明为static,即 static final int XXX = 123;
2. static 方法
- 静态方法随类的加载而加载,它不依赖于任何实例
- 静态方法必须有实现,也就是说它不能是抽象方法
- 静态方法只能调用所属类的静态方法和静态属性
- 静态方法中不能有 this 和 super 关键字
- 工具类中的方法,习惯上声明为static,比如:Math、Arrays、Collections
3. 静态代码块
- 静态代码块在类初始化时运行一次
4. 初始化顺序
- 静态变量、静态代码块 -> 成员变量、普通代码块 -> 构造函数
5. 访问原则
- 静态的只能访问静态的,因为他们在对象没创建前就存在了
- 静态的如果想访问非静态的,则必须初始化该对象,非静态的才存在