为什么Java主要方法即使不使用它们也会采用“String [] args”参数?

时间:2016-02-18 20:50:24

标签: java

我用Ruby和C ++编写了一些代码,但在Java中我不明白main方法的String[] args参数是什么。

许多简单的Java('hello world')示例或多或少都是这样的:

public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

据我所知,其他语言的语法args将用于将命令行参数传递给程序。但是,这些简单示例不使用命令行参数。

那么,为什么在不使用这些情况时需要args参数?

2 个答案:

答案 0 :(得分:1)

因为这不是一种动态语言;参数的数量和类型是方法签名的一部分,以下所有方法都是不同的方法:

public static void main(String[] args)
public static void main(Object[] args)
public static void main()
public static void main(Collection<String> args)
public static void main(List<String> args)
public static void main(String[] args, String other)
public static void main(String other, String[] args)

现在,在运行时期间将调用正确的方法,该方法实现在编译期间确定的最具体的类型参数 。 (注意:这不包括参数名称。)

这有一个副作用,即主方法必须具有适用于所有个案的特定签名。当您不带参数运行时,args数组仍然存在,但长度为零。如果您的程序不接受参数,则可以完全忽略args参数。

答案 1 :(得分:0)

Java language specification, §12.4.1

中指定了在JVM启动时执行的方法的签名
  

方法main必须声明为publicstaticvoid。它必须指定一个形式参数(§8.4.1),其声明的类型是String数组。

因此,您始终必须添加此参数。请注意,您可以使用String[]String...作为类型。