开发者

Final variables accessibility

Why can't Final variables be accessed in a static variables. At the compile time they are simply substituted directly substituted with their values so, they开发者_开发百科 should be allowed to use even in static methods

why is this restriction???


static = in the class.

final = doesn't change it's value (but it is of each instance if it's not static).

By examply you can do:

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

Each time you create a Weird object it will contain a different value for created.

But the value of Weird.number will be the time when the class was loaded.


Not all final variables are compile time constants. Only static final variables can be substituted by compiler as compile-time constants. final modifier in certain cases is only used to ensure const-correctness.

And static methods cannot access non-static variables as those variables can have different values for different instances of the same class.


If you're asking why a static method cannot access a final instance variable (on the [incorrect] assumption that final member variables are always set to literal or constant values in the code), its because different instances of a class can have different values for the same final instance variable (which can be set, for example, via the constructor). A static method has no knowledge of any particular instance of the class, and could only access static final variables.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜