package m.y;public class Duck {
Duck(int er){
System.out.println("Window(" + er + ")");
}
public static void main(String[] args) {
House h = new House();
h.f();
}
}
class House{
Duck w1 = new Duck(1);
House(){
System.out.println("House()");
w3 = new Duck(33);
}
Duck w2 = new Duck(2);
void f(){
System.out.println("f()");
}
Duck w3 = new Duck(3);
}第一次用这种方式插入代码也不知道行不行..再下想问一下
他的输出为什么是
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()
呢?为什么将w1放在House构造函数之下他的值也不变呢..

解决方案 »

  1.   

    构造函数 new 对象时执行。
      

  2.   

    构造方法在属性初始化完毕之后在执行的。你上面那个House类有三个属性,所以在调用其构造方法前要先初始化这三个属性,所以输出了Window(1),Window(2),Window(3)。然后在调用它的构造方法在输出后面的。
      

  3.   

    我感觉您这样回答不是很准确,比如说上面那个,在执行new操作时它并未先执行构造函数,而是先进行了一系列的初始化,所以我现在被搞得迷糊了,能解释下么...
      

  4.   

    在构造House对象(new House())的时候是先执行建立类的属性的,所以就会先按照顺序执行你的
    Duck w1 = new Duck(1);//打印出Window(1)
    Duck w3 = new Duck(2);//打印出Window(3)
    Duck w4 = new Duck(3);//打印出Window(3)
    然后才是执行House的构造函数的内容
    System.out.println("House()");//打印出House()
    w3 = new Duck(33);//打印出Window(33)
    然后h.f()调用f()方法打印出f()
      

  5.   

    为什么将w1放在House构造函数之下他的值也不变呢?楼主确定它的值不变吗??w1既然放到了House构造里 那么在new时才会被调用
    结果应该是Window(2)
    Window(3)
    Window(1)
    House()
    Window(33)
    f()
      

  6.   

    恩,呵呵,我懂了,我的以上是说把w1放在House后面,而不是构造里面,嘿嘿,谢谢大家啦~~