黑马程序员技术交流社区

标题: 关于内部类定义在局部的问题 [打印本页]

作者: 杨建聪    时间: 2013-1-8 14:35
标题: 关于内部类定义在局部的问题
本帖最后由 张向辉 于 2013-1-16 11:58 编辑

看毕老师的视频得到结论:
内部类定义在局部时:
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量


问题是这个定义在局部是个什么情况?那位同学有演示给详细解释下这个知识点

作者: 黑马王振宇    时间: 2013-1-8 14:50
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了
  1. class Outer
  2. {
  3.         int x = 3;

  4.         void method(final int a)
  5.         {
  6.                 final int y = 4;
  7.                 class Inner
  8.                 {
  9.                         void function()
  10.                         {
  11.                                 System.out.println(y);
  12.                         }
  13.                 }
  14.        
  15.                 new Inner().function();
  16.                
  17.         }
  18. }


  19. class  InnerClassDemo3
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Outer out = new Outer();
  24.                 out.method(7);
  25.                 out.method(8);
  26.         }

  27. }
复制代码
看到class Inner了吗?他定义在了类中的方法中里,这就是你说的定义在了局部,
第一点不说了就是字面意思,
第二点说的是他可以访问x,但是不能访问y,想访问y的话,需要加final。
其实没有为什么记住就行了,希望能帮到你。
作者: 王阳    时间: 2013-1-8 23:42
代码懒得写了,用楼上的代码做说明好了,首先,第一个问题,不能使用public private访问修饰符,但是可以使用protected 和默认访问修饰符,第二个问题,在于内部类与成员变量的生命周期,因为成员变量周期短,所以当方法结束时,成员变量已经不存在了,这是内部类中的方法再去访问成员变量,就会出错。所以需要家桑final类增加成员变量的生命周期
作者: 李培根    时间: 2013-1-9 08:52
黑马王振宇 发表于 2013-1-8 14:50
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了看到class Inner了吗?他定义在了类中的方法中 ...

我的代码?自己都不记得了。
作者: 舒远    时间: 2013-1-9 09:04
这种情况多见于匿名内部类,方法中直接new一个接口或者类的子类,并提供实现:例如
public static void main(String[] args){
    new  Thread(new Runnable(){
         public void run(){
            //TODO ....
        }
    }).start();
}
作者: 昨夜星风    时间: 2013-8-3 18:46
求解 :此代码如果 final int y = 4;这个代码去掉 ,System.out.println(a);
其它不变  这样  运行
class  InnerClassDemo3
{
        public static void main(String[] args)
        {
                Outer out = new Outer();
                out.method(7);
                out.method(8);
        }

}
会有结果吗?
作者: ^o(孤8o|狼i¤F    时间: 2014-4-5 14:21
不明白你的意思




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