1、创建内部类
内部类顾名思义就是在一个类中的另外一个类。
我们来看一下它的内部类字节码内容:
Compiled from "Outer.java"
class Outer$Inner extends java.lang.Object{
final Outer this$0;
Outer$Inner(Outer);
}
它有一个外层类Outer的变量,在它的构造方法中有一个Outer类型的参数,以至于它能调用外层类Outer的成员。下面列举例子说明一下:
对于这个this$0可能你现在还不太明白是怎么回事儿,待会儿再说。
Outer.java
OuterTest.java
output:5
为什么实例化对象要这么干,其实你只要把每一个内部类都当作是一个外层类的成员,要得到它的成员,肯定就是要通过外层类的实例化对象来调用了。
那么要怎么才能得到外层类的变量a的值呢?好我们再来看一下Outer.java的字节码内容:
Compiled from "Outer.java"
class Outer$MiddleInner extends java.lang.Object{
int a;
final Outer this$0;
Outer$MiddleInner(Outer);
}
Compiled from "Outer.java"
class Outer$MiddleInner$Inner extends java.lang.Object{
int a;
final Outer$MiddleInner this$1;
Outer$MiddleInner$Inner(Outer$MiddleInner);
public void print();
}
每一个内部类都有一个引用指向外层类的一个引用,那就是this。
好了现在修改Outer.java
output:
Outer$MiddleInner$Inner a = 5
Outer$MiddleInner a = 4
Outer a = 3
对比起来看,就会知道this所代表什么了。
我还可以写一个程序来理解这个this关键字:
未完,待续。