java單例學習

所謂單態(單例),就是調用類模版創建的對象是同一個對象.好比一臺電視機(單態對象).有兩個遙控器(我們創建的對象引用). 但操作的卻是同一臺電視機.servlet類就是一個典型單例.

下面說明一下如何創建一個單態類:

首先將類的構造器私有化例如class Test{ private Test(){System.out.println("開始初始化");}//私有化構造器}

其次就是該類包含一個成員變量,此成員變量的類型和類本身一致:在第一步基礎上舉例如下:class Test{ private Test(){System.out.println("開始初始化");}//私有化構造器

private static Test instance;//定義一個Test類型的成員變量,

}

其次就是創建一個方法來返回一個Test對象.這裏要考慮的是用new Test()方法返回的話返回的對象當然是不同對象了.例如這樣:public static Test getNewTest(){return new Test();},想到上面我們已經定義了一個靜態變量.如果給它一個對象.我們再來訪問這個變量.因爲這個變量是靜態的,那麼不就是訪問的同一個對象了麼? 於是可以這麼做public static Test getInstance(){

if(instance==nuul)

    instance =new Test();

return instance;

}

因爲這個變量是靜態的,所以對於調用者來說都是同一個.而這個靜態變量指向的又是單一的一個對象.當我們創建的該類引用變量時,實質上就是得到的這個靜態變量的引用.自然操作的對象就是同一個了.

下面貼上代碼.從代碼中更容易理解.

class test  
{
	public static void main (String[] args) throws java.lang.Exception
	{
		TV t1=TV.getInstance();
		t1.setName("TCL");
		System.out.println("未創建t2前.電視機的牌子是"+t1.getName());
	TV t2=TV.getInstance();
		t2.setName("華夏");
	    System.out.println("創建t2後,t1電視機的名字是"+t1.getName()); 
		System.out.println("t2電視機的名字"+t2.getName());
		if(t1==t2)
	System.out.println("t1和t2是同一臺電視機");
	}
}
class TV{
    private String name;
    private static TV instance;
    private TV(){
        System.out.println("正在執行構造器...,,");
        
    }
    
    
    public static TV getInstance(){
        
        if(instance==null)
        instance=new TV();
        return instance;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
}

代碼簡單易懂.這也使自己的一個學習總結吧..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章