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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴文龙 中级黑马   /  2013-7-27 19:40  /  1617 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 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();
                 
        }
}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

9 个回复

倒序浏览
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就行

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
是可以访问的。但是你的访问格式不对,静态方法中没有this .此时还没有对象。所以不能有this this代表的是对象引用。只能用于对象的成员方法中,访问格式为outer.x.加上outer 代表是外部类的静态变量。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
草貌路飞 发表于 2013-7-27 19:48
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就行

那为什么非静态的就可以使用outer.this.x呢?
回复 使用道具 举报
提示:无法从静态上下文中引用非静态变量 this。
原因:静态只能调用静态,this是非静态,所以你的格式是错误的。直接使用outer.x就可以了。

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

cuowu.PNG
回复 使用道具 举报
自我矛盾了吧,说x是静态还用this。this关键字里有一条就是不能替代静态的
回复 使用道具 举报
outer.this.x这样的访问方式是针对外部类对象的,直接使用外部类名out.x就可以
回复 使用道具 举报
访问方式错误了,static修饰的类没有对象不需要使用this关键字。如果是非静态内部类访问非静态外部类对象的方法是 [外部类类名.this]
回复 使用道具 举报
static修饰的类是不能有this关键字的。访问通过类名调用实现
回复 使用道具 举报
静态中貌似不能使用this关键字吧。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马