为什么Java main()方法接受String args数组?

时间:2009-04-10 11:24:34

标签: java programming-languages

由于它可能是Java语言中使用最广泛的方法之一,为什么它必须接受一个字符串数组而没有它呢?例如,我总是可以忍受:

public static void main() {}

public static void main(String[] args) {}

这是否有更高的目的,只是能够接受命令行参数,特别是因为绝大多数Java程序是GUI驱动的,不需要通过命令行接收args?

9 个答案:

答案 0 :(得分:12)

我同意它可以更灵活。例如,在C#中,所有这些都是可接受的入口点:

static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)

返回int的版本使用返回值作为进程的退出代码。如果您不关心接收任何参数,您可以使用其中一个不带任何参数的版本。启动程序时给出的任何参数都将被忽略。

所以是的,它可以更灵活 - 但它从来没有让我觉得它是Java中的一个重要问题。

答案 1 :(得分:9)

即使是一个gui驱动的java应用程序也将从一些主要方法开始。 “更高目的”从未接受过命令行参数。

目的只是接受论点。期。每当你启动任何程序而不仅仅是Java时,你总是需要一些语法来传递参数

答案 2 :(得分:6)

程序始终获取命令行参数。由程序员决定是否用于任何事情。

因此,实现一个没有字符串数组的main会导致更复杂的启动逻辑和可能令人困惑和错误的行为,因为更多的是没有编写单个参数声明的好处(在整个程序中!)

考虑到Java&的总体冗长在像Eclipse这样的IDE中对样板代码的通用模板的支持,我无法确定这是一个真正的问题。

答案 3 :(得分:4)

“这是否有更高的目的(..)”

是:遗产。

答案 4 :(得分:2)

“绝大多数”程序所做的事情在需要完成的工作方面并没有太大的区别。仍有许多命令行程序由命令行参数驱动。

答案 5 :(得分:2)

许多GUI程序提供了接受命令行开关来控制它们在启动时的行为的工具。

答案 6 :(得分:2)

我想这是因为许多Java程序至少会采用一些参数。就像C(Java的语法灵感,如果没有别的),Java考虑了将这些作为参数提供给main的最佳方式。

即使是GUI程序也经常采用命令行参数。仅仅因为它启动的shell通常不会要求这些参数(默认情况下),并不意味着它们不受支持。

答案 7 :(得分:1)

还有许多java程序通过命令行接收args。想想javac,ant,maven等

答案 8 :(得分:0)

Java 应用程序可以从命令行接受任意数量的参数。这允许用户在启动应用程序时指定配置信息。例如,我们可以从命令行本身传递用户名、密码。

class Test {

    static void connectDB(String username, String password) {       
        System.out.print(String.format("Username: %s, Password: %s", username, password));
        // code to connect DB
    }

    public static void main(String args[]) {
        connectDB(args[0], args[1]);
    }
}  

现在使用 javac Test.java 编译程序 并使用 java Test rootuser Test1234

执行

输出将是:

Username: rootuser, Password: Test1234
  

所以,我们可以使用 commandline-argument 这种目的。