Java语法中的Static {}是什么意思?

42

我遇到了这段Java代码:

static {
    String aux = "value";
    try {
        // some code here
    } catch (Exception e) { }
    String UUID_prefix = aux + ":";
}

我是Java新手,请解释一下这里发生了什么。


重复的主题!请勿重复发布。 - Bharath Sendhurpandi
7个回答

47

这是一个静态初始化块。可以将其视为构造函数的静态版本。当类被实例化时,构造函数被执行;当类被加载时,静态初始化块会被执行。

你可以像下面这样使用它们(显然是虚构的代码):

private static int myInt;

static {
    MyResource myResource = new MyResource();
    myInt = myResource.getIntegerValue();
    myResource.close();
}

请查看Oracle关于初始化字段的教程中的“静态初始化块”部分。


13

当你的类被类加载器加载时,将调用此代码块。


1
谢谢Joshi。实际上,我想将这段代码翻译成C ++。你能解释一下我该怎么做吗? - sufyan siddique
1
@sufyansiddique:你应该想出一个新问题。 - Bhesh Gurung
当类被加载时,在C++中执行的内容是什么?只需将代码块放在那里即可。 - jmj
为你的类编写一个函数并添加一个静态的 bool inited 字段。仅当 inited 为 false 时,从你的构造函数中调用该函数。在第一次调用后将其设置为 true。 - zeller

7

这是一个静态初始化块。你可能在类的主体中找到它,但不在任何方法之内。该静态初始化块仅在类加载时运行一次。


4

3

Sufyan,

静态初始化器不会被继承,并且只在JRE加载和初始化类时执行一次。这意味着无论您创建了多少个该类的对象,此静态块都只会初始化一次。

我不是它的忠实粉丝,我相信根据情况有更好的替代方案。

谢谢, Reds


2

这被称为静态初始化块,它将在加载此类时执行一次。


0

这个语法在Java 7之后已经过时了。现在的等效语法是:

public static void main(String[] args) {
    /*
      stuff
    */
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接