2016-03-22 7 views
2

, размышляя над шаблоном проектирования синглтона, я застрял между нетерпением и синтаксическим инициализацией инициализации одиночного элемента. Скажем нетерпеливый инициализации синглтон класс код -нетерпеливая инициализация singleton vs ленивая инициализация singleton

public class EagerInitSingleton { 

    private static final EagerInitSingleton instance = new EagerInitSingleton(); 

    //private constructor 
    private EagerInitSingleton(){} 

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

и статический блок одноплодной код класса, как followed-

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

LETS НЕ ГОВОРИТЬ О LAZY ИНИЦИАЛИЗАЦИИ И ниточный ЗДЕСЬ. Я хочу выяснить, как два статических блока в Static block singleton имеют здесь значение.

+0

почему вы кричите на нас? – Pragnani

+0

Я здесь, чтобы узнать что-то, поэтому, пожалуйста, проигнорируйте, если вам это не нравится .. :) –

ответ

1

Нет никакой разницы.

private static final EagerInitSingleton instance = new EagerInitSingleton(); 

эквивалентно

private static final EagerInitSingleton instance; 

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

, так что только обработка исключений является преимуществом? –

+0

Я бы сказал, что если статическое конечное поле может быть инициализировано в одной строке без статического блока, сделайте это. Только если это невозможно сделать в одной строке (скажем, для инициализации требуется несколько строк кода, или если вам нужно попробовать/поймать, как в вашем примере), вы должны использовать статический блок. –

+0

Нет проблем. Рад, что смог помочь –

Смежные вопросы