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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨建聪 中级黑马   /  2013-1-8 14:35  /  2566 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 11:58 编辑

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


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

点评

这个在毕老师的视频上有详细讲到,你可以去看看  发表于 2013-1-8 14:51

6 个回复

倒序浏览
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了
  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。
其实没有为什么记住就行了,希望能帮到你。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
代码懒得写了,用楼上的代码做说明好了,首先,第一个问题,不能使用public private访问修饰符,但是可以使用protected 和默认访问修饰符,第二个问题,在于内部类与成员变量的生命周期,因为成员变量周期短,所以当方法结束时,成员变量已经不存在了,这是内部类中的方法再去访问成员变量,就会出错。所以需要家桑final类增加成员变量的生命周期
回复 使用道具 举报
李培根 来自手机 金牌黑马 2013-1-9 08:52:43
板凳
黑马王振宇 发表于 2013-1-8 14:50
就拿毕姥爷的代码给你说说,哈哈哈这里用到培根贡献的代码了看到class Inner了吗?他定义在了类中的方法中 ...

我的代码?自己都不记得了。
回复 使用道具 举报
这种情况多见于匿名内部类,方法中直接new一个接口或者类的子类,并提供实现:例如
public static void main(String[] args){
    new  Thread(new Runnable(){
         public void run(){
            //TODO ....
        }
    }).start();
}
回复 使用道具 举报
求解 :此代码如果 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);
        }

}
会有结果吗?
回复 使用道具 举报
不明白你的意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马