黑马程序员技术交流社区
标题:
内部类访问局部变量 关于final关键字的细节
[打印本页]
作者:
hoop.zeng
时间:
2015-5-4 15:33
标题:
内部类访问局部变量 关于final关键字的细节
在自学视频中看到第九天,讲到内部类定义在局部时,访问它所在的局部中的变量,若该变量不加final关键字会编译报错,视频中也有代码的编译演示。
但我敲了代码,局部变量没加final,能正常编译运行。代码如下:
class J9_1
{
public static void main(String[] args)
{
//新建外部类对象调用其中的Func方法
new Out().Func();
}
}
class Out
{
void Func()
{
int y =1;
//定义在局部中的内部类In
class In
{
//定义show方法,输出局部变量y
void show()
{
System.out.println("In:"+y);
}
}
//新建内部类In对象,并调用他的show方法
new In().show();
}
}
复制代码
运行结果是:In:1。
为了解开疑惑,我添加语句y=2,将y再次赋值。会报如下错误:
错误:从内部类引用的本地变量必须是最终变量或实际上的最终变量。
我的结论:
1.内部类定义在局部时,对于它所在局部的变量,只能访问final修饰过的局部变量
2.我用的是jdk1.80_31,若访问没被final修饰过的变量,不会报错,能编译运行。但会自动将该变量添加
final关键字,该变量不能被重复赋值。
作者:
laine
时间:
2015-5-4 16:08
因为内部类实例化后存储在堆中;局部变量存储在栈中,局部变量随着调用方法的结束而被释放,因此内部类不能去访问一个声明周期已经结束的局部变量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2