Java中,當(dāng)一個(gè)類被實(shí)例化時(shí),首先會(huì)先初始化其父類。這個(gè)過程中,類的靜態(tài)成員會(huì)被按照定義的順序初始化。然后,父類的構(gòu)造方法會(huì)按照定義的順序執(zhí)行。
當(dāng)父類初始化完畢后,接下來就是子類的初始化過程。子類的靜態(tài)成員會(huì)被按照定義的順序初始化,然后子類的構(gòu)造方法會(huì)按照定義的順序執(zhí)行。
需要注意的是,如果子類沒有顯式地調(diào)用父類的構(gòu)造方法,Java會(huì)默認(rèn)調(diào)用父類的無參構(gòu)造方法。也就是說,如果父類沒有無參構(gòu)造方法,子類就必須顯式地調(diào)用父類的有參構(gòu)造方法來初始化父類的成員。
public class Parent { private int parentVar; static { System.out.println("Parent static block"); } public Parent() { System.out.println("Parent constructor"); } } public class Child extends Parent { private int childVar; static { System.out.println("Child static block"); } public Child() { System.out.println("Child constructor"); } public static void main(String[] args) { Child child = new Child(); } }
運(yùn)行上面的代碼,輸出結(jié)果如下:
Parent static block Child static block Parent constructor Child constructor
可以看到,先初始化了父類,再初始化子類。靜態(tài)成員按照定義的順序初始化,構(gòu)造方法按照定義的順序執(zhí)行。
上一篇go rpcx php
下一篇go 與 php