黑马程序员技术交流社区
标题:
关于局部内部类只能访问final修饰的局部变量
[打印本页]
作者:
ddewym123
时间:
2014-8-1 20:58
标题:
关于局部内部类只能访问final修饰的局部变量
如这篇文章:http://android.blog.51cto.com/268543/384809 所示,通过反编译内部类的class文件,可知局部内部类只能访问final修饰的局部变量的原因。
下面是我自己动手试验:
package com.cn.itcast;
public class OuterTest {
public static void main(String[] args) {
new Outer().method(4);
}
}
class Outer{
private int i=3;
public void method(final int y){
final int beep=12;
class Inner{
public void function(){
System.out.println(i);
System.out.println(beep);
System.out.println(y);
}
}
new Inner().function();
}
}
复制代码
对于上述代码编译后产生的内部类字节码Outer$1Inner.class,进行反射,得到反编译代码如下:
class com.cn.itcast.Outer$1Inner
{
com.cn.itcast.Outer$1Inner(com.cn.itcast.Outer,int);
public void function();
final com.cn.itcast.Outer this$0;
private final int val$y;
}
复制代码
我的疑问是:
为什么只有处于方法参数的局部变量y,内部类编译时产生了一个备份用的变量val$y;而处于方法内的局部变量beep却没有?
PS:反射的代码见参考文章的附件。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2