2016-03-22 13 views
2

シングルトンデザインパターンを熟考しながら、私は熱心な初期化シングルトンとスタティックブロック初期化シングルトンパターンの間にいました。 のは熱心な初期シングルトンクラスのコードを言ってみましょう - followed-eager初期化シングルトン対遅延初期化シングルトン

public class StaticBlockSingleton { 

    private static StaticBlockSingleton instance; 

    private StaticBlockSingleton(){} 

    //static block initialization for exception handling 
    static{ 
     try{ 
      instance = new StaticBlockSingleton(); 
     }catch(Exception e){ 
      throw new RuntimeException("Exception occured in singleton instance"); 
     } 
    } 

    public static StaticBlockSingleton getInstance(){ 
     return instance; 
    } 
} 

として

public class EagerInitSingleton { 

    private static final EagerInitSingleton instance = new EagerInitSingleton(); 

    //private constructor 
    private EagerInitSingleton(){} 

    public static EagerInitSingleton getInstance(){ 
     return instance; 
    } 
} 

と静的ブロックシングルトンクラスコードHERE遅延初期化とスレッドの安全性について話をしないことができます。 スタティックブロックシングルトンで2つのスタティックブロックがどのように変化しているかを把握したいと思います。

+0

に相当しているのですか? – Pragnani

+0

私は何かを学ぶためにここにいますので、好きではない場合は無視してください。:) –

答えて

1

違いはありません。あなたは私たちに叫んでいる理由

private static final EagerInitSingleton instance = new EagerInitSingleton(); 

private static final EagerInitSingleton instance; 

static { 
    instance = new EagerInitSingleton(); 
} 
+0

例外処理だけが利点ですか? –

+0

私は静的な最終フィールドが静的なブロックなしで1行で初期化できるとすれば、それを言う。 1行で実行できない場合(たとえば、初期化するのに数行のコードが必要な場合、または例のようにtry/catchが必要な場合)、静的ブロックを使用する必要があります。 –

+0

問題ありません。お役に立てて嬉しいです –

関連する問題