メソッドStatic
内で変数を宣言できますか? Main
エラーメッセージが表示されるため:
Illegal Start of Expression
明らかに、いいえ、できません。
Java では、static
それがクラスの変数/メソッドであることを意味し、クラス全体に属しますが、特定のオブジェクトの 1 つには属しません。
つまり、static
キーワードは「クラス スコープ」でのみ使用できます。つまり、メソッド内では意味がありません。
静的変数はクラスのロード時にメモリが割り当てられ、メモリは一度だけ割り当てられるため、メソッド内に静的変数がある場合、その変数はクラスのスコープではなくメソッドのスコープになり、JVM はできません。メソッドはクラスのオブジェクトの助けを借りて呼び出され、それはクラスのロード時ではなく実行時であるため、それにメモリを割り当てます。
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);
}
}
静的変数はクラス全体で使用できるため、概念的には、スコープがグローバルであるクラスの後にのみ宣言できますが、静的ブロックまたはメソッドはすべて独自のスコープを持っています。
あなたはできません、なぜあなたはそれをしたいのですか?それが属するクラスレベルでいつでも宣言できます。
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;
}
}
多少の醜さを犠牲にして、より優れたエンジニアリングです。