-1

重複の可能性:
Java のメイン メソッドが静的なのはなぜですか?

JAVA はリフレクションをサポートしていますが、JAVA は main メソッドを static にする必要があります。なぜですか?

リフレクションを使用して、クラスのオブジェクトを作成し、そのクラスのメソッドを呼び出すこともできるため、JAVA ではメイン メソッドを静的にする必要があります。

これについてのコメントをお待ちしております。

4

5 に答える 5

13

確実に与えられる唯一の答えは、「 JLSがそう言っているから」です。見積もり:

メソッドは、、、および とmain宣言する必要があります。宣言された型が の配列である仮パラメーター (§8.4.1) を指定する必要があります。publicstaticvoidString

于 2013-01-14T13:24:43.287 に答える
2

リフレクションは Java 1.1 以降にのみ導入されたため、最初の Java 1.0 標準はそれらに基づくことができませんでした。彼らはおそらく、ブートストラップのためだけにリフレクションのようなコードを持っていたのでしょう。Java がまだ Oak と呼ばれていた時代に、それがどれほど完全だったかは不明です。

また、これは C++ から継承され、さらに C からも継承される可能性があります。C++ は最初にアプリケーション オブジェクトを構築し、そのvirtual main()上で を呼び出すこともできますが、これはおそらく複雑すぎるように見えたため、mainC 開発者になじみのあるシンプルな を使用することを選択しました。

于 2013-01-14T13:27:31.373 に答える
1

プログラムを実行すると、ランタイム環境はシグネチャを持つメソッドを探すためpublic static void main (String[] args)です。リフレクションがサポートされている場合でも、ランタイムはクラスのmainメソッドを最初に呼び出す必要があります。

于 2013-01-14T13:24:45.330 に答える
0

public static void main(String []args)
1.のすべてのキーワードの説明public:メソッド を定義するの一部ではないためである
必要があります。そのため、 2. :を呼び出すオブジェクトを構築する予定はありません。そしてメインはに依存していません。 3. :に有用な情報を返すつもりはありません。プログラムの実行は から始まり、通常の終了がある場合は.In の最後のステートメントで終了します。 4. : メソッドの重要性を示すために使用される固有名詞です。 5. : main に渡される引数は 1 つ以上の単語です。publicJVMclassmainprivate
static
JVMmainclass
void
mainJVMmain()main
main

Array of Stringsintfloatchar、またはString。上記はすべて として表すことができますStrings

それが役に立てば幸い
于 2013-01-14T14:03:41.663 に答える
0

Public : JVM が main メソッドにアクセスできるようにするには、それを public にする必要があります。

Static : main メソッドをホストするクラスのインスタンス化基準を予測することは非常に複雑であるか、おそらく不可能であるため、静的であることが義務付けられており、クラスからオブジェクトを作成する必要なく JVM が呼び出すことができます。

結局のところ、言語を定義する際には明確な契約が必要であり、そのような義務付けられた制約がなければ、JVM 設計者にとって厄介なことになる可能性があります。

于 2013-01-14T13:32:31.580 に答える