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);
}
}
No.1ベストアンサー
- 回答日時:
メソッド内ではstatic変数を宣言することはできない、というのが言語仕様で規定されているためです。
http://docs.oracle.com/javase/specs/jls/se8/html …
を見ていただければわかるのですが、ローカル変数の宣言文では VariableModifier として何らかのアノテーションと final を書くことができます。逆に言うと、これらに含まれない static はローカル変数の宣言に書いてあったらおかしいことになります。
なぜそのように言語仕様が規定されているのかについては、Java 言語仕様の制定にかかわっているわけではないのでわかりません。まあ、C言語の関数内 static と混同してしまうし、C言語で関数内で static を使う理由が Java では適切にクラス設計することで回避できるからかもしれません。
hitomura様、ご回答ありがとうございました。
メソッド内ではstatic変数を宣言する事ができないのですね。
static変数はクラスがオブジェクト化されなくても使用できる変数ということですので、
メソッドの中で宣言されるというのは確かにおかしいですね。
パブリックメソッドの中でstatic変数が定義されてはそれこそ意味が解りません。
staticなメソッド内であればstaticな変数を定義しても理屈上おかしくはないと
思ったのですが、ざっくりメソッド内でstaticな変数を定義できないようになっているんですね。
ところで不勉強なもので少し馴染みのない言葉が有りまして、
"VariableModifier"とは何でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java Java 配列<選挙> 4 2023/07/31 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
時間の取得
-
数字か文字列かを判定する関数
-
javaプログラムで背景色を変更...
-
タトゥーや墨を入れる人の共通点
-
スタックオーバーフローとは?
-
VB.NETで16進数が正しいかどう...
-
C# マルチスレッドにおける例外...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
Excelでのエラー
-
サーブレットからJSPの呼び出し...
-
String型の日付(2005/11/25)の...
-
サーブレットとJSPの連携
-
do文とInputMismatchException処理
-
ファイルダイアログを開いた時...
-
JAVA 日付チェック方法 年・...
-
全角スペースのチェックについて
-
C# UriFormatExceptionの回避
-
ブックマークレットについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
ADOによるレコードの追加/更新
-
VBA Evaluate関数 型が一致しま...
-
WebClient()以外でネットにアク...
-
時間の取得
-
C#の捕捉されない例外処理の対...
-
javaプログラムで背景色を変更...
おすすめ情報