@mine19876293 (ミッキー)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javaのmainクラスのstatic

解決したいこと

Javaのmainクラスのstaticについて。staticは
インスタンスを作成しなくても、
他のクラスで、使用できる意味だと思います。
しかし、これは他のクラスで使用しないのに、
なんで、mainクラスにstaticをつけるんでしょうか??
わかりやすく、解説していただければ、ありがたいです。

発生している問題・エラー

public static void main(String[] args) {
0 likes

2Answer

mainメソッドは、javaコマンドのここから呼び出されています。
そのときにインスタンスを作成せずに呼ばれているんですよ。
だからstaticなんです。

0Like

mainのようなメソッドはエントリポイントと呼ばれます
エントリポイントはOSによってプログラムの外から呼ばれるメソッドです
プログラムの外でJavaを実行する場合、エントリポイントがどのクラスに属しているかを意識することはありません
Javaにおいてもstaticメンバを呼び出す際に、そのメンバがどのインスタンスに属しているかを意識することはありませんし、必要もありません

何故所属インスタンスを意識する必要がないかといえば、staticメソッドにはthis引数がないためです
インスタンスメソッドが変数から呼び出せるのは、変数がこの暗黙的な引数thisに代入されるためです
Javaの文脈では変数.メソッド()という構文で変数をthisに渡せますが、プログラムの外は当然Javaの世界ではないので、同じ宣言が使えません
thisは剥き出しの引数として認識され、Javaを実行する処理系がエントリポイントの属するインスタンスを自力で探さねばなりません
ですがJavaがまだ実行されていない状態ではインスタンスも存在しません
となるとプログラムを実行する手段がありません

ですが、staticが付いていればthis引数が無いことを保障できるので、処理系もインスタンスを探す手間が省けます

余談ながら、これは予め所定のインスタンスを作っておき、それを必ず認識させるようにすればstaticは必要ないということでもあります
実際Javaはプレビュー機能によって限定的な文脈においてstaticを外すことを認めています

プレビュー機能についてはJava23のリリースページをご覧ください

0Like

Your answer might help someone💌