黑马程序员技术交流社区
标题:
为什么定义在method方法中的y变量被此方法中的内部类方法调用必须被final修饰
[打印本页]
作者:
、海
时间:
2014-6-4 22:14
标题:
为什么定义在method方法中的y变量被此方法中的内部类方法调用必须被final修饰
class Outer {
int x =3;
void method(){
final int y =4;//此处为什么必须被final修饰?
class Inner{
void function(){
System.out.println(y);
}
}
new Inner().function();
}
}
复制代码
作者:
java木
时间:
2014-6-4 22:47
哥们你的内部类都写到方法里了
作者:
热血青年
时间:
2014-6-4 22:52
被final修饰后就不能改了~~~~
作者:
多一点
时间:
2014-6-4 23:18
本帖最后由 多一点 于 2014-6-4 23:19 编辑
因为生命周期的原因,方法中的局部变量,方法结束后,这个变量就会被干掉。
内部类和外部类的生命周期是一样长的,如果定义在方法中的局部变量没有别final修饰,当外部类调用这个方法结束,那么这个变量也就不再存在于内存中,这时候内部类用到这个变量,但是内部类运行的代码块还没有结束。这个时候就会出现内部类访问不到这个变量的情况,出现错误或异常。局部变量被final修饰后,可以理解为提升为了不可变的成员常量(个人这么理解)因为实在无法理解啦。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2