张开开 发表于 2012-3-5 11:36
这里涉及到一个生命周期问题,不是final的局部变量,你的方法结束了就没了。但是你的内部类却不是和你的方 ...
谢谢您!
我是这样理解的,即使是final修饰的变量,但是方法结束的时候还是会被释放。
所以,我就创建了一个外部类对象,调用function()方法返回并接收一个内部类对象。
这时,function()方法结束了,按正常的理解,这里的x和y都会被释放了,当然x在这不能编译通过。
可是这时候我调用局部内部类的show()方法却依然能打印出y的值。
我在想,会不会是被final修饰的变量会不会在局部内部类有个隐藏的备份?这时候调用的是否就不是方法体中的y了?
如果是这样的话,就能理解为什么要用final修饰了,如果不被final修饰的话,这个变量可以被更改,就意味着局部内部类就不知道该备份哪个数据了吧。- interface Inner
- {
- void show();
- }
- class Outer
- {
- public Inner function()
- {
- //int x = 0;
- final int y = 1;
- return new Inner()
- {
- public void show()
- {
- //System.out.println("x="+x);
- System.out.println("y="+y);
- }
- };
-
- }
- }
- class OuterClassDemo
- {
- public static void main(String[] args)
- {
- // new Outer().function().show();
- Outer out = new Outer();
- Inner in = out.function();
- in.show();
- }
- }
复制代码 |