我们可以在Static
方法中声明Main
变量吗?因为我收到一条错误消息:
Illegal Start of Expression
答案 0 :(得分:29)
显然,不,我们不能。
在Java中,static
表示它是类的变量/方法,它属于整个类,但不属于某个特定对象。
这意味着static
关键字只能在“类范围”中使用,即它在方法内部没有任何意义。
答案 1 :(得分:6)
您可以在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);
}
}
答案 2 :(得分:6)
因为静态变量在类加载时被分配了内存,并且内存只分配了一次。现在如果在方法中有一个静态变量,那么该变量来自方法的作用域,而不是类的作用域和JVM无法为其分配内存,因为方法是在类的对象的帮助下调用的,而且是在运行时,而不是在类加载时。
答案 3 :(得分:3)
由于静态变量可用于整个类,因此在概念上它只能在范围为全局的类之后声明,而静态块或方法都有自己的范围。
答案 4 :(得分:2)
你不能,为什么要这样做?您总是可以在它所属的类级别声明它。
答案 5 :(得分:2)
在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;
}
}
以牺牲一些丑陋为代价更好的工程。