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

时间:2010-07-31 15:38:26

标签: java static-variables

我们可以在Static方法中声明Main变量吗?因为我收到一条错误消息:

Illegal Start of Expression

6 个答案:

答案 0 :(得分:29)

显然,不,我们不能。

在Java中,static表示它是类的变量/方法,它属于整个类,但不属于某个特定对象。

这意味着static关键字只能在“类范围”中使用,即它在方法内部没有任何意义。

答案 1 :(得分:6)

您可以在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);
  }
}

答案 2 :(得分:6)

因为静态变量在类加载时被分配了内存,并且内存只分配了一次。现在如果在方法中有一个静态变量,那么该变量来自方法的作用域,而不是类的作用域和JVM无法为其分配内存,因为方法是在类的对象的帮助下调用的,而且是在运行时,而不是在类加载时。

答案 3 :(得分:3)

由于静态变量可用于整个类,因此在概念上它只能在范围为全局的类之后声明,而静态块或方法都有自己的范围。

答案 4 :(得分:2)

你不能,为什么要这样做?您总是可以在它所属的类级别声明它。

答案 5 :(得分:2)

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

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