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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在打印语句中如何打印这3个x变量?

class A {
int x = 1;
class B {
int x = 2;
void func() {
int x = 3;
System.out.println( ? );
        }
    }
}
下面是这道题的代码,这个代码看不懂,求大神给点注释!而且我看有的人的答案是这样的System.out.println(new A().x + "," + new B().x + "," + x);这两种的区别在什么地方?能详细的说一下吗?
public static void main(String[] args) {
        A xxx = new A();
        A.B x = xxx.new B();
        x.func();
    }

}
class A {
    int x = 1;
    class B {
        int x = 2;
        void func() {
            int x = 3;
            //打印这3个x变量。
            System.out.println(A.this.x+","+B.this.x+","+x);
        }
    }
}

4 个回复

倒序浏览
A.this.x这样写调用的是A类中的成员变量x
B.this.x这样写调用的是B类中的成员变量x,这里B是可以省略的
x这样写调用的就是本类中的成员变量
System.out.println(new A().x + "," +newA().new B().x + "," + x);这样是通过创建对象,然后调用自己类中的成员变量
回复 使用道具 举报
流水0215 发表于 2015-5-23 23:29
A.this.x这样写调用的是A类中的成员变量x
B.this.x这样写调用的是B类中的成员变量x,这里B是可以省略的
x这 ...

A xxx = new A();
        A.B x = xxx.new B();
        x.func();
这写是什么意思?
回复 使用道具 举报
进击的蜗牛 发表于 2015-5-23 23:45
A xxx = new A();
        A.B x = xxx.new B();
        x.func();

这是成员内部类的知识点,
B是A的内部类,
A.B表示在A的内部类B,
通过A实例对象,来创建内部类B的实例对象,
最后是通过内部类B的实例对象,调用内部类B的非静态方法fun()
回复 使用道具 举报
A和B其实就是内部类的关系,这个是通过创建对象,调用方法func().
要是实在不懂就去搜一下内部类,自己看看,不算太难,自己应该能看懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马