考虑一个静态
变量,例如:
private static int x;
如果我们尝试在 main 方法中打印它的值,它将是 0。因此该变量被初始化。现在考虑变量是否是final
:
private static final int x;
这是不可能的;为什么?我们必须像 private static Final int x = 2;
一样初始化它,或者使用静态初始化程序,例如:
static {
x = 2;
}
默认情况下会初始化静态
变量;那么如果变量也是final
,为什么会出现编译错误呢?
最佳答案
原则上,该语言可以让您声明一个staticfinal
字段并让它采用默认值,但实际上,如果您未能为staticfinal给出显式值
code> 字段,那么它几乎总是错误的。所以编译器在这里给你一个错误,因为
- 此代码执行了您几乎肯定不希望它执行的操作(或者未能执行您几乎肯定确实想要执行的操作),并且
- 默认值将是一些微不足道的值,例如 0 或
null
,因此,如果使用该值符合您的预期,那么给您带来的不便就会很小;您只需编写static final int x = 0;
而不是static final int x;
。
事实上,强制显式写入 = 0
或 = null
会使您的代码更易于阅读、理解和维护。请记住,大多数代码的读取次数比编写次数多数百或数千倍,因此通过更加详细和明确实际上可以节省时间。
关于java - 为什么强制初始化静态最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210525/