我刚开始用Java写程序。下面的Java代码是什么意思?

public static void main(String[] args)

什么是字符串[]参数? 什么时候使用这些参数?

源代码和/或示例优先于抽象的解释。


当前回答

String [] args也是在Java中声明String数组的方法。

在这个方法签名中,当方法被调用时,数组参数将被填充值(如这里的其他示例所示)。因为你正在学习,所以值得理解的是,这个args数组就像你在一个方法中自己创建一个一样,如下所示:

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}

其他回答

您也可以使用下面的语法。

public static void main(String... args)

这里省略,即数据类型String后面的三个点指定零个或多个参数(参数数量可变)。

即使OP只是谈论String[]参数,我想给出一个完整的公共静态void main(String[] args)的例子。

Public:是一个访问修饰符,它定义了谁可以访问此方法。Public意味着这个方法可以被任何类访问(如果其他类能够访问这个类的话)。

Static:是一个关键字,它标识类相关的东西。这意味着给定的方法或变量与实例无关,而是与类相关。可以在不创建Class实例的情况下访问它。

Void:用于定义方法的返回类型。它定义了方法可以返回的内容。Void表示方法不会返回任何值。

main:方法的名称。JVM仅将此方法名作为具有特定签名的应用程序的起点进行搜索。

String[] args:是主方法的参数。

如果你查看JDK源代码(JDK -src\j2se\src\share\bin\java.c):

/* Get the application's main method */
mainID = (*env)->GetStaticMethodID(env, mainClass, "main",
                   "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

你可以看到java中的启动方法必须命名为main,并且必须具有特定的签名public static void main(String[] args)

代码还告诉我们,公共静态void main(String[] args)是不固定的,如果你改变(jdk-src\j2se\src\share\bin\java.c)中的代码到另一个签名,它会工作,但改变这将给你其他可能的问题,因为java规范

跑题:OP问这个问题已经7年了,我猜OP现在可以回答他自己的问题了。

这些是Java中的命令行参数。

换句话说,如果你跑

java MyProgram一二

然后args包含:

["一","二"]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

这样做的原因是为了配置应用程序以特定的方式运行,或者为它提供所需的一些信息。


如果您是Java新手,我强烈建议您阅读官方的Oracle Java™教程。

args包含调用时传递给Java程序的命令行参数。例如,如果我像这样调用程序:

$ java MyProg -f file.txt

然后args将是一个包含字符串"-f"和"file.txt"的数组。

用通俗易懂的语言解释。

当我们将JVM指向类名时,main方法希望我们提供一些参数。这意味着,假设你的文件名是Try.java,现在要在命令提示符中执行这个命令,你写“javac Try.java”来编译,然后再写“java Try”来执行。现在假设不是简单地写“java Try”而是写“java Try 1”。这里你传递了一个参数“1”。这将由你的main方法获取,即使你没有在你的代码中使用它。

如果你想检查你的主方法是否真的取了参数"1"简单地,在你的main方法中输入以下内容:

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }