package com.java.oop;
class ClassAA{
static Integer count1=100;
static class InnerAA{
static Integer count2=200;//延迟加载
static {
System.out.println("InnerAA");
}
}
}
public class TestClassObject07 {
public static void main(String[] args) {
System.out.println(ClassAA.count1);
//System.out.println(ClassAA.InnerAA.count2);
}
}
- 执行
System.out.println(ClassAA.count1);
输出结果:100;
分析:静态内部类InnerAA不会被加载,InnerAA内的静态代码块也不会执行
执行
System.out.println(ClassAA.InnerAA.count2);
追踪类加载(-XX:+TraceClassLoading)以及结果输出:
[Loaded com.java.oop.TestClassObject07 from file:/D:/WORKSPACE/JAVASE-V1.01/bin/]
[Loaded sun.launcher.LauncherHelper$FXHelper from C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
[Loaded java.lang.Class$MethodArray from C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
[Loaded java.lang.Void from C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
[Loaded com.java.oop.ClassAA$InnerAA from file:/D:/WORKSPACE/JAVASE-V1.01/bin/]
InnerAA
200
[Loaded java.lang.Shutdown from C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
分析:先加载TestClassObject07,再加载静态内部类InnerAA,执行InnerAA的静态代码块输出"InnerAA",再打印输出200.
静态内部类放一些不常用的属性或者对象,当需要的时候访问,再加载内部类初始化.达到延迟加载的目的.