Java内部类简析

创建一个 Root.java 类文件

类文件的内容如下

public class Root {
    // 内部类 - A
    public class A {

    }
    // 静态内部类 - B
    public static class B {
        
    }
}

打开控制台,输入 javac Root.java ,将文件进行编译

img

命令执行完毕后,会生成 3 个额外的文件

imgs

反编译其中 .class 后缀的文件,可以看到

Root.class 文件内容如下:

public class Root {
    public Root() {
    }

    public static void main(String[] var0) throws Throwable {
    }

    public static class B {
        public B() {
        }
    }

    public class A {
        public A() {
        }
    }
}

Root$A.class

public class Root$A {
    public Root$A(Root var1) {
        this.this$0 = var1;
    }
}

Root$B.class

public class Root$B {
    public Root$B() {
    }
}

观察A、B文件

Root$A.class 文件对应最开始编写的内部类 - A

Root$B.class 对应静态内部类 - B

区别

Root$A 构造函数增加了一个 Root var1 入参并且持有引用:this.this$0 = var1

Root$B 仅仅持有空的构造函数

结论

说明内部类是持有外部类的引用,能够获取外部类的信息,而静态内部类外部类的关系是相互独立的,只不过静态内部类“躲”在别人身体里罢了

· last updated: ·