70

私はこれに少し慣れていないので、我慢してください。私は現在 C# と Java を学んでいますが、それらの類似点の 1 つは、メイン関数をクラス内にカプセル化する必要があることです。例えば

public class HelloWorld {
    public static void main(String[] args) {
        // Some Code
    }
}

main は、プログラムを実行するときの「エントリ ポイント」であることがよくあります。したがって、基本的に、プログラムは main 関数がある場所で実行を開始します。しかし、私は両方の言語で、複数のクラス内に複数の主要な機能を持つことができると信じています。では、複数のメイン関数を含むプロジェクトをコンパイルする場合、「エントリ ポイント」はどこにあるのでしょうか? コンパイラはどこから始めるべきかをどのように認識していますか?

4

10 に答える 10

58

Java では、コンパイル時ではなく、実際にプログラムを実行するときにコンピューターが「エントリ ポイント」を決定します。たとえば、コマンドラインから

java MyClass

で を検索main()MyClassます。他のすべてのmain()関数は無視されます。

IDE を使用している場合は、使用するmain()関数を含むクラスを設定できます。

于 2012-07-18T22:42:19.947 に答える
57

.NET では、コンパイル時に使用する Main メソッドを含むクラスを定義できます。

http://msdn.microsoft.com/en-us/library/x3eht538.aspx

Java では、jar にバンドルする場合、jar のマニフェストでエントリ ポイントを定義できます。

http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

于 2012-07-18T22:42:27.153 に答える
18

MainC# では、複数のメソッドを使用できます。

複数のMainメソッドがある場合、コンパイラは使用するエントリ ポイントを認識できないため、エラーが表示されます。

コンパイル時に使用するメソッドを指定するMain必要があります: Visual Studio 開発環境または csc コンパイラでコンパイラ オプションとして使用するメソッドを指定できます。

于 2012-07-18T22:49:16.643 に答える
12

メイン クラスが特別なクラスである理由は 1 つだけです。それは、Java 仮想マシンを実行すると、その関数が JVM によって呼び出されるからです。基本的には他の関数と同じで、実際、あるクラスのメイン関数を別のクラスから呼び出すことができます。

複数のクラスでプロジェクトをコンパイルするときは、次のように、使用するメイン クラスでクラスを実行するように JVM に指示します。

java SomeClass

また、SomeClass がコンパイルされ、適切なコンパイル済みファイルがクラスパスにあると仮定して、SomeClass のメイン メソッドを実行します。(これは、特定の OS で解決する必要があることですが、-cp オプションでクラスパスを指定するのはかなり一般的だと思います)。したがって、この:

java -cp /home/MyName Someclass

ディレクトリ /home/MyName で SomeClass のメイン関数を実行します

于 2012-07-18T22:59:38.347 に答える
10

/main:C#では、コンパイラオプションを使用してエントリポイントを指定します。

main()2つの関数を含む次のコードについて考えてみます。

namespace Application {
    class ClassOne {
        static void main () {
            // Code here
        }
    }

    class ClassTwo {
        static void main () {
            // Code here
        }
    }
}

ClassOne.main()エントリポイントとして使用するには、コンパイル時に次のように指定します。

csc /main:Application.ClassOne hello.cs
于 2012-07-18T22:51:08.650 に答える
7

複数のメイン関数の場合、エントリポイントは次のように宣言できます。

VisualStudio開発環境でこのコンパイラオプションを設定するには

プロジェクトのプロパティページを開きます。

アプリケーションのプロパティページをクリックします。

Startupオブジェクトのプロパティを変更します。

参照: http: //msdn.microsoft.com/en-us/library/x3eht538.aspx

于 2012-07-19T02:26:57.607 に答える
7

Java では、他の人が指摘したように、javaコマンドを実行するときにメイン関数を含むクラスを定義します。

しかし、実行可能な jar を構築することもできます。これはjava -jar my.jar. この場合、jarMANIFEST.MF内のフォルダーで呼び出されるマニフェスト ファイルが必要です。META-INFこのファイルでは、次のステートメントを使用して、メイン関数を含むクラスを指定しますMain-Class: YourClass

于 2012-07-18T23:11:16.937 に答える
4

メイン メソッドは静的です。つまり、オブジェクトではなくクラスに属しています。したがって、オブジェクトには別のメイン メソッドが含まれません。main は static であるため、追加の main-method はありません。なので、1クラスに1回です。

プロジェクトに複数の main-method がある場合は、アプリケーションの起動時にどれを起動するかを指定します

于 2012-07-19T05:18:50.030 に答える
2

実際、バイナリ ファイルでは、たとえば、Windows では PE 形式、Linux またはその他のシステムでは ELF 形式です。バイナリ ファイルのヘッダーは、開始アドレスがどこにあるかを指定し、1 つのみ指定できます。

どれをエントリーポイントにするべきですか?リンカーに依存します。@SetFreeByTruth がコマンドラインパラメーターで指定できると言ったように。多くのリンカーは、コマンド ライン パラメーターを使用したエントリ ポイントの指定をサポートしています。たとえば、gnu の gld は、パラメーター -e でエントリ ポイントを指定できます。

Java仮想マシンで読み込まれるため、Javaの動作はわかりません。

于 2012-07-25T03:56:23.093 に答える
-1

Visual Studio で、エントリ ポイントにするプロジェクトを選択し、右クリックしてスタートアップ プロジェクトとして設定します。

于 2016-12-12T20:40:44.400 に答える