如何在 Main 方法中声明静态变量?
Posted
技术标签:
【中文标题】如何在 Main 方法中声明静态变量?【英文标题】:How do I declare a static variable inside the Main method? 【发布时间】:2011-03-23 16:01:14 【问题描述】:我们可以在Main
方法中声明Static
变量吗?因为我收到一条错误消息:
Illegal Start of Expression
【问题讨论】:
请粘贴相关代码 如果正如一些评论者所建议的那样,您的问题是受到您可以在 C 中执行此操作这一事实的启发,那么您应该在您的问题中指出这一点,以便答案可以通过指出 Java 和 C 之间的差异来帮助您。 如果我们知道为什么需要在方法中使用静态变量,也许我们可以更好地回答?在方法中声明的所有变量都只适用于该方法。让我们知道您要解决什么问题,我相信我们可以为您提供一些好的答案。 【参考方案1】:显然,不,我们不能。
在 Java 中,static
表示它是一个类的变量/方法,它属于整个类,但不属于其中的某个对象。
这意味着 static
关键字只能在“类范围”中使用,即它在方法内部没有任何意义。
【讨论】:
它可能具有它在 C 函数中的含义......来自***:“静态局部变量:在函数内部声明为静态的变量是静态分配的,同时具有与自动局部变量相同的范围。因此,该函数在一次调用期间放入其静态局部变量的任何值在再次调用该函数时仍然存在。" @functional:我的建议是基于问题附近的标签java
。
好的,明白了。我只是说在方法内部也是有意义的。就是这样
啊,我明白了。我不知道你可以在 C 中做到这一点。但在 Java 中,你绝对不能。
@functional - 如果你也认为它在 C 中有意义,它只会在 Java 中有意义。就我个人而言,我认为这是 C 语言语法中的一个缺陷。这是一种使用可见性修饰符来完成 Java 和 C++ 的笨拙方式。【参考方案2】:
您可以在 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);
【讨论】:
【参考方案3】:因为静态变量是在类加载时分配内存的,而且内存只分配一次。现在如果你在方法中有一个静态变量,那么该变量属于方法的范围,而不是类的范围,和JVM无法为其分配内存,因为方法是在类对象的帮助下调用的,而且是在运行时,而不是在类加载时。
【讨论】:
【参考方案4】:由于静态变量可用于整个类,因此从概念上讲,它只能在其作用域是全局的类之后声明,而静态块或方法都有自己的作用域。
【讨论】:
【参考方案5】:你不能,你为什么要那样做?您始终可以在它所属的类级别上声明它。
【讨论】:
方法中的静态变量在C和C++中都是合法的,也许这就是他的背景。 我知道,但 Java 不是 C++ :) C/C++ 中的静态变量的优点是在函数结束后不会被删除,因此您可以将它们传递到任何地方。使用 Java 的垃圾收集器,您可以直接传递变量而无需担心,这就是为什么我问他的意思是什么。感谢您的评论。【参考方案6】:在 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;
以牺牲一些丑陋为代价的更好的工程。
【讨论】:
以上是关于如何在 Main 方法中声明静态变量?的主要内容,如果未能解决你的问题,请参考以下文章
Java从不在方法中声明变量的访问级别,无论是不是是静态的[关闭]