可変引数は、基本的に単一のアレイにコンパイルされます。したがって、あなたが同じである2つの方法
あなたのコード持っている(メインの1を変更し、それが今で有効なコードです):
import java.io.PrintStream;
public class Overload {
public static void main2(String... paramVarArgs) {
System.out.println("in main 1");
}
public static void main(String[] paramArrayOfString) {
System.out.println("in main 2");
}
}
このコードにコンパイルし、bytcodeビューアで逆コンパイル:
public class Overload {
public Overload() { // <init> //()V
L1 {
aload0 // reference to self
invokespecial java/lang/Object <init>(()V);
return
}
}
public static varargs main2(java.lang.String[] arg0) { //([Ljava/lang/String;)V
L1 {
getstatic java/lang/System.out:java.io.PrintStream
ldc "in main 1" (java.lang.String)
invokevirtual java/io/PrintStream println((Ljava/lang/String;)V);
}
L2 {
return
}
}
public static main(java.lang.String[] arg0) { //([Ljava/lang/String;)V
L1 {
getstatic java/lang/System.out:java.io.PrintStream
ldc "in main 2" (java.lang.String)
invokevirtual java/io/PrintStream println((Ljava/lang/String;)V);
}
L2 {
return
}
}
}
[Javaプログラムには2つの主要なメソッドが存在することができますか?](http://stackoverflow.com/questions/13399836/can-there-exist-two-main-methods-in-a) -java-program)を実行します。この質問は 'メイン(文字列...引数)が' 'メイン(文字列引数[])に対し' varargs'からなること 'パラメータとして' array'から成る尋ねます。両方とも署名が異なります(コンパイル時のコンバージョンを考慮しない場合)。なぜ両方を定義できないのでしょうか。一方、質問* Javaプログラムには2つの主要なメソッドが存在することができますか?*質問に複数のエントリポイントがあるかどうかを尋ねます。どちらも違います。 –