【发布时间】: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 {
String aux = "value";
try {
// some code here
} catch (Exception e) { }
String UUID_prefix = aux + ":";
}
我是 Java 新手,请解释一下这里发生了什么。
【问题讨论】:
这是一个静态初始化块。把它想象成构造函数的静态版本。构造函数在类被实例化时运行;加载类时会运行静态初始化块。
您可以将它们用于这样的事情(显然是伪造的代码):
private static int myInt;
static {
MyResource myResource = new MyResource();
myInt = myResource.getIntegerValue();
myResource.close();
}
请参阅Oracle's tutorial on initializing fields 的“静态初始化块”部分。
【讨论】:
这是当你的类被类加载器加载时将被调用的代码块
【讨论】:
bool inited 字段。仅当 inited 为假时,才从您的 ctor 调用该函数。在第一次调用后将其设置为 true。
这是一个静态初始化块。您必须在任何方法之外的类主体中找到它。在类加载时,每个类的静态初始化块只运行一次。
【讨论】:
【讨论】:
苏菲安,
静态初始化器不会被继承,并且只会在类被 JRE 加载和初始化时执行一次。这意味着这个静态块只会被初始化一次,而不管你从这个类中创建了多少对象。
我不是它的忠实粉丝,我相信根据情况会有更好的选择。
谢谢, 红军
【讨论】:
这称为静态初始化块,将在加载此类时执行一次。
【讨论】:
这种语法在 Java 7 中已经过时了。现在等效的是:
public static void main(String[] args) {
/*
stuff
*/
}
【讨论】: