Java 探究内部类的加载顺序

代码展示

public class Test {
    static {
        System.out.println("外部类加载了!");
    }

    public Test(){
        System.out.println("外部类构造方法!");
    }

    /**
     * 静态内部类!
     */
    public static class StaticInnerClass {
        static {
            System.out.println("静态内部类加载了!");
        }

        public StaticInnerClass(){
            System.out.println("静态内部构造方法!");
        }
    }

    /**
     * 非静态内部类中不允许有静态代码块!
     */
    public class InnerClass {
        public InnerClass(){
            System.out.println("内部构造方法!");
        }
    }
}

初始化外部类

public class Test {
    public static void main(String[] args) {
        new Test();
    }
}

结果:
外部类加载了!
外部类构造方法!

总结:
外部类的初始化,并不会加载静态内部类!

初始化内部类

public class Test {
    public static void main(String[] args) {
        new Test(). new InnerClass();
    }
}

结果:
外部类加载了!
外部类构造方法!
内部构造方法!

总结:
内部类的初始化,会加载外部类。

初始化静态内部类

public class Test {
    public static void main(String[] args) {
        new Test.StaticInnerClass();
    }
}

结果:
外部类加载了!
静态内部类加载了!
静态内部构造方法!

总结:
静态内部类初始化,会加载外部类。

Java 探究内部类的加载顺序

上一篇:小程序 safe-area-inset-bottom iphoneX


下一篇:微信打飞机升级版(Qt实现)