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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雨过山更翠 中级黑马   /  2014-11-29 13:03  /  1215 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类只能访问final局部变量,但是我测试的时候为什么,也能访问一般局部变量?
  1. class Outer
  2. {
  3.         //外部类方法
  4.         void method()
  5.         {
  6.                 int num = 11;

  7.                 //局部内部类
  8.                 class Inner
  9.                 {
  10.                         //局部内部类方法
  11.                         void method()
  12.                         {
  13.                                 System.out.println(num);
  14.                         }
  15.                 }
  16.                
  17.                 //外部类方法建立对象调用局部类中的方法
  18.                 new Inner().method();
  19.         }
  20. }

  21. class InnerClass_2
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 //建立外部类对象
  26.                 Outer out = new Outer();

  27.                 //调用外部类方法
  28.                 out.method();
  29.         }
  30. }
复制代码

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3 淡定

查看全部评分

9 个回复

倒序浏览
final int num = 11;
局部内部类调用外部变量,需要在前面加上final修饰符才能调用!
回复 使用道具 举报
运行结果如图

QQ截图20141129131141.png (3.71 KB, 下载次数: 14)

QQ截图20141129131141.png
回复 使用道具 举报
lwh316658735 发表于 2014-11-29 13:07
final int num = 11;
局部内部类调用外部变量,需要在前面加上final修饰符才能调用! ...

视频上是这么讲的,但是我没加final也能运行

点评

嗯,我改动了值,结果报错,显示:从内部类引用的本地变量必须是最终变量或实际上的最终变量  发表于 2014-11-29 14:43
jdk1.8隐式的添加了final 可以试试改变num的值,会报错  发表于 2014-11-29 14:35
回复 使用道具 举报
雨过山更翠 发表于 2014-11-29 14:03
视频上是这么讲的,但是我没加final也能运行

jdk版本的缘故吧!
回复 使用道具 举报

是了,版主说了,jdk1.8隐式的添加了final
回复 使用道具 举报
雨过山更翠 发表于 2014-11-29 14:45
是了,版主说了,jdk1.8隐式的添加了final

jdk1.8的新特性还没看过,感觉楼主的分享
回复 使用道具 举报
{:3_46:}原来如此 啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马