结论
注意 只有显式的加载类 JVM才会加载到内存中
- 先加载父类的静态代码块 然后执行子类静态代码块
- 当前类存在类静态变量
注意引用类型没进行赋值操作初始化为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";
}
}