为什么
final
变量没有默认初始化?如果您对常量作为默认值感到满意,那么默认构造函数不应该将它们初始化为默认值。为什么必须在构造函数中初始化它们?为什么不能像其他变量一样在使用它们之前先初始化它们?
例如。
public class Untitled {
public final int zero;
public static void main(String[] args)
{
final int a; // this works
a = 4; // this works, but using a field doesn't
new Untitled();
}
}
Untitled.java:2: variable a might not have been initialized
- 为什么在声明
static Final
变量时必须对其进行初始化?为什么不能在任何其他方法中使用它们之前先初始化它们?
例如。
public class Untitled
{
public final static int zero;
public static void main(String[] args)
{
zero = 0;
}
}
Untitled.java:8: cannot assign a value to final variable zero
我问这些问题是因为我试图找到一个逻辑/概念上的原因,为什么这不起作用,为什么不允许。不仅仅是因为它不是。
最佳答案
final
变量背后的想法是它被设置一次且仅一次。
对于实例 final
变量,这意味着它们只能在初始化期间设置,无论是在声明时、在构造函数中还是在实例初始化 block 中。对于要在其他任何地方设置的变量,必须在非构造函数方法中进行,该方法可以被多次调用 - 这就是为什么这是禁止的。
与staticfinal
变量类似,它们只能在声明时或静态初始化 block 中设置。任何其他地方都必须位于可以多次调用的方法中:
public static void main(String[] args)
{
zero = 0;
main(null);
}
关于你的第一个问题,我假设不显式设置 final
变量以避免程序员犯错是错误的。
关于java - 限制final变量赋值的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9651841/