【问题标题】:What does Static {} mean in the Java Syntax?Java 语法中的静态 {} 是什么意思?
【发布时间】:2023-03-29 14:24:02
【问题描述】:

我遇到了这段 Java 代码:

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

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

【问题讨论】:

标签: java static


【解决方案1】:

这是一个静态初始化块。把它想象成构造函数的静态版本。构造函数在类被实例化时运行;加载类时会运行静态初始化块。

您可以将它们用于这样的事情(显然是伪造的代码):

private static int myInt;

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

请参阅Oracle's tutorial on initializing fields 的“静态初始化块”部分。

【讨论】:

    【解决方案2】:

    这是当你的类被类加载器加载时将被调用的代码块

    【讨论】:

    • 谢谢乔希。实际上,我想将此代码翻译成 C++。你能解释一下我该怎么做吗?
    • @sufyansiddique:你应该提出一个新问题。
    • C++ 中有什么是在加载类时执行的,只需将代码块放在那里即可
    • 为你的类编写一个函数并添加一个静态的bool inited 字段。仅当 inited 为假时,才从您的 ctor 调用该函数。在第一次调用后将其设置为 true。
    【解决方案3】:

    这是一个静态初始化块。您必须在任何方法之外的类主体中找到它。在类加载时,每个类的静态初始化块只运行一次。

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

        苏菲安,

        静态初始化器不会被继承,并且只会在类被 JRE 加载和初始化时执行一次。这意味着这个静态块只会被初始化一次,而不管你从这个类中创建了多少对象。

        我不是它的忠实粉丝,我相信根据情况会有更好的选择。

        谢谢, 红军

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            这种语法在 Java 7 中已经过时了。现在等效的是:

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

            【讨论】:

              猜你喜欢
              • 2017-03-18
              • 2017-08-13
              • 2013-11-02
              • 2011-01-19
              • 2013-05-23
              • 1970-01-01
              • 1970-01-01
              • 2012-05-05
              • 1970-01-01
              相关资源
              最近更新 更多