Как мне объявить статическую переменную внутри метода Main? - PullRequest
6 голосов
/ 31 июля 2010

Можем ли мы объявить Static переменные внутри Main метода?Потому что я получаю сообщение об ошибке:

Illegal Start of Expression

Ответы [ 6 ]

29 голосов
/ 31 июля 2010

Очевидно, нет, мы не можем.

В Java static означает, что это переменная / метод класса, он принадлежит всему классу, но не одному из его определенных объектов.

Это означает, что ключевое слово static может использоваться только в «области видимости класса», то есть оно не имеет никакого смысла внутри методов.

6 голосов
/ 28 мая 2011

Поскольку статические переменные выделяются памяти во время загрузки класса, а память выделяется только один раз. Теперь, если внутри метода есть статическая переменная, тогда эта переменная попадает в область действия метода, а не в область действия класса и JVM не может выделить ему память, потому что метод вызывается с помощью объекта класса, а это во время выполнения, а не во время загрузки класса.

6 голосов
/ 31 июля 2010

Вы можете использовать статические переменные внутри вашего main метода (или любого другого метода), но вам нужно объявить их в классе:

Это прекрасно:

public Class YourClass {
  static int someNumber = 5;

  public static void main(String[] args) {
    System.out.println(someNumber);
  }
}

Это тоже хорошо, но в этом случае someNumber является локальной переменной, а не статической.

public Class YourClass {

  public static void main(String[] args) {
    int someNumber = 5;
    System.out.println(someNumber);
  }
}
3 голосов
/ 12 октября 2012

Поскольку статические переменные доступны для всего класса, концептуально это может быть объявлено только после класса, область действия которого является глобальной, где все статические блоки или методы имеют собственную область видимости.

2 голосов
/ 03 февраля 2014

В C вы можете иметь статически расположенные переменные локальной области видимости.К сожалению, это не поддерживается напрямую в Java.Но вы можете добиться того же эффекта, используя вложенные классы.

Например, допустимо следующее, но это плохое проектирование, потому что область действия x намного больше, чем нужно.Также существует неочевидная зависимость между двумя членами (x и getNextValue).

static int x = 42;
public static int getNextValue() {
    return ++x;
}

Хотелось бы сделать следующее, но это недопустимо:

public static int getNextValue() {
    static int x = 42;             // not legal :-(
    return ++x;
}

Однако вы могли бы сделать это вместо этого,

public static class getNext {
    static int x = 42; 
    public static int value() {
        return ++x;
    }
}

Лучше проектировать за счет некоторого безобразия.

2 голосов
/ 31 июля 2010

Вы не можете, почему вы хотите это сделать?Вы всегда можете объявить его на уровне класса, к которому он принадлежит.

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