我们可以在方法中声明Static
变量吗?Main
因为我收到一条错误消息:
Illegal Start of Expression
显然,不,我们不能。
在Java中,static
意味着它是一个类的变量/方法,它属于整个类,但不属于它的某个对象。
这意味着static
关键字只能在“类范围”中使用,即它在方法内部没有任何意义。
您可以在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);
}
}
因为静态变量是在类加载时分配内存的,而且内存只分配一次。现在如果你在方法中有一个静态变量,那么该变量属于方法的范围,而不是类的范围,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;
}
}
这是以一些丑陋为代价的更好的工程。