如何在Main方法中声明静态变量?
我们可以在Main
方法中声明Static
变量吗? 因为我收到一条错误消息:
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; } }
以牺牲一些丑陋为代价是更好的工程。