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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
不写final也没有报错呀?

4 个回复

倒序浏览
顶!d=====( ̄▽ ̄*)b
回复 使用道具 举报
不写不报错,但是用的时候就会报错。
回复 使用道具 举报
  1. public class TestInnerClass {
  2.     public static void main (String[] args) {
  3.         int a = 10;
  4.         class InnerClass {
  5.             int b = a;
  6.             void print(){
  7.                 System.out.println (a+1);
  8.             }

  9.         }
  10.        new InnerClass ().print ();
  11.     }
  12. }
复制代码


我试了下 怎么也能运行呢?
同求指点
回复 使用道具 举报
jdk1.8之后会默认加上final. 1.7之前必须加上,原因是局部变量在栈中使用完之后会弹栈消失,而内部类的对象依然可能调用该局部变量.所以必须延长局部变量的生命周期,即加上final进入常量池~~~~~~
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马