class 中的单独大括号?

Lone braces inside a class?

我在网上找不到关于此的任何信息,因为我不知道要搜索什么,但是 Java 没有将此代码标记为有错误:

public class Test {
    // ...

    {
        int test;
    }

    // ...
}

这对 Java 有用吗?如果有,是什么?

这称为实例初始化器(JLS section 8.6)

创建对象时,实例初始值设定项在超级构造函数之后 运行 但在它们定义的 class 的被调用构造函数之前。参见 JLS 12.5 Creation of New Class Instances。具体来说,实例初始化器在对象创建过程的第 4 步中被评估。关键是无论使用什么构造函数来实例化对象,实例初始化器总是被调用。

还有一些类似的静态初始值设定项,但标有 static 关键字。

public class Test {

    static {
       // Do something interesting on class load.
    }

}

根据我的经验,静态初始化器更为常见,因为您可以在加载 class 时使用它们来设置复杂的 class 状态(例如链接 JNI 库)。