class A{
A(){ 
new B(this).print();
}
public void print(){
System.out.println("my name is A,nice to meet you ");
}
}
public class B{ 
A a; 
public B(A a){ 
this.a = a;
}  
public void print(){ 
a.print();  
System.out.println("hello,I'am B,nice to meet you too");
}
public static void main(String[] args){
new A();
}
}
今天看到这个例子突然感觉对这里的this不能解释了,new B(this)这里this带表当前对象A自己,并传递给B的构造器。但
是在执行这句话的时候A的构造器并没执行玩,也就是A对象还没创建完成,何来的A对象传给B?哪位大侠解释下

解决方案 »

  1.   

    程序先执行main方法  根据main方法一步一步往下执行  在你的main 方法里面不就是new A()么
      

  2.   

    new A()是执行的A的构造器,只有A的构造器执行玩了,A才真的new出来了啊
      

  3.   

    区分对象和引用即可。
    对象还没初始化完,你用到引用了。
    class A {
    int i;
    A() {
    new B(this).print();
    i = 5;
    } public void print() {
    System.out.println("my name is A,nice to meet you ");
    System.out.println("i is :" + i);
    }
    }public class B {
    A a; public B(A a) {
    this.a = a;
    } public void print() {
    a.print();
    System.out.println("hello,I'am B,nice to meet you too");
    } public static void main(String[] args) {
    new A();
    }
    }new A()分两部,先按照对象大小分配内存,把所有数据初始化为默认值,第二部是调用构造器。
    你的代码正是在第二部中间,其实对象已经有了,不过算是不完整的。
      

  4.   

    ZangXT的解释基本是正确的
      

  5.   

    来看下,this不就是对象A的引用么 把引用传递过去了
      

  6.   

    ZangXT说的有点道理,就是不知道好多地方这么用会不会出现问题
      

  7.   

    main()函数是程序的入口处,首先创建的是A的对象
      

  8.   

    new A();这里你已经构造了一个对象了,但没构造完成,因为你A()里将当前对象的引用传递给B的构造器,记住这句话··将引用传递给了构造器,即使实质还没构造完,但你的引用已经实实在在的存在了··