import java.util.*;
public class Overload {
public static void main(String...args) {
System.out.println("in main 1");
}
public static void main(String args[]) {
System.out.println("in main 2");
}
}
我正在检查两个主要方法是否具有标准签名,哪个将被执行,但是当我编译它时,它显示错误。为什么会这样?
最佳答案
Varargs 基本上被编译成单个数组。因此,您有两种相同的方法
您的代码(更改了其中一个主要代码,现在是有效代码):
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");
}
}
此代码使用字节码查看器编译和反编译:
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 - 为什么重载 main 方法会出现语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38950017/