结论
- 先加载父类的静态代码块 然后执行子类静态代码块
- 当前类存在类静态变量
注意引用类型没进行赋值操作初始化为null 并不会显式的加载类
又存在静态代码块 会先执行前者进行初始化 再执行静态代码块 - 在实例化类的时候 执行顺序 构造代码块-->构造方法
存在父类先执行父类
- 注意 静态成员变量/静态代码块只在JVM运行时 类加载到内存的时候执行一次
public class Test {
static B b=new B(); //这里存在实例 会加载类B 类A
A a =new A();
static {
System.out.println("test static");
}
public Test(){
System.out.println("test constructor");
}
{
System.out.println("test module");
}
public static void main(String[] args) {
//A1-->B1-->A2-->A3-->B2-->B3-->TEST STATIC
}
}
class A{
static {
System.out.println("A1");
}
{
System.out.println("A2");
}
public A(){
System.out.println("A3");
}
}
class B extends A{
static {
System.out.println("B1");
}
{
System.out.println("B2");
}
public B(){
System.out.println("B3");
}
}