從頭認識java-4.7 構造器初始化(1)
這一章節我們來聊聊構造器的初始化。
(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
總結:這一章節主要介紹構造器初始化的順序。
這一章節就到這裡,謝謝。