/**
* person p = new person();
1,載入person.class檔案。
2,執行person類中的靜態**塊對person類進行初始化。
3,在堆記憶體開闢空間分配記憶體位址,並對物件中的屬性進行預設初始化和構造**塊初始化。
注:(構造**塊的初始化跟物件中的預設屬性是一致的,誰在前,就先例項化誰。)
如:下面則先執行int x=4;
在執行構造**塊,之後再執行int y=5;
***********************************====
int x = 4;
int y=5;
***********************************====
4,與之對應的建構函式初始化。
5,將物件的記憶體位址值賦值給p。 *
*/
public class staticcode {
int x = 4;
// system.out.println("d" + age);//在這裡如果寫上成員變數age,則會編譯失敗,不管age屬性是私有還是共有。
system.out.println("d");
static {
system.out.println("a");
private int age=2;
staticcode(int x) {
system.out.println("g");
staticcode() {
system.out.println("f");
void show() {
system.out.println("e");
class staticcodedemo {
static {
system.out.println("b");
//此方法執行的輸出的值依次是:
b、a、
d、f、
e、d、g、e
public static void main(string args) {
new staticcode().show();
new staticcode(4).show();
InitOrder初始化執行順序
目錄總結 包的引用,函式執行順序 go algorithm 根目錄 a a.go b b.go main.go a.gopackage a import fmt func init func a1 func a2 b.gopackage b import fmt go algorithm a fun...
c 物件初始化順序
c 物件初始化 1.先變數後建構函式。變數先被初始化 然後建構函式被執行 2.先靜態化後例項化。當乙個類被訪問時 靜態變數和建構函式最先被初始化 接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式 派生物件在基物件之前被初始化.比如 c類派生自b類 b類派生自a類 ...
物件的初始化順序
由 static 關鍵字修飾的 如 類變數 靜態變數 靜態 塊 將在類被初始化建立例項物件之前被初始化,而且是按順序從上到下依次被執行 沒有 static 關鍵字修飾的 如 例項變數 非靜態變數 非靜態 塊 初始化實際上是會被提取到類的構造器中被執行的,但是會比類構造器中的 塊優先執行到,其也是按順...