實踐出真知,上**:
package test;
//用來檢測建立順序的類
public
class
c}
package test;
//父類
public
class
astatic
public
static c c2=
newc
("父類"
,"靜態成員變數");
public c c=
newc
("父類"
,"普通成員變數");
}
package test;
//子類
public
class
bextends
apublic
static c c2=
newc
("子類"
,"靜態成員變數");
static
public c c=
newc
("子類"
,"普通成員變數");
}
package test;
//執行類
public
class
main5
}
開啟第一處注釋結果:
由此可知:類的靜態**塊和靜態成員變數的初始化不需要建立物件,不像一些博文裡面描述的第一次建立物件的時候才會初始化靜態**塊和靜態成員變數,應該說是第一次引用類的時候類的靜態**塊和靜態成員變數的被初始化,而且只會被初始化一次。
開啟第二處注釋結果:
先來分析**塊和成員變數間的先後順序:
由 1與2、3與4 和子父類的**可以知道:靜態**塊和靜態成員變數的初始化順序和**中出現的順序有關,普通**塊和普通成員變數也一樣
順序總結:
父類靜態**塊/父類靜態成員變數(與編寫**的順序有關)–>子類靜態**塊/子類靜態成員變數(與編寫**的順序有關)–>父類普通**塊/父類普通成員變數(與編寫**的順序有關)–>父類的構造方法–>子類普通**塊/子類普通成員變數(與編寫**的順序有關)–>子類的構造方法
Java建立物件的順序
建立乙個類 c的物件 1.載入所有得類。2.執行靜態初始化。3.分配記憶體,並初始化為零。4.處理呼叫的c的建構函式的引數。6.處理隱式或者顯式的建構函式 this 或者super 7.初始化c中的變數。8.執行c的 instance initialization 9.執行 呼叫的c的建構函式。cl...
Java物件的建立
使用new關鍵字 使用物件的clone方法 使用反序列化 使用class類的newinstance方法 使用constructor的類的newinstance方法 方式一 person lamze new person lamze 18 方式二 使用clone方法建立物件 步驟 1 要建立的物件的類...
java物件的建立過程
以一道例題開始 public class test static public test string str public static int print string str public static void main string args 執行結果是 1 j i 0 n 0 2 構造快...