web-dev-qa-db-ja.com

Javaプログラムはmainメソッドを定義せずにどのように実行されますか?

いくつかのJavaソースを調べていたところ、mainメソッドが定義されていないことに気づきました。

Javaどこから始めればよいかわからないまま、ソースコードをコンパイルするにはどうすればよいですか?

10
Korvin Szanto

mainメソッドは、Java仮想マシンがコードを実行している場合にのみ使用されます。コードはmainメソッドなしでは実行できませんが、コンパイルは可能です。

コードをコンパイルするときは、通常、コマンドラインでファイルのセットを指定します。

javac MyClass1.Java MyClass2.Java

Javaコンパイラ(javac)は、渡された各クラスを調べて、それを.classファイルにコンパイルします。

Javaソースコードにmainメソッドがない可能性がある理由の1つは、実行されるのではなく、ライブラリとして使用されるように設計されているためです。

あなたが面白いと思うかもしれない何か:Javaコンパイラによってコンパイルされたソースコードはmainメソッドを必要としませんが、 Javaコンパイラ自体 にはmainメソッドがあります。

19
Jack Edmonds

実行とコンパイルには違いがあります。 Javaコードはインクリメンタルにコンパイルできます。必要なのはmainのどこかでrunコードです。Java "コンパイラは、コンパイル時にすべての依存関係を調整できるほど賢いので、どこから始めればよいかを知っています。

実際、ある種の標準コンテナでWebアプリケーションを構築している場合、コードにはおそらくmainメソッドがありません。コンテナはそうしますが、プラグインするコンポーネントを書くだけです。

5
hvgotcodes

//でのみ動作しますJava 1.6以下のバージョン

public class Test{   
    // this is static block

    static{
        System.out.println("This is static block");  
    }
}

In Java(実行中):

  1. すべての静的メンバーが識別されます。
  2. すべての変数とメソッドが初期化されます
  3. 静的ブロックが実行されます
2
LMK

どのようにJava コンパイル どこから始めればよいかわからずにソースを実行しますか?

コンパイルするのにmain()は必要ないので、(コンパイルではなく)実行するつもりだったと思います。この場合、明示的に宣言されたmain()メソッドは、プログラムを実行する方法の1つにすぎません。いくつかのフレームワークを使用してコードを実行できます。 main()(コンソールアプリケーションについてのみ説明)があり、エントリポイントのみを宣言する必要があります。これは、たとえば、単体テストを実行する方法です。

1
n0rm1e

Mainメソッドなしでプログラムをコンパイルできます。実際にプログラムを実行することは、プログラムをコンパイルすることとは異なります。ほとんどのライブラリには、mainメソッドが含まれていません。したがって、コンパイルの場合、プログラムにmainメソッドが含まれているかどうかは問題ありません。

0
Ananthi

はい、メインメソッドなしでJavaプログラムを実行できます。このため、静的関数を使用します

コードは次のとおりです。

class Vishal
{
    static
    {
        System.out.println("Hi look program is running without main() method");
    }
}

これは出力します"Hi lookプログラムはmain()メソッドなしで実行されています"

0
Vishal sharma

これはエラーなしで、main()メソッドなしで実行されます

abstract class hello extends javafx.application.Application
{
    static 
    {
    System.out.println("without main method");
    System.exit(0);
    }
}
0
Vikash kumawat
package com.test;

public class Test {
    static {
        System.out.println("HOLAAAA");
        System.exit(1);
    }
}

//by coco
//Command line:
//Java -Djava.security.manager=com.test.Test
0
coco

方法の1つは静的ブロックですが、以前のバージョンのJDKではJDK1.7にはありません。

class A3{  
  static{  
  System.out.println("static block is invoked");  
  System.exit(0);  
  }  
}  
0
Bharthan

あなたが書いたすべてのJavaクラスは、実行するためのエントリポイントになることを意図していません。それが理由です。それが例外ではなくルールだと思います。

0
duffymo
_public class Test{   
    // this is static block

    static{
        System.out.println("This is static block");  
        System.exit(0);
    }
}
_

これは、JDKバージョン1.6以前で正常に実行されます。バージョン1.7以降では、main()関数を含める必要があります。

0
nahush