這一章節我們接著上一章節的內容。
(3)靜態資料的初始化
a.靜態資料只會執行一次
package com.ray.testobject;
public class test
public static void main(string args)
}class book
public void say()
}
輸出:create book:1
create book:2
create test
hi, my name is book-1
hi, my name is book-2
create book:3
hi, my name is book-3
create test
hi, my name is book-1
hi, my name is book-2
create book:3
hi, my name is book-3
從結果可以看見,book1和book2只在第一次建立test的時候建立了一次,然後再次建立test時就不再建立book1和book2。
b.如果不被引用或者不new,物件裡面的靜態屬性域不會建立。
我們修改一下上面的**:
package com.ray.testobject;
public class test
public static void main(string args)
}class book
public void say()
}class groupofbooks
}
上面的**是不會執行new book(99)這一行的。
我們再進行修改,給出兩種執行new book(99)的例子:
package com.ray.testobject;
public class test
public static void main(string args)
}class book
public void say()
}class groupofbooks
}
package com.ray.testobject;
public class test
public static void main(string args)
}class book
public void say()
}class groupofbooks
}
上面兩段**同樣輸出:
create book:99
這裡總結一下物件建立的過程:
1.查詢.class檔案的路徑
2.載入.class檔案,執行物件的靜態方法或者靜態屬性域
3.new物件,然後分配記憶體空間(記憶體空間清零,則物件**,引用變成null)
4.執行屬性域初始化
5.執行構造器
總結:這一章節主要討論了靜態屬性域的初始化。
這一章節就到這裡,謝謝。目錄
構造器初始化
構造器初始化 1.初始化順序 即使變數定義分散於方法定義之間,它仍會在任何方法 包括構造器 被呼叫之前得到初始化。變數定義的先後順序決定了初始化的順序 例 package clear class window class house window w2 new window 2 void f win...
C 初始化器和建構函式初始化器
初始化器分為物件初始化器和集合初始化器。下面一一介紹。物件初始化器 物件初始化器的作用,簡單點說就是可以使我們初始化乙個類的 變得更簡潔。比如下面這個類 class person public int age public string address 我們要初始化它並對它賦值的話通常要這樣 per...
構造器的初始化
可以用構造器來進行初始化。在執行時刻,你可以呼叫方法或執行某些動作來確定初值,這 為你在程式設計時帶來了更大的靈活性。但要牢記 你無法遮蔽自動初始化的進行,它將在構造 器被呼叫之前發生。因此,假如使用下述 class counter 那麼i首先會被置 0,然後變成 7。對於基本型別和物件引用,包括在...