我们以单例静态内部类模式来看:代码如下
public class S4{
private S4(){}
private static class S5{
private static S4 s4 = new S4();
}
public static S4 getS4(){
return S5.s4;
}
}
如上图所示:S4在内部引用了内部类S5的私有属性。要理解这个问题需要从字节码文件层面来分析:
我们将S4和S5进行反编译如下图:使用javap -c -v S4.class
Last modified 2020-4-7; size 385 bytes
MD5 checksum 07f86ad5660fd61e1047ed507eb63a4a
Compiled from "S4.java"
public class S4
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #4.#19 // S4."<init>":()V
#2 = Methodref #5.#19 // java/lang/Object."<init>"
#3 = Methodref #8.#20 // S4$S5.access$100:()LS4;
#4 = Class #21 // S4
#5 = Class #22 // java/lang