我的项目中有一些喜欢静态初始化块的开发人员。有什么替代方法?这种替代方案的缺点是什么?
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 编程语言包括静态初始化块。
但
注意:没有必要在类定义的开头声明字段,尽管这是最常见的做法。只需要在使用它们之前声明和初始化它们。