我遇到了这段Java代码:
static {
String aux = "value";
try {
// some code here
} catch (Exception e) { }
String UUID_prefix = aux + ":";
}
我是Java新手,请解释一下这里发生了什么。
这是一个静态初始化块。可以将其视为构造函数的静态版本。当类被实例化时,构造函数被执行;当类被加载时,静态初始化块会被执行。
你可以像下面这样使用它们(显然是虚构的代码):
private static int myInt;
static {
MyResource myResource = new MyResource();
myInt = myResource.getIntegerValue();
myResource.close();
}
请查看Oracle关于初始化字段的教程中的“静态初始化块”部分。
当你的类被类加载器加载时,将调用此代码块。
bool inited
字段。仅当 inited
为 false 时,从你的构造函数中调用该函数。在第一次调用后将其设置为 true。 - zeller这是一个静态初始化块。你可能在类的主体中找到它,但不在任何方法之内。该静态初始化块仅在类加载时运行一次。
Sufyan,
静态初始化器不会被继承,并且只在JRE加载和初始化类时执行一次。这意味着无论您创建了多少个该类的对象,此静态块都只会初始化一次。
我不是它的忠实粉丝,我相信根据情况有更好的替代方案。
谢谢, Reds
这被称为静态初始化块,它将在加载此类时执行一次。
这个语法在Java 7之后已经过时了。现在的等效语法是:
public static void main(String[] args) {
/*
stuff
*/
}