2016-06-20 4 views
0

Я посмотрел this issue, и я смущен. Он использует статический блок. Зачем ему писать одну строчку?В чем разница между статическим блоком и статическим полем?

В чем разница между этими двумя?

private static Pattern email_pattern = Pattern.compile(EMAIL_PATTERN); 

И

private static Pattern email_pattern; 

static { 
    email_pattern = Pattern.compile(EMAIL_PATTERN); 
} 
+0

Первый без необходимости имеет 2 задания ... – fabian

ответ

2

Оба фрагмента кода делают то же самое, но большинство людей найдет компактную версию более легкой для чтения.

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

Третий способ заключается в перемещении кода инициализатора в (статический) метод.

private static final Pattern pattern = doSomethingReallyComplexHere(); 
6

Там нет никакой разницы в поведении вашего примера. Статический блок может использоваться для большей логики, чем просто назначение var. Нет необходимости использовать блок в вашем примере.

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