结论:
- 外部类初次加载,会初始化静态变量、静态代码块,但不会加载内部类和静态内部类。
- 直接调用静态内部类时,外部类不会加载,只会加载静态内部类
测试代码:
public class MyTest { public static void main(String[] args) throws InterruptedException { System.out.println("打印时间:" + System.currentTimeMillis() + ".....静态内部类加载时间:" + Student.InnerStaticClass.INNER_STATIC_DATE); System.out.println("打印时间:" + System.currentTimeMillis() + ".....外部类静态变量加载时间:" + Student.OUTER_DATE); System.out.println("打印时间:" + System.currentTimeMillis() + ".....调用外部静态方法:" ) ;Student.outerStaticMethod(); Student student1 = new Student(); System.out.println("打印时间:" + System.currentTimeMillis() + ".....非静态内部类加载时间:" + student1.new InnerClass().INNER_DATE); } }
public class Student { public static long OUTER_DATE = System.currentTimeMillis(); static{ System.out.println("外部类静态块加载时间:"+System.currentTimeMillis()); } public Student(){ System.out.println("外部类构造时间:"+System.currentTimeMillis()); } static class InnerStaticClass { public static long INNER_STATIC_DATE = System.currentTimeMillis(); static{ System.out.println("静态内部类静态代码块加载时间:"+System.currentTimeMillis()); } } class InnerClass { public long INNER_DATE = 0; public InnerClass() { INNER_DATE = System.currentTimeMillis(); } } public static void outerStaticMethod() { System.out.println("外部类静态方法执行了"); } }
测试结果: