为什么不能在静态变量中访问最终变量。在编译时,它们被简单地直接替换为它们的值,因此,即使在静态方法中也应该允许它们使用
为什么有这个限制???
静态 = 在类中。
final = 不会改变它的值(但如果它不是静态的,它是每个实例的)。
例如,您可以这样做:
public class Weird
{
private static long number = System.getTimeInMilis();
private final long created = System.getTimeInMilis();
}
每次创建 Weird 对象时,它都会包含不同的 created 值。
但是 Weird.number 的值将是加载类的时间。
并非所有final
变量都是编译时常量。只有static final
变量可以被编译器替换为编译时常量。final
在某些情况下修饰符仅用于确保const-correctness。
并且static
方法不能访问非静态变量,因为这些变量对于同一类的不同实例可能具有不同的值。
如果你问为什么一个static
方法不能访问一个final
实例变量(在[不正确]假设最终成员变量总是在代码中设置为文字或常量值),这是因为一个类的不同实例可以有不同的值相同final
的实例变量(例如,可以通过构造函数设置)。方法static
不知道类的任何特定实例,并且只能访问static final
变量。