我遇到了这个Java代码:
static {
String aux = "value";
try {
// some code here
} catch (Exception e) { }
String UUID_prefix = aux + ":";
}
我是Java的新手,请解释这里发生的事情。
答案 0 :(得分:25)
这是一个静态初始化块。可以把它想象成构造函数的静态版本。在实例化类时运行构造函数;静态初始化块在类加载时运行。
你可以将它们用于这样的事情(显然是伪造的代码):
private static int myInt;
static {
MyResource myResource = new MyResource();
myInt = myResource.getIntegerValue();
myResource.close();
}
请参阅Oracle's tutorial on initializing fields的“静态初始化块”部分。
答案 1 :(得分:9)
这是在类加载器
加载类时将调用的代码块答案 2 :(得分:6)
这是一个静态初始化程序块。您必须在任何方法之外的类中找到它。在类加载时,静态init块仅对每个类运行一次。
答案 3 :(得分:3)
答案 4 :(得分:3)
苏富扬,
静态初始化程序不是继承的,只在JRE加载和初始化类时才执行一次。这意味着这个静态块只会被初始化一次,而不管你从这个类中创建了多少个对象。
我不是它的忠实粉丝,我相信有更好的选择,视情况而定。
谢谢, 红色
答案 5 :(得分:2)
这称为静态初始化块,并且在加载此类时将执行一次。
答案 6 :(得分:1)
从Java 7开始,这个语法已经过时了。现在等价的是:
public static void main(String[] args) {
/*
stuff
*/
}