java - 为什么重载 main 方法会出现语法错误?

标签 java overloading

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/

相关文章:

java - java中从数组中删除元素

java - 从第二个 Java 文件调用函数时崩溃

java - 使用数组删除for循环中的最后一个逗号

C++ 编译器选择了类成员函数的错误重载

c++ - C++虚函数的重载解析——引用与指针

c++类型转换运算符重载和隐式转换

java - 构建器模式与依赖注入(inject)(例如通过 Guice)

Java Rx - 过滤定时事件

c++ - 如何在同一文件 C++ 中使用重载 []

python - 如果派生类中的属性被覆盖,如何调用基类的数据成员?