DOESのJavaは内部的にmainメソッドを保持しているクラスのオブジェクトを作成しますか?

スタックオーバーフロー :

我々は、我々が作成したい場合ことを知っているようobjectclass何かをする我々の必要性を:

class MyClass{
// ...
}

そして、そのを作成するために、object我々は実行します。

MyClass MyObj = new MyClass();

今、私たちはJavaでプログラムを作成したい場合は、私たちは持っている必要がありmain内部メソッドをclass、それはclassファイル名と同じ名前を持つ必要があります。

例えば:

// file MyFile.java
public class MyFile{
    public static void main(String[] args){
      // ...
    }
}

今の質問はの対象かどうかということであるMyFileクラスもによって内部的に作成されますjava呼び出すことにより、Javaファイルの実行を開始するために、ときに、このプログラムの実行main方法をかそれが呼び出したんmain静的ような方法を:

MyFile.main(String[] args);

私は、クラス(複数可)を持っている場合と、何がケースになりますMyFileように、クラス:

public class MyFile{

    class HelloWorld{
        // ...
    }

    public static void main(String[] args){
        // ...
    }
}

または非静的プロパティやメソッドなどがあります。

public class MyFile{

    int x = 10;

    public void MyWorld(){
        // ...
    }

    public static void main(String[] args){
        // ...
    }

    int y = 10;

    public void ByeWorld(){
        // ...
    }

}

などなど

さて、どのようなシナリオになりますか?ウィルjava内部のオブジェクトを作成MyFileするクラスを?どのような行動javaの助けを借りて、プログラムを実行し、両方するために、状況のこれらの種類に実行するmain前と後の他のものをロードするためにも、同様の方法およびmain方法?実行されるアクションは何になりますjavaこのような状況で内部的に?

ジョンスキート:

JVMの起動時にクラスのインスタンスは自動的に作成されません。mainこの方法は、単に静的に呼び出される-それは最初の場所で静的である必要があります理由です。

クラスがされて初期化されますが、静的初期化子、持っているそうだとすれば、前に実行されるメソッドが、クラスのインスタンスを構築しませんが。そこそうする必要はないのです、それは不必要な合併症をご紹介します。(あなたが唯一たとえば、パラメータを持つコンストラクタが含まれている場合に起こるために何を期待します?)main

JVMの起動の詳細については、Java言語仕様の第12章を

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223117&siteId=1