可變參數基本上編譯成單個陣列。因此,你有2種方法哪都一樣
你的代碼(改變的主要原因之一,它現在是一個有效的代碼):
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程序中是否存在兩個主要方法?](http://stackoverflow.com/questions/13399836/can-there-exist-two-main-methods-in-a -java-程序)。這個問題問該'主要(字符串參數... args)'由varargs'的''而主(字符串ARGS [])'由array'作爲參數的'。兩者都有不同的簽名(如果我們不考慮編譯時轉換),那麼爲什麼我們不能定義兩者。而問題* Java程序中是否可以存在兩種主要方法?*詢問問題是否可以有多個入口點。兩者都不同。 –