黑马程序员技术交流社区

标题: 什么时候需要定义内部类?求大神解答 我用的JDK是1.8,是... [打印本页]

作者: 周周    时间: 2015-6-10 23:58
标题: 什么时候需要定义内部类?求大神解答 我用的JDK是1.8,是...
本帖最后由 周周 于 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. }
复制代码

作者: 小乎乎    时间: 2015-6-11 00:10
因为我也渣,弱弱问一句,形参int a算局部变量么
作者: danlyalex    时间: 2015-6-11 00:13
编译报错.
int a要用final修饰为  final  int  a
作者: forTomorrow    时间: 2015-6-11 10:16
貌似没见过这种形式,方法里面定义一个类!应该不可以这样做吧
作者: 1958078929    时间: 2015-6-11 16:55
如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。这时,为了方便设计和访问,直接将A类定义在B类中。就可以了。A类就称为内部类。内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
作者: 周周    时间: 2015-6-14 22:12
forTomorrow 发表于 2015-6-11 10:16
貌似没见过这种形式,方法里面定义一个类!应该不可以这样做吧

方法里面是可以定义类的,叫内部类
作者: forTomorrow    时间: 2015-6-16 11:33
周周 发表于 2015-6-14 22:12
方法里面是可以定义类的,叫内部类

类的内部定义一个类才叫内部类吧
作者: forTomorrow    时间: 2015-6-16 11:48
周周 发表于 2015-6-14 22:12
方法里面是可以定义类的,叫内部类

额,百度了下,的确是内部类的另外一种形式
作者: forTomorrow    时间: 2015-6-16 11:56
我试了下,如果参数 int a 不被final修饰的话 编译都不通过 报错,你后面传7,8,9进去 其实已经是把参数常量化了 不是传的变量
作者: forTomorrow    时间: 2015-6-16 11:58
你这种形式的内部类是不是不常用啊,一般都是直接在类的内部定义一个类,很少在方法内定义吧,还不清楚这种形式的具体的应用
作者: YQC2015    时间: 2015-6-16 13:54
这是jdk1.8的新特性,其实在局部变量前面隐藏了final,你试一下对y重新赋值就会报错。




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