A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码

3 个回复

倒序浏览
哥们你的内部类都写到方法里了
回复 使用道具 举报
被final修饰后就不能改了~~~~
回复 使用道具 举报
本帖最后由 多一点 于 2014-6-4 23:19 编辑

因为生命周期的原因,方法中的局部变量,方法结束后,这个变量就会被干掉。
内部类和外部类的生命周期是一样长的,如果定义在方法中的局部变量没有别final修饰,当外部类调用这个方法结束,那么这个变量也就不再存在于内存中,这时候内部类用到这个变量,但是内部类运行的代码块还没有结束。这个时候就会出现内部类访问不到这个变量的情况,出现错误或异常。局部变量被final修饰后,可以理解为提升为了不可变的成员常量(个人这么理解)因为实在无法理解啦。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马