如何在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; } } 

以牺牲一些丑陋为代价是更好的工程。