类的静态加载顺序简单测试

public class A {
static {
System.out.println("A的静态块");
}
public A(){
System.out.println("构造A");
}
}
public class B extends A{
public static B b = new B();
public static int numB = 10;
static {
System.out.println("B的静态块,当前numB="+numB);
}
public B(){
System.out.println("构造B,当前numB="+numB);
}
public static void b(){
System.out.println("B的静态方法,当前numB="+numB);
}
}
public static void main(String[] args) {
B.b();
}
执行结果:
A的静态块
构造A
构造B,当前numB=0 //因为在B b = new B()时立马执行了B的构造,所以numB只是默认的初始值0;
B的静态块,当前numB=10
B的静态方法,当前numB=10
public static void main(String[] args) {
B b = new B();
b.b();
}
执行结果:
A的静态块
构造A
构造B,当前numB=0
B的静态块,当前numB=10
构造A
构造B,当前numB=10
B的静态方法,当前numB=10

父类的静态->子类的静态->父类的初始化块->父类的构造方法->子类的初始化块->子类的构造方法
(静态间按顺序执行,且只加载一次)

猜你喜欢

转载自349499950.iteye.com/blog/2382552
今日推荐