2016-06-20 8 views
0

Ich sah this issue und ich bin verwirrt. Er verwendet einen statischen Block. Warum sollte er eine einzige Zeile schreiben?Was ist der Unterschied zwischen statischem Block und statischem Feld?

Was ist der Unterschied zwischen diesen beiden?

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

Und

private static Pattern email_pattern; 

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

Der erste hat unnötigerweise 2 Zuweisungen ... – fabian

Antwort

2

Beide Codefragmente tun das gleiche, aber die meisten Leute werden die kompakte Version leichter zu lesen finden.

Es gibt Dinge, die Sie in der Single-Line-Assignment-Version nicht tun können, z. B. die Behandlung von Ausnahmen. In diesen Fällen müssen Sie einen Initialisierungsblock verwenden.

Eine dritte Möglichkeit wäre, den Initialisierungscode in eine (statische) Methode zu verschieben.

private static final Pattern pattern = doSomethingReallyComplexHere(); 
6

Es gibt keinen Unterschied im Verhalten von Ihrem Beispiel. Ein statischer Block kann verwendet werden, um mehr Logik auszuführen als nur eine var zuzuweisen. Sie müssen den Block in Ihrem Beispiel nicht verwenden.