【问题标题】:What is "String args[]"? parameter in main method Java什么是“字符串参数 []”?主要方法Java中的参数
【发布时间】:2020-05-11 17:12:08
【问题描述】:

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

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

  • 你什么时候会使用这些args

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

【问题讨论】:

    标签: java parameters command-line-arguments main


    【解决方案1】:

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

    $ java MyProg -f file.txt
    

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

    【讨论】:

    • 我必须先用javac MyProg.java 编译我的代码,然后再运行java MyProg -f file.txt。这是有原因的吗,因为答案中没有提到它?
    • @stanimirsp:您必须先将 Java 源代码编译成 .class 文件。
    • @stanimirsp 你可以查看stackoverflow.com/questions/5283841/…。尽管这不适用于 Java,但使用 Java 进行编译具有大部分优势。
    【解决方案2】:

    在 Java 中,args 包含提供的 command-line arguments 作为 String 对象的数组。

    换句话说,如果您以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]);
            }
        }
    }
    

    【讨论】:

    • 值得注意的是args 不一定必须命名为args(你可以随意命名)——尽管最好遵循约定。您还可能会不时看到String... args,这是等效的。
    • args 索引从 0 开始。(与 C 给出程序名称相反)
    • @Daniel,无论操作系统如何,args 都保证用空格分隔吗?
    • @Luke 这不可能是真的,至少在 Unix 系统上不是这样。在那里,shell 将参数传递给已经根据 shell 规则拆分的程序(相应地删除了引用/转义)。程序(在这种情况下是 java 解释器)无法访问原始的未拆分命令行,也不应该这样做,因为这会使用户感到困惑。
    • 如果未来的用户想知道main 方法是如何接收参数的——首先,参数通过shell 的规则传递给JVM。大多数贝壳由空格分隔。然后 JVM 为您初始化一个 String[],其中填充了参数。然后将该数组作为参数传递给main 方法。
    【解决方案3】:

    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
    }
    

    【讨论】:

      【解决方案4】:

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

      public static void main(String [])
      

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

      java MyClass a b c
      

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

      【讨论】:

        【解决方案5】:

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

        换句话说,如果你运行

        java MyProgram 一二

        那么args 包含:

        [“一”,“二”]

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

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


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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            完成代码后,您会将其转换为扩展名为 .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 数组中,您可以在您的程序中使用这些参数是您希望允许用户控制特殊参数,例如使用什么文件或程序可以拥有多少内存。如果你想知道如何使用数组,你可能会在这个网站上找到一个主题或者只是谷歌它。请注意,可以使用任意数量的参数。

            【讨论】:

              【解决方案8】:

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

              public static void main (String... args)

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

              public static void main (String[] arguments)

              public static void main (String[] freddiefujiwara)

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

                  通俗易懂的解释。

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

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

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

                  【讨论】:

                    【解决方案11】:

                    即使 OP 只是在谈论 String[] args,我也想给出一个完整的 public static void main(String[] args) 示例。

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

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

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

                    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中的starting method必须命名为main,并且必须有特定的签名public static void main(String[] args)

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

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

                    【讨论】:

                      【解决方案12】:

                      我会分手

                      public static void main(String args[])
                      

                      部分。

                      “public” 表示可以从任何地方调用 main()。

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

                      “void”表示main()没有返回值

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

                      "String[]" 表示字符串数组。

                      "args" 是 String[] 的名称(在 main() 的主体内)。 "args" 并不特殊;您可以将其命名为其他任何名称,程序也可以正常工作。

                      • String[] args是Strings的集合,用空格隔开,可以在终端输入程序。很多时候,初学者不会使用这个变量,但它总是在那里以防万一。

                      【讨论】:

                      • 您将方括号用于args,而不是String。是故意的吗?
                      • 如果我使用 (anyother-datatype) int ar[] 代替 String args[] 会发生什么? @jaimin 帕特尔
                      【解决方案13】:

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

                      String[] args 是什么?

                      回答:

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

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

                      例如:

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

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

                      什么时候使用这些参数?

                      Ans->

                      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    
                      
                        }
                      }
                      

                      【讨论】:

                      • 这个答案最好,应该是最高评价的
                      • 如果我使用 (anyother-datatype) int ar[] 代替 String args[] 会发生什么? @Ajinkya
                      • @chandru - 将编译代码但无法运行
                      【解决方案14】:

                      除了之前所有的cmets。

                      public static void main(String[] args) 
                      

                      可以写成

                       public static void main(String...arg)
                      

                       public static void main(String...strings)
                      

                      【讨论】:

                        【解决方案15】:

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

                        所以,假设您已经编译并打包了一个myApp.jar Java 应用程序。当然,您可以通过在操作系统中双击它来运行您的应用程序,但您也可以使用命令行方式运行它,例如(在 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'
                        

                        【讨论】:

                          【解决方案16】:

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

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

                          java MyProgram This is just a test

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

                          【讨论】:

                            【解决方案17】:

                            试试这个:

                            System.getProperties().getProperty("sun.java.command", 
                                System.getProperties().getProperty("sun.rt.javaCommand"));
                            

                            【讨论】:

                              【解决方案18】:

                              您也可以使用以下语法。

                              public static void main(String... args)
                              

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

                              【讨论】:

                                猜你喜欢
                                • 2012-06-02
                                • 2018-11-02
                                • 1970-01-01
                                • 1970-01-01
                                • 2019-01-13
                                • 2010-09-25
                                • 2016-04-30
                                相关资源
                                最近更新 更多