java - 为什么强制初始化静态最终变量?

标签 java initialization final

考虑一个静态变量,例如:

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> 字段,那么它几乎总是错误的。所以编译器在这里给你一个错误,因为

  1. 此代码执行了您几乎肯定不希望它执行的操作(或者未能执行您几乎肯定确实想要执行的操作),并且
  2. 默认值将是一些微不足道的值,例如 0 或 null,因此,如果使用该值符合您的预期,那么给您带来的不便就会很小;您只需编写 static final int x = 0; 而不是 static final int x;

事实上,强制显式写入 = 0= null 会使您的代码更易于阅读、理解和维护。请记住,大多数代码的读取次数比编写次数多数百或数千倍,因此通过更加详细和明确实际上可以节省时间。

关于java - 为什么强制初始化静态最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210525/

相关文章:

java - 我们应该在保存实体时处理异常吗

Java 8 Completable Future - 并行执行

c++ - 在适用性方面,如果 "const int &i"和 "const int i"都是用文字/表达式初始化的,它们有何不同?

go - 一个结构体的单向链表的初始化

java - 如何直接初始化 HashMap(以字面方式)?

Swift Final 类和函数

java - Android:使线程每秒运行的标准方法

面向 Java/*nix 程序员的 C#

java - 为什么Java中的接口(interface)变量是隐式静态的?

java公共(public)静态最终对象