类什么时候会被加载:
- 创建对象实例时 (new)
- 创建子类对象实例时,父类也会被加载(先加载父类,再加载子类)
- 使用类的静态成员时(静态属性,静态方法)
代码块:
- 代码块调用的顺序优先于构造器
- static代码块,在类加载时执行,只会执行一次
- 普通代码块,在创建对象时调用,创建一次,调用一次
构造器最前面其实隐含了super()和调用普通代码块。静态相关的代码块及属性,再在类加载时就执行完毕
class A {
public A() { //构造器
//1. super();
//2. 调用普通代码块
System.out.println("A constructor...");
}
}
创建子类对象时的,执行顺序:
静态代码块,静态属性初始化 ——> 普通代码块,普通属性初始化 ——> 构造方法
- 父类的静态代码块+静态属性 (优先级一样,按定义顺序执行)
- 子类的静态代码块+静态属性 (优先级一样,按定义顺序执行)
- 父类的普通代码块+普通属性初始化 (优先级一样,按定义顺序执行)
- 父类的构造方法
- 子类的普通代码块+普通属性初始化 (优先级一样,按定义顺序执行)
- 子类的构造方法