Java程序初始化工作可以在許多不同的代碼塊中來完成(例如靜態代碼塊、構造函數等),它們執行的順序如下:父類靜態變量、父類靜態代碼塊、子類靜態變量、子類靜態代碼塊、父類非靜態變量、父類非靜態代碼塊、父類構造函數、子類非靜態變量、子類非靜態代碼塊、子類構造函數。
下面Gd和大家一起看一個簡單的程序:
class Fu{
static{
System.out.println("Fu static block");
}
{
System.out.println("Fu block");
}
public Fu(){
System.out.println("Fu constructor");
}
}
public class Zi extends Fu{
static{
System.out.println("Zi static block");
}
{
System.out.println("Zi block");
}
public Zi(){
System.out.println("Zi constructor");
}
public static void main(String[] args){
new Zi();
}
}
看了這個程序的輸出結果,就會一目瞭然了:
Fu static block
Zi static block
Fu block
Fu constructor
Zi block
Zi constructor
對比上面的規則,就會很容易記住這些規律了。