附加问题 哪个更好?
class {static final instance-variable = val}
或
class {static final instance-variable; static {instance-variable=val}}
答案 0 :(得分:4)
无论您想要使用的构造函数是什么,初始化块总是被称为。因此,如果有问题的类有多个构造函数,并且您想要运行某些代码而不管使用的构造函数,那么使用初始化块。
但是,当用于指定默认值时,我只是直接指定它们。如果它们甚至是常量,那么我也会将final
添加到修饰符列表中。
private static final String VAL1 = "VALUE";
更新,因为您彻底改变了问题,这是一个更新的答案:
1)你在哪里主要使用初始化块?
无论使用何种构造函数,都要执行一些代码。
2)您可以使用它们为静态实例变量赋值吗?
您需要一个static
初始化程序块。
private static final String FOO;
static {
FOO = "bar";
}
这样做的好处是,您可以做的不仅仅是分配值。例如。从某种方法获取它并处理异常:
static {
try {
FOO = getItSomehow();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
3)这与使用构造函数分配有什么不同?
无论使用何种构造函数,都会始终分配它。
4)我的书说在“加载类”时执行初始化块。加载一个类意味着什么?
这本书实际上是在谈论静态初始化块。当您在代码中第一次引用类时,通常会加载该类。您还可以通过Class#forName()
强制加载它(例如您使用JDBC驱动程序)。我在here之前发布了更多示例和解释的答案。
希望这有帮助。
答案 1 :(得分:1)
附加问题哪个更好?
class {static final instance-variable = val}
或
class {static final instance-variable; static {instance-variable=val}}
他们有相同的行为。在这种情况下,第一种形式更好,因为它更简洁,更容易阅读。
如果初始化太复杂,则只使用静态初始化程序块,以便使用带有初始化表达式的一系列静态声明清楚地表达。