黑马程序员技术交流社区

标题: java中内部类问题 [打印本页]

作者: 吴文龙    时间: 2013-7-27 19:40
标题: java中内部类问题
本帖最后由 杜光 于 2013-7-28 09:36 编辑

class outer
{
         static  int x=2;
        static class inner
        {
                 static int x=6;
        static        void function()
                {
                        int x=8;
                        System.out.println("inner  "+ outer.this.x);//我想问的是这个为什么不能访问外部类的int x=2呢都是静态的啊,这样的访问格式对吗?
                }
        }
     }
class  neibulei
{
        public static void main(String[] args)
        {

                    outer.inner.function();
                 
        }
}
作者: 草貌路飞    时间: 2013-7-27 19:48
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就行
作者: 影响力147753321    时间: 2013-7-27 20:11
是可以访问的。但是你的访问格式不对,静态方法中没有this .此时还没有对象。所以不能有this this代表的是对象引用。只能用于对象的成员方法中,访问格式为outer.x.加上outer 代表是外部类的静态变量。
作者: 吴文龙    时间: 2013-7-27 20:12
草貌路飞 发表于 2013-7-27 19:48
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就行

那为什么非静态的就可以使用outer.this.x呢?
作者: 王松松    时间: 2013-7-27 20:22
提示:无法从静态上下文中引用非静态变量 this。
原因:静态只能调用静态,this是非静态,所以你的格式是错误的。直接使用outer.x就可以了。

cuowu.PNG (5.6 KB, 下载次数: 0)

cuowu.PNG

作者: 诸隆隆    时间: 2013-7-27 23:02
自我矛盾了吧,说x是静态还用this。this关键字里有一条就是不能替代静态的
作者: 张强1    时间: 2013-7-27 23:08
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就可以

作者: 梁泽冕    时间: 2013-7-27 23:36
访问方式错误了,static修饰的类没有对象不需要使用this关键字。如果是非静态内部类访问非静态外部类对象的方法是 [外部类类名.this]
作者: xwf4348    时间: 2013-7-28 01:32
static修饰的类是不能有this关键字的。访问通过类名调用实现
作者: 續寫↖完羙↘    时间: 2013-7-28 10:21
静态中貌似不能使用this关键字吧。




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