课堂里有一个大括号?

时间:2016-02-07 03:45:08

标签: java curly-braces braces

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

public class Test {
    // ...

    {
        int test;
    }

    // ...
}

这是否适用于Java?如果是这样,是什么?

1 个答案:

答案 0 :(得分:2)

这称为实例初始值设定项(JLS section 8.6)

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

还有一些静态初始化程序,它们相似但标有static关键字。

public class Test {

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

}

根据我的经验,静态intiailzers更常见,因为你可以在加载类时使用它们来设置复杂的类状态(比如链接JNI库)。