2016-03-22 23 views
2

tekil tasarım deseni üzerinde dururken, ben istekli başlatma tekil ve statik blok başlatma tekil desen arasında sıkışmış. en hevesli başlatma tekil sınıf kodu diyelim -eager initialization singleton vs tembel başlatma tekil

public class EagerInitSingleton { 

    private static final EagerInitSingleton instance = new EagerInitSingleton(); 

    //private constructor 
    private EagerInitSingleton(){} 

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

ve

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; 
    } 
} 

takip edilmeye BURAYA TEMBEL Başlatma ve İPLİK GÜVENLİĞİ HAKKINDA konuşmak sağlar gibi statik blok Singleton sınıf kodu. Statik blok tektonundaki iki statik bloğun burada nasıl bir fark yarattığını öğrenmek istiyorum.

+0

neden bize bağırıyorsun eşdeğerdir? – Pragnani

+0

Ben bir şey öğrenmek için buradayım, bu yüzden hoşlanmıyorsanız lütfen göz ardı edin .. :) –

cevap

1

Fark yoktur.

private static final EagerInitSingleton instance = new EagerInitSingleton(); 

private static final EagerInitSingleton instance; 

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

böylece sadece istisna işleme avantajı nedir? –

+0

Statik bir son alanın statik bir blok olmaksızın bir satırda başlatılabileceğini söyleyebilirim. Yalnızca bir satırda yapılamıyorsa (başlangıçta kodun birkaç satırını aldığını ya da örneğinizde olduğu gibi try/catch'a ihtiyacınız varsa), statik bir blok kullanmalısınız. –

+0

Sorun değil. Yardımcı olduğuma sevindim –