子類與父類的在類的啓動時,遵循父類先加載,子類後加載的規則,常會用做於坑爹筆試題。下面看代碼解釋。 有兩個類 Parent 和 Child,Child extend Parent。測試
public class Parent { public static int parent; static { System.out.println("This is Parent"); } } public class Child extends Parent { public static int child; static { System.out.println("This is Child"); } }
接下來,咱們寫一個Test測試類來測試這父子類的加載順序code
public class Test { public static void main(String[] args) { System.out.println(Child.child); } }
咱們來輸出Child裏的child變量,結果爲對象
This is Parentclass
This is Child變量
0object
由此可看出,在訪問Child裏的靜態成員變量child的時候,會引發類的加載,同時,子類加載以前,父類會先於子類加載。因此先輸出父類結果,其次子類,最後本身的成員變量程序
緊接着,咱們再寫一個Test類來訪問父類筆試
public class Test { public static void main(String[] args) { System.out.println(Parent.parent); } }
結果爲static
This is Parent筆試題
0
因而可知,在加載父類的時候,子類不會被加載。這個比較容易理解,由於全部的對象的父類都是object,若是你加載object時,子類也加載了,那程序豈不是要崩潰。。。
最後,再用下面的寫法再作一個測試,用子類去訪問父類的靜態成員變量
public class Test { public static void main(String[] args) { System.out.println(Child.parent); } }
結果爲
This is Parent
0
子類仍是沒有被調用,這是爲何呢,這裏須要注意,雖然使用了Child的類,但並無訪問Child的靜態成員變量,因此不會引發Child類的加載,而父類Parent的靜態成員變量被訪問了,因此父類會加載。 結果就爲上。