物件初始化過程與單例設計模式 餓漢式與懶漢式

2021-06-27 10:22:40 字數 985 閱讀 9274

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,這在單例中會造成嚴重的記憶體洩...