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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

周周

中级黑马

  • 黑马币:6

  • 帖子:24

  • 精华:0

本帖最后由 周周 于 2015-6-14 22:14 编辑
  1. /*
  2. ???老毕说从内部类中访问局部变量,需要把局部变量声明成最终变量final
  3.         但我无论是否把局部变量声明成final,都可以运行出结果,没有报错。why?
  4.         在method中传入未用final修饰的变量,也可以运行
  5. */
  6. class Outer
  7. {
  8.         int x = 3;
  9.         void method(int a)
  10.         {
  11.                  int y = 4;
  12.                 class Inner
  13.                 {
  14.                         void function()
  15.                         {
  16.                                 System.out.println(a);

  17.                         }
  18.                 }

  19.                 new Inner().function();
  20.         }
  21. }
  22. class  NiMing1
  23. {
  24.         public static void main(String[] args)
  25.         {
  26.                 new Outer().method(7);
  27.                 Outer out = new Outer();
  28.                 out.method(8);
  29.                 out.method(9);
  30.                
  31.         }
  32. }
复制代码

10 个回复

正序浏览
这是jdk1.8的新特性,其实在局部变量前面隐藏了final,你试一下对y重新赋值就会报错。

评分

参与人数 1黑马币 +1 收起 理由
周周 + 1 知道啦,谢谢

查看全部评分

回复 使用道具 举报
你这种形式的内部类是不是不常用啊,一般都是直接在类的内部定义一个类,很少在方法内定义吧,还不清楚这种形式的具体的应用
回复 使用道具 举报
我试了下,如果参数 int a 不被final修饰的话 编译都不通过 报错,你后面传7,8,9进去 其实已经是把参数常量化了 不是传的变量
回复 使用道具 举报
周周 发表于 2015-6-14 22:12
方法里面是可以定义类的,叫内部类

额,百度了下,的确是内部类的另外一种形式
回复 使用道具 举报
周周 发表于 2015-6-14 22:12
方法里面是可以定义类的,叫内部类

类的内部定义一个类才叫内部类吧
回复 使用道具 举报
forTomorrow 发表于 2015-6-11 10:16
貌似没见过这种形式,方法里面定义一个类!应该不可以这样做吧

方法里面是可以定义类的,叫内部类
回复 使用道具 举报
如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。这时,为了方便设计和访问,直接将A类定义在B类中。就可以了。A类就称为内部类。内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
回复 使用道具 举报
貌似没见过这种形式,方法里面定义一个类!应该不可以这样做吧
回复 使用道具 举报
编译报错.
int a要用final修饰为  final  int  a
回复 使用道具 举报
因为我也渣,弱弱问一句,形参int a算局部变量么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马