Java内部类内部代码中$符号及this$0的含义技术咨询
Java内部类的$符号与this$0详解
1. Java内部类代码里的$符号是什么?
其实这个$是Java编译器的“小暗号”——我们写代码时把内部类嵌套在外部类里,但字节码文件是独立的,编译器就用$来拼接外部类和内部类的名字,生成对应的字节码文件名,比如你例子里的Outer$Inner.class。
它本质是编译器用来区分内部类所属外部类层级的实现细节,咱们写业务代码的时候完全不需要手动写这个符号,都是编译器自动处理的。而且Java语法里虽然允许类名包含$,但一般不推荐这么做,避免和编译器生成的内部类命名冲突。
2. 代码里的this$0代表什么?
你贴的这段是编译器为成员内部类自动生成的底层代码,这里的this$0是编译器悄悄加的一个final类型的外部类引用字段:
- 它的作用是保存创建这个内部类实例时对应的外部类对象,比如构造方法里的
this$0 = Outer.this;,就是把外部类的当前实例赋值给它; - 成员内部类之所以能直接访问外部类的成员(哪怕是私有成员),靠的就是这个引用——比如代码里的
Outer.access$000(Outer.this),其实就是通过这个引用去调用编译器生成的access$000方法(用来访问外部类的私有成员)。
简单说,this$0就是内部类“抓着”外部类的那根“绳子”,保证内部类能找到自己所属的外部类实例~
内容的提问来源于stack exchange,提问作者Vaibhav Shrivastava
相关产品推荐
相关产品推荐

