黑马程序员技术交流社区

标题: 局部内部类访问方法内变量问题 [打印本页]

作者: jacoblx    时间: 2014-12-10 03:30
标题: 局部内部类访问方法内变量问题
定义在方法内的内部类,访问方法内的变量必须是final变量,这是毕老师说的,网上也公认这一说法

但是

在我机器上怎么能访问呢?我的是JDK1.8

代码如下

import java.util.Date;


class Outer {
  int x = 1;


  void func(final int z) {
    final int y = 2;
    Date d = new Date();


    class Inner {
      void func() {
        System.out.println("Outer.x = " + /* Outer.this. */x);
        System.out.println("y (final int) = " + y);
        System.out.println("z (parameter final int) = " + z);
        System.out.println("d (Date) = " + d); // 这里为什么局部内部类可以访问方法中的非final变量?
      }
    }
    new Inner().func();
  }
}




public class InnerClass {
  public static void main(String[] args) {
    new Outer().func(5);
  }
}


运行结果
Outer.x = 1
y (final int) = 2
z (parameter final int) = 5
d (Date) = Wed Dec 10 02:54:12 CST 2014


作者: boycechan    时间: 2014-12-10 08:25
有深度,是不是跟Date类的权限有关?
java.lang.Object
  继承者 java.util.Date

作者: cs8630323    时间: 2014-12-10 09:20
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行
作者: jacoblx    时间: 2014-12-10 18:57
boycechan 发表于 2014-12-10 08:25
有深度,是不是跟Date类的权限有关?
java.lang.Object
  继承者 java.util.Date

不是的,三楼说得对,是自动加了final关键字。
作者: jacoblx    时间: 2014-12-10 18:59
cs8630323 发表于 2014-12-10 09:20
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行 ...

嗯,我试了下,确实如此。那么这个是哪个JDK版本加上的功能呢?
谢大神
作者: cs8630323    时间: 2014-12-10 21:53
就1.8,一个无聊鸡肋多余的特性
作者: jacoblx    时间: 2014-12-11 00:54
cs8630323 发表于 2014-12-10 21:53
就1.8,一个无聊鸡肋多余的特性

嗯,谢谢
作者: boycechan    时间: 2014-12-11 17:35
cs8630323 发表于 2014-12-10 09:20
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行 ...

哈哈,学习了!:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2