[英]Initialize static final variable
我想知道,有什么不同,在各种方法初始化静态最终变量?
private static final int i = 100;
要么
private static final int i;
static {
i = 100;
}
这两者有什么不同吗?
如果你只是设置变量,那么两种形式都是等价的(你应该使用前者,因为它更具可读性和简洁性)。
static {}
表单适用于您还需要执行除变量赋值之外的语句的情况。 (有点做作)的例子:
private static final int i;
static {
establishDatabaseConnection();
i = readIntFromDatabase;
closeDatabaseConnection();
}
静态块的主要原因是能够在初始化中添加一些逻辑,而不是在1行初始化中进行,例如初始化数组或其他东西。
是的,通过使用第二种方式,您可以使用try ... catch块并对异常做出反应,因为第一种方式无法捕获声明的异常。
在init类中执行字段和执行静态块时也有区别,但我没有详细信息,请参阅类实例化的语言规范以获取更多信息。
格雷茨,GHad
对于原始变量,什么都没有。 不同之处可能是初始化不是微不足道的,或者init方法/构造函数抛出一个已检查的异常 - 那么您需要一个static
块才能处理异常。
它们是相同的,除了你可以在静态代码块中写多行。
请参阅java的官方文章 。
您还可以使用前向参考初始化
public class ForwardReference {
private static final int i = getValue();
private static final int j = 2;
public static void main(String[] args) {
System.out.println(i);
}
private static int getValue() {
return j*2;
}
}
这里的关键是我们在声明'j'之前从'getValue'获得'j'的值。 静态变量按其出现的顺序初始化。
这将打印正确的值'4'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.