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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-11 13:37  /  1730 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Outer
{
        int x=3;
        void method()
        {
                final int y = 4;
                class Inner//局部内部类不可定义静态成员
                {
                        void function()
                        {
                                System.out.println(Outer.this.x);                        }
                }
                new Inner().function();
        }
}


class InnerClassDemo4
{
        public static void main(String[] args)
        {
                new Outer().method();
                System.out.println("Hello World!");
        }
}


代码中的红色部分Outer.this.x代表的是什么意思啊,为什么不能改成OuterInner().x啊??

6 个回复

倒序浏览
Inner是类名,用类名只能直接访问类中的静态成员,这里Inner中的function()方法是非静态的,所以只能用对象名访问,在建立对象之前并不知道对象名,所以用this表示,因此不能用Outer.Inner().x而用Outer.this.x
回复 使用道具 举报
若外部类属性,内部类属性,内部类方法变量同名,则其访问方式分别是:
        访问外部类的属性:外部类类名.this.属性
        访问内部类属性:this.属性
        访问内部类方法的局部变量:属性
回复 使用道具 举报
若外部类属性,内部类属性,内部类方法变量同名,则其访问方式分别是:
        访问外部类的属性:外部类类名.this.属性
        访问内部类属性:this.属性
        访问内部类方法的局部变量:属性
回复 使用道具 举报
Outer.this.x   这是访问外部类变量x
this  代表它在函数所属对象的引用
this.x  代表它在函数所属对象的x。
那我想用外部类的x .外部类谁的x 就加上类名.谁调用就用谁类名。
Outer.this.x

回复 使用道具 举报
内部成员不是静态的不能直接 类型.成员  来调用。
Outer.this.x  这里Outer 是外部类,this 是现在未知的将来会调用 x 变量的对象。
回复 使用道具 举报
金兴 中级黑马 2012-4-11 15:38:35
7#
Outer.this.x 这句指引用 Outer类中的成员变量,内部类的变量引用 直接用this.变量名 就行了   
变量名在内存中的运行图::
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马