java單例模式

來源:互聯網
上載者:User

標籤:

  

/*
設計模式:解決某一類問題最行之有效方法
java中23中設計模式
單例設計模式:解決一個類在記憶體中只存在一個對象.

想要保證對象唯一.
1.為了避免其它程式過多建立該類對象.先控制禁止
其他程式建立對象.
2.還為了讓其他程式程式可以訪問到該類對象,只好在在
本類中自定一個對象.
3.為了方便其它程式對自訂對象的訪問,可以對外提供
一些訪問方式.

這三步怎麼用代碼體現呢.?
1,將建構函式私人化.不允許建立對象.
2,在類中建立一個本類對象.
3,提供一個方法,可以擷取到該對象.

*/
package jichu51;class Person{String name;private Person(){};//1.私人化構造方法static Person aPerson=new Person();//2.執行個體化本類對象public static Person getInstance (){return aPerson;}}public class Single {public static void main(String[] args) {// TODO Auto-generated method stubPerson A=Person.getInstance();A.name="小明";Person B=Person.getInstance();System.out.println(B.name);}}

  假如主函數中調用 Sing a = Single.getInstance, 在記憶體中是怎樣變化的呢(先執行那個,後執行那個,最好能詳細點),還有如果有有一個變數 Sing b = Single.getInstance, 為什麼a,b指向同一個地方,調用兩次的話不是new了兩次嗎- -

 

答:

因為是靜態變數 static Single s 所以類載入即被建立該變數s指向new Single() ,當調用getInstance時返回s對象。
因為該s對象屬於靜態成員變數存在方法區而不是在堆棧中。方法區儲存的東西只有一份。所以即使String b=Single.getInstance().返回的仍然是方法區中的唯一的靜態變數s。即單例模式只有一個靜態變數s指向該對象。不管怎麼調用都只有一個該對象。


java單例模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.