2013-04-26 4 views
5

私はmainメソッドがなぜ静的であるのか知っています。静的な場合は、そのクラスをJVMでインスタンス化する必要はありません。オブジェクトがなければ、それを呼び出すことができます。しかし、静的メソッドを呼び出すためにオブジェクトが必要ないのはなぜですか?なぜ静的メソッドのオブジェクトを作成する必要はありませんか?

誰でも説明できますか?

+1

...これは、キーワード「静的」は何を意味するのでしょうか?メソッド 'static'にラベルを付けるのは、特定のオブジェクトにアタッチしたくないということを明示的に述べているからです。 –

+1

クラスオブジェクトがあるためです。 – StarPinkER

答えて

6

静的メソッドはクラスに関連付けられ、クラスのインスタンスには関連付けられません。 JVMが(ただし、それが収まる見て)あなたのためのメソッドを呼び出すことができますので

0

オブジェクトはメンバ変数とメソッドに必要ですが、staticはアプリケーション変数または関数です。この理由の1つは、オブジェクトが静的に必要でない理由の1つです。

0

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.htmlを参照してください。それ以外の場合は、ウサギの穴の終わりはどこですか?彼らは、mainメソッドを持つ既知のinterfaceを作成することで、あなたが提案しているものを正確に実行できました。例:

interface ApplicationStarter 
{ 
    void start(String []args); 
} 

ただし、コンストラクタに関連する懸念があります。 SPIのような同様の問題に遭遇する多数のフレームワークが存在し、同様の理由からデフォルト(無引数)コンストラクタが必要です。このようなフレームワークは、事前に知られている要件(たとえば、引数なしのコンストラクタ、または他のフレームワークではおそらくSerializeableではない)と初心者がこれを見つけるのが難しい場合に失敗します。アプリケーションの最も基本的な部分を「複雑にする」ことは、採用を達成するための良い方法ではありません。

アプリケーションの開始点/入口点については、実際に他のすべての言語に似ている既知のエントリポイント(main)に依存するほうがずっと簡単です。

0

main()メソッドは、親クラスのインスタンスをインスタンス化することなくランタイムエンジンによって呼び出すことができるため、静的です。その宣言にstatic修飾子を持って

Static方法、この例を考えてみましょクラス

4

のインスタンスを作成する必要なしに、クラス名を使用して起動する必要があり、母を含む家族がそこにあると3人の子供。母親はそれぞれの子供に3つのアイスクリームコーンを持ちますが、3人の子供のために1つのPSPしか持ちません。すべての子供は同じPSPを使いますが、彼らは自分のアイスクリームを持っています。

ここでアイスクリームは静的でないもの(メソッド/変数)、PSPは静的なもの、Motherはクラス、子供はオブジェクトです。

かなり簡単です。 Staticはクラスに属し、クラスのすべてのオブジェクトに共通です。静的でないものはオブジェクト固有です。

0

はい、静的メソッドはクラスに属し、そのクラスのインスタンスには属していないので、インスタンスオブジェクトがクラスの静的メソッドを呼び出す必要はありません。また、インスタンス変数はインスタンスに属しているため、静的メソッド内でインスタンス変数を使用することはできません。

0

Javaファイルを実行すると、Javaコンパイラが静的メンバーを自動的にロードして実行します。

私はJavaで新しいですので、私の答えが間違っている場合は私を許してください。

関連する問題