思考题
局部内部类访问局部变量时,被访问的局部变量为什么必须用final修饰才可以访问?
答:
因为局部变量会随着方法的调用而调用,随着调用完毕而消失
这个时候局部对象并没有立马从堆内存中消失,还要使用这个变量
为了让数据还能继续被使用,就用 final 修饰
这样在堆内存里面存储的其实使一个常量值
class Outer {
public void show() {
final int num = 10;
class Inner {
public void mether() {
System.out.println(num);
/*
编译后的class文件在进行反编译后
会发生一下变化
System.out.println(num); ---> System.out.println(10);
也就是说原来的用 final 的变量名通过编译后就变成了对应的常量值
*/
}
}
Inner i = new Inner();
i.mether();
}
}
class InnerClassDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.show();
}
}