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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jacoblx 中级黑马   /  2014-12-10 03:30  /  1146 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义在方法内的内部类,访问方法内的变量必须是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

7 个回复

倒序浏览
有深度,是不是跟Date类的权限有关?
java.lang.Object
  继承者 java.util.Date
回复 使用道具 举报
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行
回复 使用道具 举报
boycechan 发表于 2014-12-10 08:25
有深度,是不是跟Date类的权限有关?
java.lang.Object
  继承者 java.util.Date

不是的,三楼说得对,是自动加了final关键字。
回复 使用道具 举报
cs8630323 发表于 2014-12-10 09:20
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行 ...

嗯,我试了下,确实如此。那么这个是哪个JDK版本加上的功能呢?
谢大神
回复 使用道具 举报
就1.8,一个无聊鸡肋多余的特性
回复 使用道具 举报
jacoblx 中级黑马 2014-12-11 00:54:38
7#
cs8630323 发表于 2014-12-10 21:53
就1.8,一个无聊鸡肋多余的特性

嗯,谢谢
回复 使用道具 举报
cs8630323 发表于 2014-12-10 09:20
新特性,final自动加了,不过写代码时还是自己加上吧,不然在老jvm不能运行 ...

哈哈,学习了!:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马