2015-12-23 27 views
-3
public class Singleton { 
    private static class SingletonHolder { 
     private static final Singleton INSTANCE = new Singleton(); 
    } 

    private Singleton() { 
    } 

    public static Singleton getInstance() { 
    return SingletonHolder.INSTANCE; 
    } 

    public static void main(String args[]) { 
    Singleton s = new Singleton(); 
    Singleton s2 = new Singleton(); 
    } 
    } 

基於「有效的Java」,單例類與上面類似。Java中的單例類問題

假設我們在這個類中有一個主要部分。我們可以啓動單例類很多次,因爲我們希望,像

Singleton s1=new Singleton(); 
Singleton s2=new Singleton(); 
Singleton s3=singleton.getInstance(); 
Singleton s4=singleton.getInstance(); 

但單例類應該是可以只啓動一次一類,但如果我們聲明上述多個實例,編譯器不會拋出一個錯誤,爲什麼?

+2

閱讀封裝。當然,在課堂內你可以做任何你想做的事。然而,除此之外,... –

+0

凡是扣除我分數的人都可以解釋爲什麼,我的問題是與Java中單例類有關的唯一問題。 – sevenxuguang

回答

0

單例類應該是一個只能被其他類實例化的類。這通常通過私有構造函數來實現。但是,私有構造函數不能阻止類中的實例化。

你應該閱讀這個問題,雖然:What is an efficient way to implement a singleton pattern in Java?

如果按照約書亞布洛赫的想法,並使用一個枚舉來實現你單身,那麼你將不能夠甚至從類中打破單合同。

+0

但是在同一個包中,我聲明瞭另一個類,但是我也可以根據需要啓動儘可能多的實例?我只是嘗試在日食但沒有顯示錯誤.... – sevenxuguang

+0

你使用枚舉?對於枚舉類型,不可能有多個單一實例。此外,編譯器永遠不會發出類似「您剛剛創建了單例的兩個實例」的錯誤。單例是一種模式,編譯器不會驗證它。 –

+0

我不使用枚舉。如果我可以在另一個類中創建多個實例,創建「單例類」的含義是什麼? – sevenxuguang