6

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

Illegal Start of Expression
4

6 回答 6

32

显然,不,我们不能。

在Java中,static意味着它是一个类的变量/方法,它属于整个类,但不属于它的某个对象。

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

于 2010-07-31T15:40:49.697 回答
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);
  }
}
于 2010-07-31T15:44:57.953 回答
6

因为静态变量是在类加载时分配内存的,而且内存只分配一次。现在如果你在方法中有一个静态变量,那么该变量属于方法的范围,而不是类的范围,JVM无法为它分配内存,因为方法是在类的对象的帮助下调用的,而且是在运行时,而不是在类加载时。

于 2011-05-28T14:06:16.470 回答
3

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

于 2012-10-12T16:00:07.640 回答
2

你不能,你为什么要那样做?您始终可以在它所属的类级别上声明它。

于 2010-07-31T15:41:34.573 回答
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;
    }
}

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

于 2014-02-03T17:38:20.727 回答