可能重复:
静态初始化块
在查看一些旧代码时,我发现了一些我以前从未见过的相当奇怪的语法。在做了一些研究之后,我现在知道我看到的是一个static{}
块(如果我理解正确的话)是一个在初始化时执行的代码块。
我不明白的是拥有这样一个功能的优势,或者什么时候可能想要使用它。看起来静态块只包含可以属于任何常规静态方法的常规代码行,那么让它在初始化时自动运行有什么好处(除了为程序员节省一行代码来调用方法)?为什么这很重要或有用?
正如他们在Java 教程中所说:
如果初始化需要一些逻辑(例如,错误处理或填充复杂数组的 for 循环),简单的赋值是不够的。实例变量可以在构造函数中初始化,其中可以使用错误处理或其他逻辑。为了为类变量提供相同的功能,Java 编程语言包括静态初始化块。
将其视为静态变量的构造函数。它使您有机会在任何人使用它们之前对其进行初始化。
正如您所说,静态块在初始化时执行。假设您有一个可能非常复杂的静态字段,例如
private static List<ThingsDownloadedByTheNet> ls;
只是在做
private static List<ThingsDownloadedByTheNet> ls = new ArrayList<ThingsDownloadedByTheNet>
还不够,因为您可能还想设置列表元素。因此,您执行一个静态块,在其中执行一些初始化(在这种情况下,您连接到服务器并填充列表元素)
static{}
加载类时执行块。您可以使用它来初始化静态字段或调用静态方法。您不能使用任何方法来替换此行为,因为类“没有构造函数”。实际上,您可以将其视为“类构造函数”。