代码展示
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 探究内部类的加载顺序