- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Java main関数内でStatic変数使えない)
Java main関数内でStatic変数使えない
このQ&Aのポイント
- Main関数内でStaticな変数を定義しようとするとfinal修飾子しか使えませんというエラーが発生します。
- Static変数をMain関数内で使う必要性はないですが、なぜ使えないのか疑問に思います。
- Static変数には宣言時にfinalで定義する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
メソッド内ではstatic変数を宣言することはできない、というのが言語仕様で規定されているためです。 http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.4 を見ていただければわかるのですが、ローカル変数の宣言文では VariableModifier として何らかのアノテーションと final を書くことができます。逆に言うと、これらに含まれない static はローカル変数の宣言に書いてあったらおかしいことになります。 なぜそのように言語仕様が規定されているのかについては、Java 言語仕様の制定にかかわっているわけではないのでわかりません。まあ、C言語の関数内 static と混同してしまうし、C言語で関数内で static を使う理由が Java では適切にクラス設計することで回避できるからかもしれません。
お礼
hitomura様、ご回答ありがとうございました。 メソッド内ではstatic変数を宣言する事ができないのですね。 static変数はクラスがオブジェクト化されなくても使用できる変数ということですので、 メソッドの中で宣言されるというのは確かにおかしいですね。 パブリックメソッドの中でstatic変数が定義されてはそれこそ意味が解りません。 staticなメソッド内であればstaticな変数を定義しても理屈上おかしくはないと 思ったのですが、ざっくりメソッド内でstaticな変数を定義できないようになっているんですね。 ところで不勉強なもので少し馴染みのない言葉が有りまして、 "VariableModifier"とは何でしょうか?