首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

有个Java有关问题求解

2012-08-15 
有个Java问题求解Java codepackage m.ypublic class Duck {Duck(int marker){System.out.println(Window

有个Java问题求解

Java code
package m.y;public class Duck {    Duck(int marker){        System.out.println("Window(" + marker + ")");    }    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构造函数之下他的值也不变呢..

[解决办法]
构造方法在属性初始化完毕之后在执行的。你上面那个House类有三个属性,所以在调用其构造方法前要先初始化这三个属性,所以输出了Window(1),Window(2),Window(3)。然后在调用它的构造方法在输出后面的。
[解决办法]
在构造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()

[解决办法]
探讨
引用:

顺便问一下,构造函数什么时候执行呢?

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

热点排行