アプリ版:「スタンプのみでお礼する」機能のリリースについて

JavaのStatic変数について質問です。
Main関数の中でStaticな変数を定義しようとしたところ、
final修飾子しか使えませんというエラー文言が出ます。
Main関数内でわざわざStatic変数を使用する必要はないのですが、
出来ないと言われると何故だろうと思ってしまいます。
どなたかご説明いただけないでしょうか?
--------------------------------------------------------------------
class Test {
public static void main(String[] args) {
// 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る
Static int test_val = 10;

// 表示
System.out.println(test_val);
}
}

A 回答 (1件)

メソッド内ではstatic変数を宣言することはできない、というのが言語仕様で規定されているためです。



http://docs.oracle.com/javase/specs/jls/se8/html …
を見ていただければわかるのですが、ローカル変数の宣言文では VariableModifier として何らかのアノテーションと final を書くことができます。逆に言うと、これらに含まれない static はローカル変数の宣言に書いてあったらおかしいことになります。

なぜそのように言語仕様が規定されているのかについては、Java 言語仕様の制定にかかわっているわけではないのでわかりません。まあ、C言語の関数内 static と混同してしまうし、C言語で関数内で static を使う理由が Java では適切にクラス設計することで回避できるからかもしれません。
    • good
    • 0
この回答へのお礼

hitomura様、ご回答ありがとうございました。
メソッド内ではstatic変数を宣言する事ができないのですね。
static変数はクラスがオブジェクト化されなくても使用できる変数ということですので、
メソッドの中で宣言されるというのは確かにおかしいですね。
パブリックメソッドの中でstatic変数が定義されてはそれこそ意味が解りません。

staticなメソッド内であればstaticな変数を定義しても理屈上おかしくはないと
思ったのですが、ざっくりメソッド内でstaticな変数を定義できないようになっているんですね。


ところで不勉強なもので少し馴染みのない言葉が有りまして、
"VariableModifier"とは何でしょうか?

お礼日時:2014/04/18 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!