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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© abathe 中级黑马   /  2014-12-27 23:29  /  951 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老毕在视频里讲到:当内部类在“局部”位置时,不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。而且看他视频里演示的结果确实佐证了这点。可是当我用“jdk1.8.0_25”版本来编译按老毕思路写出的错误代码时,能编译通过,而且出正确结果。想询问下论坛里的高手,是否在新版本里在“局部”位置的内部类也能访问非final修饰的局部变量
  1. class Outer
  2. {
  3.         int x=3;
  4.         void method(int a)
  5.         {
  6.                 int y=4;
  7.                 class Inner
  8.                 {
  9.                         void function()  
  10.                         {
  11.                                 System.out.println(x);
  12.                         }
  13.                         void function2()
  14.                         {
  15.                                 System.out.println(a);
  16.                         }
  17.                         void function3()
  18.                         {
  19.                                 System.out.println(y);
  20.                         }
  21.                 }
  22.                 new Inner().function();   <font color="#ff0000">//内部类访问外部类中的成员变量x</font>
  23.                 new Inner().function2(); <font color="#ff0000">//内部类访问局部变量a</font>
  24.                 new Inner().function3(); <font color="#ff0000">//内部类访问局部变量y</font>
  25.         }
  26. }
  27. class InnerClassDemo4
  28. {
  29.         public static void main(String[] args)
  30.         {
  31.                 new Outer().method(5);
  32.         }
  33. }
复制代码




内部类实例.jpg (125.75 KB, 下载次数: 0)

参考老毕思路写出的错误代码

参考老毕思路写出的错误代码

内部类.jpg (149.41 KB, 下载次数: 1)

老毕课程视频截图

老毕课程视频截图

评分

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

查看全部评分

5 个回复

倒序浏览
JDK1.8以后这个局部变量的final就被省略了,但是它还是存在的
回复 使用道具 举报
听说是新版默认添加了
回复 使用道具 举报
cz萑 发表于 2014-12-27 23:40
JDK1.8以后这个局部变量的final就被省略了,但是它还是存在的

谢谢解疑!!!!!
回复 使用道具 举报
内部类学的好乱
回复 使用道具 举报
abathe 发表于 2014-12-28 20:12
谢谢解疑!!!!!

:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马