0

为什么不能在静态变量中访问最终变量。在编译时,它们被简单地直接替换为它们的值,因此,即使在静态方法中也应该允许它们使用

为什么有这个限制???

4

3 回答 3

3

静态 = 在类中。

final = 不会改变它的值(但如果它不是静态的,它是每个实例的)。

例如,您可以这样做:

public class Weird
{
private static long number = System.getTimeInMilis();
private final long created = System.getTimeInMilis();
}

每次创建 Weird 对象时,它都会包含不同的 created 值。

但是 Weird.number 的值将是加载类的时间。

于 2010-01-13T19:59:51.527 回答
2

并非所有final变量都是编译时常量。只有static final变量可以被编译器替换为编译时常量。final在某些情况下修饰符仅用于确保const-correctness

并且static方法不能访问非静态变量,因为这些变量对于同一类的不同实例可能具有不同的值。

于 2010-01-13T19:59:06.813 回答
1

如果你问为什么一个static方法不能访问一个final实例变量(在[不正确]假设最终成员变量总是在代码中设置为文字或常量值),这是因为一个类的不同实例可以有不同的值相同final的实例变量(例如,可以通过构造函数设置)。方法static不知道类的任何特定实例,并且只能访问static final变量。

于 2010-01-13T19:59:48.887 回答