class Window
{
Window(int er){System.out.println("window("+er+")");}
}
class House
{
Window w1=new Window(1);
House()
{
System.out.println("House()");
w3=new Window(33);
}
Window w2=new Window(2);
void f(){System.out.println("f()");}
Window w3=new Window(3);
}
public class OrderOfInitialization{
public static void main(String[] args)
{
House h=new House();
h.f();
}
}
没错!是《thinking in java》的例子~
小弟不明了 调用h.f()的时候最先打印出的不是f() 最后输出结果不懂 我不太明白
{
Window(int er){System.out.println("window("+er+")");}
}
class House
{
Window w1=new Window(1);
House()
{
System.out.println("House()");
w3=new Window(33);
}
Window w2=new Window(2);
void f(){System.out.println("f()");}
Window w3=new Window(3);
}
public class OrderOfInitialization{
public static void main(String[] args)
{
House h=new House();
h.f();
}
}
没错!是《thinking in java》的例子~
小弟不明了 调用h.f()的时候最先打印出的不是f() 最后输出结果不懂 我不太明白
window(1)
window(2)
window(3)
House()
window(33)
f()帮你分析下为什么会是这样的输出结果. main里面是实例的House对象, 加载类的时候,先初始化静态成员,由于没有静态成员,所以这步跳过! 创建对象的时候,首先初始化成员字段,然后执行构造方法,
House类里面的成员字段的顺序的window(1),window(2),window(3)所以会先输出这三个,然后调用构造方法,输出House(),构造函数里面会执行w3=new Window(33); 所以会输出window(33)。实例完了以后,h.f()就会输出f(). 步骤就是这样.希望对LZ有所帮助
类加载时处理static修饰的属性、方法、静态代码块
类加载完成后,执行 new 对象名,它分成4步
1,为对象分配内存空间
2,为属性赋默认值(引用类型为 null,基本类型为 0/0.0,char为\u0000,boolean为false)
3,为属性赋显示值 (就是“=”后面的值)
4,调用构造方法
所以对于你的问题:
Window w1 = new Window(1);
Window w2 = new Window(2);
Window w3 = new Window(3);
都是House类的属性,当new House()会执行类加载,类加载完成后,执行上面的4步,它们三个会首先依次执行,结果依次输出
window(1)
window(2)
window(3)
再去调用House()构造方法 输出
House()
最后执行 w3 = new Window(33); 给引用w3重新赋对象,输出
window(33)
House h = new House(); 到此结束
再去执行 h.f(); 输出
f()
1、将代码进行良好的格式化,以方便阅读。
2、在发帖文本框的上方单击“#”按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello { // 程序入口
public static void main(String[] args) {
System.out.println("Hello!");
}
}
{
Window(int er){System.out.println("window("+er+")");}
}
class House
{
Window w1=new Window(1);
House()
{
System.out.println("House()");
w3=new Window(33);
}
Window w2=new Window(2);
void f(){System.out.println("f()");}
Window w3=new Window(3);
}
public class OrderOfInitialization{
public static void main(String[] args)
{
House h=new House();
h.f();
}
}