2015-04-13 5 views
4

Я задавался вопросом, ничего плохого с вызовом статического метода от статического блока для инициализации статических переменных, то есть я могу использоватьвызова статический метод от статического блока

public class AppProperties { 
    private static final Logger logger = LoggerFactory.getLogger(AppProperties.class); 

    private static final String PARSER_PROPERTIES_FILE = "/parser.properties"; 
    private static final Properties PARSER_PROPERTIES = new Properties(); 
    private static final Properties DAO_PROPERTIES = new Properties(); 


    static { 
     loadParserProperties(); 
     loadDaoProperties(); 
     //some other configuration 
    } 
    public static void loadParserProperties() { 
     //loading... 
    } 
     ... 
} 

Это нормально практика?

EDIT: Oracle говорит, что лучший способ затем статический является инициализируется так:

class Whatever { 
    public static varType myVar = initializeClassVariable(); 

    private static varType initializeClassVariable() { 

     // initialization code goes here 
    } 
} 

Они говорят

Преимущество частных статических методов является то, что они могут быть повторно использованы позже если вам нужно повторно инициализировать переменную класса.

Однако код для AppProperties также может использоваться повторно, поэтому это должно быть хорошим решением для повторного использования. Я просто чувствую, что чего-то не хватает, нет упоминания о вызове статических методов из статических блоков в любом месте, поэтому я думаю, что это плохая практика.

ответ

0

Static блок вызывает ваш метод только один раз при создании класса, Если вы хотите вызвать метод во время создания класса, вы можете его вызвать.

Static блок - это единственный способ, с помощью которого вы можете вызвать свои статические методы во время создания класса.

0

Это не должно быть проблемой, связанной с дизайном или лучшей практикой.

В любом случае желательно разделить кусок кода/функциональности на разные функции и сделать их static and calling from static block - это то, что требуется вашим приложениям при загрузке класса по JVM.

Преимущество static methods состоит в том, что они могут быть использованы повторно, если вам нужно. Таким образом, вы получаете большую гибкость с static method по сравнению с соответствующими static initialization block.

для получения дополнительной информации here

0

Вызов статического метода от статического блока приемлемым в случае, если вы действительно хотите, чтобы выполнить содержание в упомянутой статический метод только один раз, когда класс при получении инициализации в JVM первый время. Далее вы должны иметь в виду, что этот статический блок никогда не будет выполняться снова, даже если вы создали несколько объектов одного типа с вашим приложением, кроме первого создания.

Однако вы должны использовать статические переменные для хранения, если какие-либо значения должны использоваться с другими циклами создания объекта.

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