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

内部类定义在局部时,只能访问被final修饰的局部变量。不然编译就会报错。可是如下程序中,局部变量a并没有用final修饰,为什么编译可以通过,并且可以正常打印出a的值呢?求高手解答。
  1. public class Outer{
  2.         public void function(){
  3.                 int a = 3;
  4.                 class Inner{
  5.                         void method(){
  6.                                 System.out.println(a);
  7.                         }
  8.                 }
  9.                 new Inner().method();
  10.         }
  11.         public static void main(String[] args){
  12.                 Outer j = new Outer();
  13.                 j.function();
  14.         }
  15. }
复制代码

1 个回复

倒序浏览
已经懂了,是JDK版本的问题,我用的是JDK1.8,即使不加final,编译也会通过,但编译器会默认该变量是final类型的。这也许是新版本的一个bug吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马