1

Helloworld.java クラスのメイン関数で、文字列またはオブジェクトを作成しました。次に、別のクラス HelloAnotherClass.java を作成しました。Helloworld main() から HelloAnotherClass.java のメイン関数に変数を渡したいです。

package helloworld;
        public class HelloAnotherClass {
           public static void main(String[] args) throws IOException, ParseException {
        //... for example print passed variables
        }

引数または別のデータ構造を使用して HelloWorld main() から HelloAnotherClass main() に変数を送信し、HelloWorld.java に戻すにはどうすればよいですか? 簡単に言うと、別の Java クラスの main() 関数を HelloWorld クラスの関数として使用したいと考えています。

それは私が書いたコードサンプルです

    HelloWorld { 
    /** * @param args the command line arguments */ 
    public static void main(String[] args) { 
    HelloAnotherClass.main("example"); 
    } 

public class HelloAnotherClass { 
    public static void main(String coming) throws IOException, ParseException { 
System.out.println(coming); 
    }
4

4 に答える 4

1

他のクラスをどのように実行したいかによって異なります。

現在の JVM で実行したい場合は、明らかな方法で実行します。

  • 引数を含む文字列の配列を作成します。
  • main配列をパラメーターとしてメソッドを呼び出します。

java新しい JVM で実行する場合は、自分でコマンド ラインから実行する場合と同様に、System.exec(...) (または同等のもの) をコマンド文字列と共に使用します。(引数文字列にスペースが含まれている場合、特定の Java インストールを使用したい場合、同じ JVM オプションを使用したい場合など... より複雑になります。)

2 つのアプローチには、次のような利点と欠点があります。

  • 別のクラスmainを呼び出すと、「起動」時間が速くなりますが、次のようになります。

    1. 他のクラスは、元のクラスSystem.in/out/errと静的を共有しているため、独立した一連のストリームを持ちません。main
    2. System.exit()JVM全体を呼び出すと、終了します。
    3. 不正な動作をした場合、元のmainクラスはおそらくそれを取り除くことができません。
  • 別の JVM を起動すると、起動時間が大幅に遅くなりますが、子 JVM は親 JVM に干渉できなくなります。


ちなみに、最初の試行が失敗した理由は、文字列の配列ではなく文字列を渡しているためです。コンパイラはそれをさせません...

于 2012-10-14T06:13:22.677 に答える
0

2 つの独立したプログラムを実行していて、データを交換したい場合は、プロセス間通信についてお読みください。

于 2012-10-14T06:11:04.513 に答える
0

デフォルトmainでは、引数を として受け取りますString[]。以下のように更新HelloAnotherClassします。

public class HelloWorld { 

   /** * @param args the command line arguments */ 
   public static void main(String[] args) { 
        HelloAnotherClass.main(new String[]{"example"}); 
   }
}

クラスで引数を出力しようとするHelloAnotherClassと、次のようになります。

public class HelloAnotherClass { 

  public static void main(String[] coming) throws IOException, ParseException {  
    System.out.println(coming[0]); 
  }
}

パラメータとして別のメインメソッドが必要な場合はString、それも実行できます。

public class HelloWorld { 

    /** * @param args the command line arguments */ 
    public static void main(String[] args) { 
       HelloAnotherClass.main("example"); 
    }
 }

 public class HelloAnotherClass { 

    public static void main(String coming) throws IOException, ParseException {  
       System.out.println(coming); 
    }
 }

他の/追加の詳細を探している場合は、お知らせください。

于 2012-10-14T06:25:22.610 に答える
0

これは HelloWorld で、いくつかの引数があります (「Hello Crazy World」を渡しました)。

public static void main(String args[]) {
    //call static main method of Main2 class
    HelloAnotherWorld.main(args);
      //Modifcation made on Main2 is reflected
    System.out.println(args[1].toString());
}

}

ハローアナザーワールドです

public static void main(String args[]) {        
    args[1]="foobar";
}

メインは HelloAnotherWorld で静的であるため、メイン メソッドを HelloAnotherWorld.main("配列がここに入る"); として呼び出すことができます。また、main は void を返すため、main メソッドをオーバーロードしていない限り、プリミティブを渡してそれを返そうとしても失敗することに注意してください。

于 2012-10-14T06:25:58.867 に答える