当类第一次加载到内存中的时候初始化
- 父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
- 子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
- 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
- 执行父类的构造方法。
- 子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
- 执行子类的构造方法。
非静态初始化块和静态初始化块的区别?
- 非静态初始化块主要用于对象的初始化,每次创建对象都要调用一次,其执行顺序在构造方法之前。
- 静态初始化块主要用来初始化静态变量,只调用一次,类第一次加载到内存中调用。
- 非静态成员变量不能在静态方法中使用,同样也不能在静态初始化中初始化
如何验证静态变量和静态初始化块按代码出现顺序
public class TestOrder {
// 静态初始化块
static {
System.out.println("静态初始化块");
}
// 静态变量
public static TestA a = new TestA();
// 静态变量
public static TestB b = new TestB();
public static void main(String[] args) {
new TestOrder();
}
}
class TestA {
public TestA() {
System.out.println("Test--A");
}
}
class TestB {
public TestB() {
System.out.println("Test--B");
}
}
这段代码巧妙运用了类初始化会调用构造方法,让人可以直观的看到变量的初始化过程。
网友评论