这一章节我们来聊聊构造器的初始化。
(1)域的初始化在构造器初始化之前
package com.ray.testobject;
public class Test {
private int id;
public Test() {
System.out.println("id:"+id);
id = 2;
System.out.println("id:"+id);
}
public static void main(String[] args) {
new Test();
}
}
输出:
id:0
id:2
从输出的结果可以看见,属性域在构造器之前已经初始化。
(2)初始化的顺序
无论属性域放到哪里,它的初始化都先于构造器的初始化,而且是按照排列的顺序初始化。
package com.ray.testobject;
public class Test {
private int id;
public Test() {
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("book:" + book);
id = 2;
name = "jack";
book = new Book();
System.out.println("id:" + id);
System.out.println("name:" + name);
System.out.println("book:" + book);
}
private String name;
private Book book;
public static void main(String[] args) {
new Test();
}
}
class Book {
public Book() {
System.out.println("create book");
}
}
输出:
id:0
name:null
book:null
create book
id:2
name:jack
book:com.ray.testobject.Book@c3c749
从上面的代码可以看出,无论属性域是基本类型还是对象,它们的初始化都在构造器初始化之前,而且是按照排列的顺序初始化。
在构造器初始化之前,id初始化为0,name和book是对象,初始化为null。
我们下面再举一个例子:
package com.ray.testobject;
public class Test {
public static void main(String[] args) {
new House();
}
}
class Window {
public Window(int id) {
System.out.println("create window:" + id);
}
}
class House {
Window w1 = new Window(1);
public House() {
System.out.println("create house");
w2 = new Window(99);
}
Window w2 = new Window(2);
}
输出:
create window:1
create window:2
create house
create window:99
总结:这一章节主要介绍构造器初始化的顺序。
这一章节就到这里,谢谢。
-----------------------------------