/*
* 局部内部类能不能访问局部变量?为什么?
* 分析:可以,局部内部类能够访问用final修饰的局部变量。不能访问非final修饰的局部变量。
* 原因:局部变量与局部内部类的生存周期不同。
* 局部变量存在于栈中,当方法结束时,局部变量就从栈中消失了。
* 局部内部类的对象只有指向给对象的引用变量全部结束才会变成垃圾被系统回收,局部变量消失时,可能还在被局部内部类的对象使用
* 所以只有被final修饰变成常量,存在于方法区中,两者的生存周期才能匹配。
*
*/
class Outer {
Object obj = null;
public void method() {
//int a = 1;
// blog1.Outer.method().Inner
final int b = 2;
System.out.println("OuterMethod");
class Inner {
@Override
public String toString() {
// 沒被final修飾,不能夠內部類訪問。
// System.out.println(a);
System.out.println("Inner" + b);
return b + "";
}
}
obj = new Inner();
}
}
public class Proj01 {
public static void main(String[] args) throws Exception {
Outer outer = new Outer();
outer.method();
outer.obj.toString();
}
} |
|