黑马程序员技术交流社区

标题: 为什么定义在method方法中的y变量被此方法中的内部类方法调用必须被final修饰 [打印本页]

作者: 、海    时间: 2014-6-4 22:14
标题: 为什么定义在method方法中的y变量被此方法中的内部类方法调用必须被final修饰
  1. class Outer {
  2.         int x =3;
  3.         void method(){
  4.                 final int y =4;//此处为什么必须被final修饰?
  5.                
  6.                 class Inner{
  7.                         void function(){
  8.                                 System.out.println(y);
  9.                         }               
  10.                 }
  11.                 new Inner().function();
  12.         }

  13. }
复制代码

作者: 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