6

メソッドStatic内で変数を宣言できますか? Mainエラーメッセージが表示されるため:

Illegal Start of Expression
4

6 に答える 6

32

明らかに、いいえ、できません。

Java では、staticそれがクラスの変数/メソッドであることを意味し、クラス全体に属しますが、特定のオブジェクトの 1 つには属しません。

つまり、staticキーワードは「クラス スコープ」でのみ使用できます。つまり、メソッド内では意味がありません。

于 2010-07-31T15:40:49.697 に答える
6

静的変数はクラスのロード時にメモリが割り当てられ、メモリは一度だけ割り当てられるため、メソッド内に静的変数がある場合、その変数はクラスのスコープではなくメソッドのスコープになり、JVM はできません。メソッドはクラスのオブジェクトの助けを借りて呼び出され、それはクラスのロード時ではなく実行時であるため、それにメモリを割り当てます。

于 2011-05-28T14:06:16.470 に答える
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 に答える
3

静的変数はクラス全体で使用できるため、概念的には、スコープがグローバルであるクラスの後にのみ宣言できますが、静的ブロックまたはメソッドはすべて独自のスコープを持っています。

于 2012-10-12T16:00:07.640 に答える
2

あなたはできません、なぜあなたはそれをしたいのですか?それが属するクラスレベルでいつでも宣言できます。

于 2010-07-31T15:41:34.573 に答える
2

C では、ローカル スコープの変数を静的に割り当てることができます。残念ながら、これは Java では直接サポートされていません。ただし、ネストされたクラスを使用して同じ効果を得ることができます。

たとえば、次の例は許可されていますが、x のスコープが必要以上に大きいため、不適切なエンジニアリングです。また、2 つのメンバー (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 に答える