我在网上找不到任何关于这个的东西,因为我不知道要搜索什么,但是Java没有将这段代码标记为有错误:
public class Test {
// ...
{
int test;
}
// ...
}
这在Java中有什么用吗?如果是这样,怎么办?
这
称为实例初始值设定项(JLS 第 8.6 节)
创建对象时,实例初始值设定项在超级构造函数之后运行,但在定义它们的类的调用构造函数之前运行。请参阅 JLS 12.5 创建新类实例。具体而言,实例初始值设定项在对象创建过程的步骤 4 中进行评估。关键点是,无论使用什么构造函数来实例化对象,实例初始化器总是被调用。
还有一些静态初始值设定项类似,但标有 static
关键字。
public class Test {
static {
// Do something interesting on class load.
}
}
根据我的经验,静态 intiailzer 更常见,因为您可以在加载类时使用它们来设置复杂的类状态(如链接 JNI 库)。