屬性、方法、構造方法和自由塊都是類中的成員,在建立類的物件時,類中各成員的執行順序:
1.父類靜態成員和靜態初始化快,按在**中出現的順序依次執行。
2.子類靜態成員和靜態初始化塊,按在**中出現的順序依次執行。
3. 父類的例項成員和例項初始化塊,按在**中出現的順序依次執行。
4.執行父類的構造方法。
5.子類例項成員和例項初始化塊,按在**中出現的順序依次執行。
6.執行子類的構造方法。
public
class initialordertest
// 初始化塊
// 構造器
public initialordertest()
public
static
void main(string args)
}
執行以上**,我們會得到如下的輸出結果:
靜態變數
靜態初始化塊
變數初始化塊
構造器
這與上文中說的完全符合。那麼對於繼承情況下又會怎樣呢?我們仍然以一段測試**來獲取最終結果:
class parent
// 初始化塊
// 構造器
public parent()
}
public
class subclass extends parent
// 初始化塊
// 構造器
public subclass()
// 程式入口
public
static
void main(string args)
}
執行一下上面的**,結果馬上呈現在我們的眼前:
父類--靜態變數
父類--靜態初始化塊
子類--靜態變數
子類--靜態初始化塊
父類--變數
父類--初始化塊
父類--構造器
子類--變數
子類--初始化塊
子類--構造器
現在,結果已經不言自明了。大家可能會注意到一點,那就是,並不是父類完全初始化完畢後才進行子類的初始化,實際上子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。
那麼對於靜態變數和靜態初始化塊之間、變數和初始化塊之間的先後順序又是怎樣呢?是否靜態變數總是先於靜態初始化塊,變數總是先於初始化塊就被初始化了呢?實際上這取決於它們在類中出現的先後順序。我們以靜態變數和靜態初始化塊為例來進行說明。
同樣,我們還是寫乙個類來進行測試:
public
class testorder
// 靜態變數
public
static testb b = new testb();
public
static
void main(string args)
}
class testa
}
class testb
}
執行上面的**,會得到如下的結果:
test--a
靜態初始化塊
test--b
java初始化順序
1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...
java初始化順序
例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...
JAVA初始化順序
1 當使用新建物件例項或者呼叫靜態成員變數或者方法時,初始化靜態變數 2 靜態變數在初始化時在前面的先初始化,靜態塊和靜態變數相同對待 在初始化過程中,有新建物件例項的時候,暫時停止後面的靜態變數初始化 3 靜態變數沒有初始化時,使用預設的初始值 如int為0 4 新建物件例項,對非靜態的成員變數進...