java - 为什么主函数重载没有冲突?

标签 java program-entry-point variadic-functions

<分区>

Possible Duplicate:
Can we overload the main method in Java?

当我尝试编译并运行以下代码时,它正在运行并且我在控制台上看到“A”。

为什么?

在我看来(String... args)它是相同的(String arg, String[] args)

public class AFewMainExample {
    public static void main(String... args) {
        System.out.print("A");
    }

    public static void main(String args) {
        System.out.print("B");
    }

    public static void main(String[] args, String arg) {
        System.out.print("C");
    }

    public static void main(String arg, String[] args) {
        System.out.print("D");
    }
}

最佳答案

这个其实是在JLS中指定的,§12.1.4 :

The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:

  • public static void main(String[] args)

  • public static void main(String... args)

除了调用函数的方式外,可变参数类型和标准数组类型之间没有区别,如前所述here .因此,可变参数版本满足上面详述的所有标准并作为有效的 main 方法通过。显然,所有其他 main 重载都不等效(否则会出现编译错误)。

关于java - 为什么主函数重载没有冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204278/

相关文章:

java - 可变参数数组的组件类型是如何确定的?

java - 需要使用 java 从 xml 中提取特定标签及其值

java - 如何全局保存一个变量 token 并每 10 小时更新一次

C++ cout 不会打印

C++主要函数及程序

c++ - 使用包含 %1、%2 等而不是 %d、%s 等的格式字符串 - Linux、C++

java - 快速排序分析

java - ArrayList 和读取文件的问题

c - 是 return main();一个有效的语法?

c++ - 具有空参数包的递归可变参数模板(以避免基本情况的重复)