-4

Недавно я наткнулся на следующий бит синтаксиса Java:Когда использовать инициализаторы?

static { 
... 
} 

по-видимому, это известно как «статический инициализатор» (см Static Block in Java) и «выполняется, когда класс загружается». Когда должен использоваться статический инициализатор? Каковы его преимущества и недостатки по сравнению с просто инициализацией переменных обычным способом?

+0

Связанный? http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java?rq=1 – Kevin

+0

http://www.jusfortechies.com/java/core-java/static-blocks. php – zod

+0

, когда вы хотите инициализировать статическую переменную с кодом. Это обычный способ инициализации переменных, которые не присваиваются простому выражению. Когда вам нужно это сделать, нет хорошей альтернативы, поэтому альтернативы не имеют большого значения. Вы можете создать статический метод для вызова каждой переменной, но это не изящно и может быть более запутанным. –

ответ

1

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

public class MediocreExample { 

    static List<String> strings = new ArrayList<String>(); 

    static { 
     strings.add("first"); 
     strings.add("second"); 
    } 

}   

Есть альтернативы, которые не используют блок инициализации:

public class MediocreExample { 

    static List<String> strings = createInitialList(); 

    private static List<String> createInitialList() { 
     List<String> a = new ArrayList<String>(); 
     a.add("first"); 
     a.add("second"); 
     return a; 
    } 

} 

Существует не очень веские причины, чтобы использовать не-инициализатора альтернативу - как вы можете видеть версию инициализатор очень ясно и сжато, - но я в том числе его, чтобы проиллюстрировать точку: Дон принимать проектные решения слепо, знаете, почему вы выбираете вариант, который вы выбираете.

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

public class MediocreExample { 

    static { 
     System.out.println("MediocreExample static init."); 
    }  

} 

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

Но, как обычно, используйте наиболее подходящий способ и обеспечивающий самый ясный и легко ремонтируемый код. Язык - это способ выразить идею, четко говорить (типа).

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

  • Нет связанных вопросов^_^