Java 如何在Main方法中声明静态变量?

Java 如何在Main方法中声明静态变量?,java,static-variables,Java,Static Variables,我们可以在Main方法中声明Static变量吗?因为我收到一条错误消息: Illegal Start of Expression 显然,不,我们不能 在Java中,static意味着它是一个类的变量/方法,它属于整个类,但不属于它的某个特定对象 这意味着static关键字只能在“类范围”中使用,即它在方法内部没有任何意义。你不能,为什么要这样做?您始终可以在它所属的类级别上声明它。您可以在main方法(或任何其他方法)中使用静态变量,但您需要在类中声明它们: 这很好: public Class

我们可以在
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)之间存在不明显的依赖关系

人们确实想做以下事情,但这是不合法的:

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;
    }
}

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

请粘贴相关代码。如果如一些评论员所说,您的问题是由您可以在C中执行此操作这一事实启发的,那么您应该在问题中指出,因此,这些答案可以通过指出Java和C之间的差异来帮助您。如果我们知道为什么需要在方法中使用静态变量,也许我们可以回答得更好?方法中声明的所有变量的作用域仅限于该方法。让我们知道你正在试图解决的问题,我相信我们可以为你找到一些好的答案。方法中的静态变量在C和C++中是合法的,也许这是他的背景。我知道,但是java不是C++:在C++中,静态变量的优点是在函数结束后不被删除,这样你就可以把它们传递到任何地方。有了Java的垃圾收集器,您可以无需担心地传递变量,这就是为什么我问他的观点。谢谢你的评论。它可能有它在C函数中的含义。。。来自wikipedia:“静态局部变量:函数内部声明为静态的变量是静态分配的,同时与自动局部变量具有相同的作用域。因此,函数在一次调用期间放入其静态局部变量的任何值在函数再次调用时仍然存在。”@功能性:我的建议是基于问题附近的标签
java
。好的,明白了。我只是说在方法内部也是有意义的。我明白了,那是真主。我不知道你能在C语言中做到这一点。但在Java中,你绝对不能。@functional-只有在Java中才有意义,如果你认为它在C语言中也有意义的话。我个人认为,这是C语言语法中的一个缺陷。java和C++使用可见性修饰符做的是一种笨拙的方法。
public static class getNext {
    static int x = 42; 
    public static int value() {
        return ++x;
    }
}