class A{
public A(){ System.out.println("A constructor"); }
static { System.out.println("A static init block"); }}
class B extends A{
public B(){ System.out.println("B constructor"); }
static { System.out.println("B static init block"); }}
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B();
}
}
Selected Answer:
A static init block
A constructor
B static init block
A constructor
B constructor
第一部分很清楚,Superclass 將首先執行。“B b = new B();”部分怎么樣?這個子類會去超類嗎?如果是這樣,為什么沒有第二次列印“靜態初始化塊”?如果子類不去超類,為什么會列印“A constructor”?
先感謝您!
uj5u.com熱心網友回復:
靜態初始化塊在類加載后執行一次。由于類 A 在實體化 A 時已加載,因此在實體化 B 時不再需要加載它。因此靜態初始化程式不會再次運行。
每次創建該類的實體時都會運行建構式。由于實體不僅是它的直接類的實體,而且是超類的實體,如果您沒有在子類建構式中顯式呼叫超類建構式,則會隱式呼叫它。因此,每次實體化一個類時都會運行超類建構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433407.html
上一篇:如何根據用戶輸入中斷代碼的執行
