Java中关于this变量用法的问题

class A{
public A(){
new B(this).print();
}
public void print(){
System.out.println("Hello from A");
}
}

class B{
A a; //????

public B(A a){ //????
this.a=a;
}
public void print(){
a.print();
System.out.println("Hello from B");
}
}

public class ThisUse{
public static void main(String[] args){
new A(); //????
}
}
请具体解释一下程序,谢谢

class A{
//A的构造函数,创建了一个匿名的对象B,B的构造函数的参数是A的实例,然后调用B的print方法
public A(){
new B(this).print();
}
public void print(){
System.out.println("Hello from A");
}
}

class B{
A a; //在B类中声明了一个A类型变量a

public B(A a){ //B的构造函数,参数是A
this.a=a; //将参数a传递给B对象中的a变量
}
public void print(){
a.print(); //调用了B对象中的a变量的print方法
System.out.println("Hello from B");
}
}

public class ThisUse{
public static void main(String[] args){
new A(); //创建一个匿名的A类对象
}
}

显示结果为:
Hello from A
Hello from B

注意点:观察两个类构造函数的结构,分析被调用的方法的先后顺序。在这里this的作用体现在:
new B(this).print(); A将自己的实例对象当作参数传入B的构造函数;
this.a=a; 调用了B自己的实例对象的变量a,为其赋值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-12-20
this在哪个类中,就表示引用的哪个类.
就拿你写的来说,
class B{
A a; //????

public B(A a){ //????
this.a=a;
}
/////////////////////////////////
this.a=a;
你总不能写a=a;吧,this.a代表的是A a,你在B中定义的这个a,不是public B(A a)这里的形参.
this.a=a;后面那是a才是pblic B(A a)中的a.
第2个回答  2007-12-20
this相当于实例化过的自己
相似回答