静态块和静态字段有什么区别?

What is difference between static block and static field?

我看了this issue,我很困惑。他使用静态块。他为什么要写一行?

这两者有什么区别?

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

private static Pattern email_pattern;

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

您的示例的行为没有区别。静态块可以用来做更多的逻辑,而不仅仅是分配一个变量。无需在您的示例中使用该块。

两个代码片段做同样的事情,但大多数人会发现精简版更易于阅读。

有些事情在单行赋值版本中是做不到的,比如处理异常。在这些情况下,您必须使用初始化程序块。

第三种方法是将初始化程序代码移动到(静态)方法中。

private static final Pattern pattern = doSomethingReallyComplexHere();