Конечная доступность переменных - PullRequest
0 голосов
/ 13 января 2010

Почему нельзя получить доступ к конечным переменным в статических переменных. Во время компиляции они просто подставляются напрямую, подставляя их значения поэтому их следует разрешить использовать даже в статических методах

почему это ограничение ???

Ответы [ 3 ]

3 голосов
/ 13 января 2010

статический = в классе.

final = не меняет своего значения (но оно каждого экземпляра, если оно не статично).

К примеру, вы можете сделать:

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

Каждый раз, когда вы создаете странный объект, он будет содержать другое значение для созданного.

Но значением Weird.number будет время загрузки класса.

2 голосов
/ 13 января 2010

Не все final переменные являются константами времени компиляции. Только static final переменные могут быть заменены компилятором как константы времени компиляции. Модификатор final в некоторых случаях используется только для обеспечения const-правильности .

И static методы не могут получить доступ к нестатическим переменным, поскольку эти переменные могут иметь разные значения для разных экземпляров одного и того же класса.

1 голос
/ 13 января 2010

Если вы спрашиваете, почему метод static не может получить доступ к переменной экземпляра final (из-за [неверного] предположения, что конечные переменные-члены всегда имеют буквенные или постоянные значения в коде), это потому, что разные экземплярыкласса могут иметь разные значения для одной и той же переменной экземпляра final (которую можно установить, например, с помощью конструктора).Метод static не знает ни одного конкретного экземпляра класса и может обращаться только к static final переменным.

...