外部类可以访问静态内部类的 private 属性。
原因
静态内部类在经过 Java 编译器编译后会生成 private 属性对应的 access$Xxx(),供外部类使用。
一个类被使用到的时候才会加载到内存。静态内部类之所以可以延迟加载是因为,外部类通过调用静态内部类的 static 方法(access$Xxx()),也就是会执行 invokestatic 这个字节码从而引起静态内部类加载(这是触发类加载的一种场景)。
扩展
可以通过在私有的构造方法中判断对象引用是否为 null 来防止反射调用。