В Java переменные, объявленные внутри статических методов, сами статичны? - PullRequest
16 голосов
/ 21 июня 2011

Допустим следующее:

private static boolean A()
{
  int parsedUntil = 0;
  ...
  ...
  ...
}

Считается ли parsedUntil статической переменной?Я заметил, что не могу объявить его статическим внутри этой статической функции.

Дополнительный вопрос: я прочитал, что статическая переменная будет инициализирована только один раз.Означает ли это, что при первом вызове функции A () значение будет установлено равным нулю, но каждый раз, когда я вызываю функцию A (), эта строка опускается?

Ответы [ 5 ]

24 голосов
/ 21 июня 2011

Нет, это не статическая переменная.Это локальная переменная.Любая переменная, объявленная в методе, является локальной переменной.Если вам нужна статическая переменная, вы должны объявить ее вне метода:

private static int parsedUntil = 0;

Нет способа объявить статическую переменную, которая может использоваться только внутри одного метода.

6 голосов
/ 21 июня 2011

нет, A() - статический метод, а parsedUntil - локальная переменная внутри A.

Модификаторы, такие как static, недопустимы в локальных переменных (только final допускается на афаике)

Дополнительный вопрос: я прочитал, что статическая переменная будет инициализирована только один раз.

true

Означает ли это первыйКогда я вызываю функцию A (), значение будет установлено равным нулю, но каждый раз, когда я вызываю A (), эта строка пропускается?

, так как parsedUntil - не статическое поле, а локальноепеременная в статическом методе, это не так.

5 голосов
/ 21 июня 2011

static переменные не могут быть объявлены локально внутри методов - они могут быть только членами класса, и они инициализируются при загрузке класса.

1 голос
/ 21 июня 2011

Нет, это не C.

parsedUntil не является статическим.Это просто локальная переменная.Вы не можете объявить статическую переменную внутри метода.

Относительно второго вопроса - статические переменные могут назначаться столько раз, сколько вы хотите.Вы не можете переназначать только конечные переменные.

1 голос
/ 21 июня 2011

В Java нет статических локальных переменных, как в C или C ++, поэтому у вас никогда не будет static int parsedUtil = 0;.

Так что нет, parsedUtil ни в каком смысле не является "статичным". Его значение устанавливается в 0 каждый раз, когда метод выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...