Можем ли мы объявить Static
Переменные внутри Main
метод? Потому что я получаю сообщение об ошибке:Как объявить статическую переменную внутри метода Main?
Illegal Start of Expression
Можем ли мы объявить Static
Переменные внутри Main
метод? Потому что я получаю сообщение об ошибке:Как объявить статическую переменную внутри метода Main?
Illegal Start of Expression
Очевидно, нет, мы не можем.
В Java static
означает, что это переменная/метод класса, она относится ко всему классу, но не к одному из его определенных объектов.
Это означает, что ключевое слово static
может использоваться только в «классе», то есть оно не имеет смысла внутри методов.
Он может иметь значение, которое он имеет в функциях C ... Из википедии: «Статические локальные переменные: переменные, объявленные как статические внутри внутри функции, статически распределены, имея ту же область действия, что и автоматические локальные переменные. Следовательно, любые значения, которые выполняет функция в его статические локальные переменные во время одного вызова все равно будут присутствовать, когда функция будет вызвана снова ». – 2010-07-31 15:44:14
@функциональный: мое предложение основано на теге 'java' рядом с вопросом. – Roman
Хорошо, понял. Я просто говорю, что иметь смысл быть внутри методов тоже. Это все – 2010-07-31 15:45:49
Вы не можете, зачем вы хотите это сделать? Вы всегда можете объявить его на уровне класса, где он принадлежит.
Статические переменные внутри методов являются законными в C и C++, возможно, это его фон. –
Я знаю, но Java не C++ :) Статические переменные в C/C++ имеют то преимущество, что не удаляются после завершения функции, поэтому вы можете передавать их в любом месте. С сборщиком мусора Java вы можете просто передать переменную без всяких забот, поэтому я спросил, в чем дело. Спасибо за ваш комментарий. –
Вы можете использовать статические переменные внутри вашего метода 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);
}
}
Поскольку статические переменные размещаются памяти во время загрузки класса, а память выделяется только once.Now, если у вас есть статическая переменная внутри метода, то эта переменная подпадает под сферу метода, а не класса scope и JVM не может выделить ему память, потому что метод вызывается с помощью объекта класса, а это во время выполнения, а не во время загрузки класса.
Поскольку статические переменные доступны для всего класса, так что концептуально он может быть объявлен только после класса, область видимости которого глобальна, где в качестве статического блока или методов все имеют свою собственную область.
В 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;
}
}
лучше инжиниринговая за счет о некотором уродстве.
Вставьте соответствующий код. –
Если, как утверждают некоторые комментаторы, ваш вопрос вдохновлен тем фактом, что вы * можете * сделать это на C, тогда вы должны указать, что в вашем вопросе, чтобы ответы могли помочь вам, указав различия между Java и C. – MatrixFrog
Возможно, мы сможем ответить лучше, если узнаем, почему вам нужно использовать статическую переменную внутри метода? Все переменные, объявленные внутри метода, предназначены только для этого метода.Дайте нам знать, какую проблему вы пытаетесь решить, и я уверен, что мы можем придумать для вас хорошие ответы. – CoolBeans