358

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

public static void main(String[] args)
  • 是什么String[] args

  • 你什么时候用这些args

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

4

18 回答 18

349

在 Javaargs中,包含提供的命令行参数String作为对象数组。

换句话说,如果您在终端中运行程序:

C:/ java MyProgram one two

然后args将包含["one", "two"].

如果你想输出 的内容args,你可以像这样循环它们......

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

该程序将在终端打印:

C:/ java MyProgram one two
one
two
    
C:/
于 2009-05-21T01:01:38.710 回答
124

这些用于 Java 中的命令行参数。

换句话说,如果你运行

java MyProgram 一二

然后args包含:

[ “一二” ]

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

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


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

于 2009-05-21T11:10:21.100 回答
48

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

$ java MyProg -f file.txt

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

于 2009-05-21T01:01:17.637 回答
34

以下答案基于我的理解和一些测试。

是什么String[] args

答:

String[] -> 我们知道这是一个简单的字符串数组。

args -> 是一个数组的名称,它可以是任何东西(例如,a、ar、argument、param、parameter),编译器和执行没有问题,我也测试过。

例如:

  1. public static void main(String[] argument)

  2. public static void main(String[] parameter)

你什么时候使用这些参数?

答案->

main功能由开发人员非常智能地设计。实际思维很深刻。它基本上是基于命令行参数在考虑 C 和 C++ 的情况下开发的,但现在没有人更多地使用它。

1-用户可以从命令行输入任何类型的数据,可以是数字或字符串,编译器必须接受它我们应该使用哪种数据类型?看东西2

2- String 是支持所有原始数据类型的数据类型,如 Java 中的 int、long、float、double、byte、shot、char。您可以轻松地将其解析为任何原始数据类型。

例如:以下程序已编译并执行,我也进行了测试。

如果输入是 -> 1 1

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}
于 2016-09-30T08:50:55.617 回答
17

即使 OP 只是在谈论String[] args,我想举一个完整的例子public static void main(String[] args)

Public: 是一个访问修饰符,它定义了谁可以访问这个方法。Public 表示任何类都可以访问此方法(如果其他类能够访问该类。)。

Static: 是标识类相关事物的关键字。这意味着给定的方法或变量与实例无关,而是与类相关。无需创建类的实例即可访问它。

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)

该代码还告诉我们,这public static void main(String[] args)不是固定的,如果您将 (jdk-src\j2se\src\share\bin\java.c) 中的代码更改为另一个签名,它将起作用,但更改它会给您带来其他可能的问题因为java规范

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

于 2016-06-15T12:17:11.670 回答
13

我会分手

public static void main(String args[])

在部分。

“public”意味着可以从任何地方调用 main()。

“静态”表示 main() 不属于特定对象

"void"表示 main() 不返回任何值

“main”是函数的名称。main() 很特别,因为它是程序的开始。

“String[]”表示一个字符串数组。

“args”是 String[] 的名称(在 main() 的主体中)。"args" 并不特殊;您可以将其命名为其他任何名称,并且该程序的工作方式相同。

  • String[] args是字符串的集合,用空格隔开,可以在终端输入程序。很多时候,初学者不会使用这个变量,但它总是在那里以防万一。
于 2016-08-20T09:00:09.337 回答
11

String [] args也是在 Java 中声明字符串数组的方式。

在此方法签名中,数组args将在调用方法时填充值(如此处的其他示例所示)。由于您正在学习,因此值得理解的是,这个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
}
于 2009-05-21T01:16:47.590 回答
10

用简单的外行语言解释。

当我们将 JVM 定向到类名时,main 方法希望我们提供一些参数。这意味着,假设您的文件名为 Try.java,现在要在命令提示符下执行此操作,您可以编写“javac Try.java”进行编译,然后编写“java Try”来执行。现在假设你写的不是简单的“java Try”,而是“java Try 1”。在这里,您传递了一个参数“1”。即使您不在代码中使用它,您的 main 方法也将采用它。

如果您想检查您的 main 方法是否实际采用了参数“1”。简单地说,在您的主要方法中键入以下内容:

for(int i = 0; i < args.length; i++) {
        System.out.println("Argument is: "+args[i]);
    }
于 2016-03-24T10:07:14.903 回答
9

完成代码后,您会将其转换为扩展名为 .java 的文件,该文件可以通过双击运行,也可以在整个控制台(mac 上的终端,windows 上的 cmd.exe)中运行,让用户执行很多东西。一件事是他们可以看到控制台消息(System.out.print 或 System.out.println),如果双击则看不到这些消息。他们可以做的另一件事是指定参数,因此通常您会使用该行

java -jar MyCode.jar

导航到程序的文件夹后

cd C:My/Code/Location

在窗户或

cd My/Code/Location

在 Mac 上(注意 mac 不那么笨重)运行代码,但要指定您将使用的参数

java -jar MyCode.jar parameter1 parameter2

这些参数存储在 args 数组中,您可以在程序中使用这些参数是您希望允许用户控制特殊参数,例如使用什么文件或程序可以拥有多少内存。如果你想知道如何使用数组,你可能会在这个网站上找到一个主题或者只是谷歌它。请注意,可以使用任意数量的参数。

于 2014-01-23T00:50:43.953 回答
7

从控制台执行 java 类时,调用的是 main 方法。为了实现这一点,这个 main 方法的定义必须是

public static void main(String [])

这个字符串数组被称为 args 的事实是一个标准约定,但不是严格要求的。当您调用程序时,您将在命令行中填充此数组

java MyClass a b c

这些通常用于定义程序的选项,例如要写入或读取的文件。

于 2009-05-21T01:18:58.693 回答
7

我认为上面的答案很好地涵盖了这String args[]只是一个字符串参数数组,您可以在运行它时将其传递给您的应用程序。为了完成,我可能会补充一点,将传递给main方法的方法参数定义为 String 类型的变量参数 (varargs) 也是有效的:

public static void main (String... args)

换句话说,该main方法必须接受 String 数组 ( String args[]) 或 varargs ( String... args) 作为方法参数。而且这个名字也没有什么魔力args。你不妨写arguments,甚至freddiefujiwara如下所示:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

于 2014-11-29T22:31:23.563 回答
6

public static void main(String args[]) 中,args 是一个控制台行参数数组,其数据类型为字符串。在这个数组中,您可以通过在命令行中调用它们来存储各种字符串参数,如下所示: java myProgram Shaan Royal 然后 Shaan 和 Royal 将以 arg[0]="Shaan" 的形式存储在数组中;arg[1]="皇家"; 当您不在命令行调用它们时,您也可以在程序内部手动执行此操作。

于 2013-05-28T14:27:19.647 回答
5

String[] args表示传递给“main”函数的字符序列(字符串)数组。这发生在执行程序时。

通过命令行执行 Java 程序的示例:

java MyProgram This is just a test

因此,数组将存储:["This", "is", "just", "a", "test"]

于 2020-08-08T19:53:11.427 回答
4

参数是在操作系统中通过命令行运行应用程序时作为参数传递的String[] args字符串数组。

因此,假设您已经编译并打包了一个myApp.jarJava 应用程序。当然,您可以通过在操作系统中双击它来运行您的应用程序,但您也可以使用命令行方式运行它,例如(在 Linux 中):

user@computer:~$ java -jar myApp.jar

当您调用应用程序时传递一些参数,例如:

user@computer:~$ java -jar myApp.jar update notify

java -jar命令会将您的字符串传递updatenotify您的public static void main()方法。

然后,您可以执行以下操作:

System.out.println(args[0]); //Which will print 'update'
System.out.println(args[1]); //Which will print 'notify'
于 2020-02-10T22:05:12.330 回答
3

风格dataType[] arrayRefVar是首选。该风格dataType arrayRefVar[]来自 C/C++ 语言,并在 Java 中采用以适应 C/C++ 程序员。

于 2015-01-17T12:49:54.517 回答
3

除了之前的所有评论。

public static void main(String[] args) 

可以写成

 public static void main(String...arg)

或者

 public static void main(String...strings)
于 2018-12-24T10:23:40.993 回答
0

您也可以使用以下语法。

public static void main(String... args)

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

于 2021-04-18T10:41:30.193 回答
-3

尝试这个:

System.getProperties().getProperty("sun.java.command", 
    System.getProperties().getProperty("sun.rt.javaCommand"));
于 2020-11-19T05:56:13.020 回答