最终变量可访问性

时间:2010-01-13 19:56:45

标签: java static final

为什么不能在静态变量中访问最终变量。 在编译时,它们只是直接替换为它们的值 所以,他们应该被允许甚至在静态方法中使用

为什么这个限制???

3 个答案:

答案 0 :(得分:3)

static =在课堂上。

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

例如,你可以这样做:

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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