我曾经参与的项目中,有些开发人员喜欢使用静态初始化块。这种做法的替代方案是什么?使用这种替代方案的缺点是什么?
public class BlockTest {
String test = new String();
static{
test = "test string";
}
}
据我所知,如果无法在一行内完成静态字段的赋值,则使用静态初始化块来设置静态字段的值。但我不明白为什么我们需要一个特殊的块来完成这个任务。这会降低可读性并引起一些混淆。
我曾经参与的项目中,有些开发人员喜欢使用静态初始化块。这种做法的替代方案是什么?使用这种替代方案的缺点是什么?
public class BlockTest {
String test = new String();
static{
test = "test string";
}
}
这个例子不太好。首先,它无法编译,因为你不能从静态初始化块中分配实例变量。但即使是正确的
public class BlockTest {
static String test = new String();
static{
test = "test string";
}
如果这样做的话,就没有意义了,因为它等同于
public class BlockTest {
static String test = "test string";
但是这个静态初始化块没有替代方案
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
...
在我看来,静态块是没有必要的。
String test = "test string";
并且来自文档
实例变量可以在构造函数中初始化,可以使用错误处理或其他逻辑。为了为类变量提供相同的功能,Java编程语言包括静态初始化块。
但是
注意:不必在类定义的开头声明字段,尽管这是最常见的做法。只需要在使用之前声明和初始化即可。