簡體   English   中英

如何在Main方法中聲明靜態變量?

[英]How do I declare a static variable inside the Main method?

我們可以在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;
    }
}

以犧牲一些丑陋為代價是更好的工程。

你不能,你為什么要那樣做? 您始終可以在它所屬的類級別聲明它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM