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

  1. class Outer
  2. {
  3.     int x = 1;

  4.     void method()
  5.     {
  6.         int y = 3;    //局部内部类访问局部变量时,局部变量前必须用final修饰.
  7.                     //原因:局部变量存储在栈内存中,而栈内存的最大特点是用完立即消失,所以要加final延长此局部变量的生命周期以便和局部内部类的生命周期相同
  8.                     //同样是延长生命周期,但不能用static修饰,因为static根本不能修饰局部变量,所以只能用final修饰
  9.                     //【问题是:】这样没用final也可以
  10.                     //解决:JDK1.8后默认在局部内部类的局部变量前加上了final

  11.         class Inner    //局部内部类
  12.         {
  13.             void function()
  14.             {
  15.                 System.out.println(y);
  16.             }
  17.         }

  18.         new Inner().function();
  19.     }
  20. }

  21. class InnerClassDemo
  22. {
  23.     public static void main(String[] args)
  24.     {
  25.         System.out.println("Hello the InnerClassDemo.");
  26.         new Outer().method();
  27.     }
  28. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

倒序浏览
谢谢分享......
回复 使用道具 举报
对了,你可以将那个局部变量先采用Final修饰,然后在将final取消,你看看结果,你就明白了
回复 使用道具 举报
466273082 发表于 2015-1-30 22:13
对了,你可以将那个局部变量先采用Final修饰,然后在将final取消,你看看结果,你就明白了 ...

以上结果,都是试过了的结果,问老师,老师说是JDK1.8自己加的final
回复 使用道具 举报
豁然开朗啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马