【问题标题】:Lone braces inside a class?一个班级里的单独的大括号?
【发布时间】:2016-02-07 03:45:07
【问题描述】:

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

public class Test {
    // ...

    {
        int test;
    }

    // ...
}

这在 Java 中有什么用途吗?如果有,是什么?

【问题讨论】:

  • 不,它没有任何作用。这是允许的,但该代码现在不执行任何操作。
  • @LouisWasserman 我假设他在询问块是什么,而不是在他的示例中它在做什么。虽然我可能是错的。

标签: java curly-braces braces


【解决方案1】:

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

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

还有一些类似的静态初始化器,但用 static 关键字标记。

public class Test {

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

}

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

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多