1.物件初始化過程:(先載入類到記憶體,然後載入類屬性,成員方法)定義乙個類person, 在new person("zhangsan",20);
初始化過程:
1.因為new 用到person.class檔案,所以會先找到person.class檔案並載入到記憶體中.
2.執行該類中的static靜態**塊,如果有的話,給person.class類進行初始化.
3.在對記憶體中開闢空間,分配記憶體位址.
4.在對記憶體中建立物件的特有屬性,並進行預設初始化.
5.對屬性進行顯示初始化.
6.對物件進行對應的構造**塊初始化.
7.對物件中建構函式進行初始化.,
8.將記憶體位址付給棧記憶體中的p變數.
注意: 靜態只能在棧記憶體裡,非靜態變數在堆裡.
2.單例設計模式:解決乙個類在記憶體中只存在乙個物件(保證物件唯一).
1.禁止其他程式建立該類物件.
2.在本類自定義乙個物件.
3.為了提供其他程式使用該類物件,對外提供一些訪問方法.
解決問題:
1.將建構函式私有化.(私有化無參建構函式,這樣外界就不能直接訪問該類物件.)
2.在類中建立乙個本類物件.(靜態類)
3.提供乙個方法可以獲取到該物件(靜態方法).
(一開始就建立)單例餓漢式(初始化時候建立物件):(開發常用)
class single
public static getinstance()
}(建立後用)單例懶漢式(物件被呼叫時才建立物件):
class single
private single s=null;
public static single getinstance()}}
return s;}}
注意:1.常用餓漢式.
2.在使用懶漢式時,會出現執行緒衝突(多程式同時建立),這是後要加上synchronized
物件初始化過程
class person 靜態 塊 static 構造 塊 public void setname string name public void speak public static void showcountry class newperson 當程式執行到person p new pers...
物件初始化過程
1.這是個筆記.helloparent.class public class helloparent public helloparent hellochild.class public class hellochild extends helloparent public hellochild p...
單例初始化(MRC模式之autorelease)
最近在一專案中,在某個地方總是有記憶體閃退問題,經排查之後,終於找到問題所在。專案中崩潰的地方使用單例寫的 mrc模式 其中單例的初始化方法如下 getcalendarevents shareinstence return get 上述 中使用了autorelease,這在單例中會造成嚴重的記憶體洩...