什么是“String args []”?主方法Java中的参数

时间:2009-05-21 00:57:16

标签: java parameters command-line-arguments main

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

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

  • 您何时会使用这些args

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

18 个答案:

答案 0 :(得分:271)

在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]);
        }
    }
}

答案 1 :(得分:98)

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

换句话说,如果你运行

  

java MyProgram一两个

然后args包含:

[“one”,“two”]

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

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


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

答案 2 :(得分:37)

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

$ java MyProg -f file.txt

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

答案 3 :(得分:14)

以下答案基于我的理解&amp;一些测试。

什么是String [] args?

答案 - &gt;

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

args - &gt;是一个数组的名称,它可以是任何东西(例如a,ar,参数,参数,参数),编译器和数据没有问题。执行和我也测试了。

<强> E.g。
1)public static void main(String [] argument)

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

您何时会使用这些参数?

<强> Ans-&GT;

主要功能由开发人员非常智能地设计。实际思维非常深刻。     这基本上是在考虑C&amp; C ++基于命令行参数,但现在没有人更多地使用它。

事情1 - 用户可以从命令行输入任何类型的数据,可以是Number或String&amp;必须由编译器接受我们应该使用哪种数据类型?看东西2

Thing 2 - String是一种数据类型,支持Java中的所有原始数据类型,如int,long,float,double,byte,shot,char。您可以使用任何原始数据类型轻松解析它。

E.g 编译以下程序&amp;执行和我也测试了。

如果输入是 - > 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    

  }
}

答案 4 :(得分:12)

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
}

答案 5 :(得分:11)

我会分手

public static void main(String args[])

部分。

&#34; public&#34; 表示可以从任何地方调用main()。

&#34;静态&#34; 表示main()不属于特定对象

&#34; void&#34; 表示main()不返回任何值

&#34; main&#34; 是函数的名称。 main()很特别,因为它是程序的开始。

&#34; String []&#34; 表示一个String数组。

&#34; args&#34; 是String []的名称(在main()的主体内)。 &#34; ARGS&#34;并不特别;你可以把它命名为其他任何东西,程序也可以这样工作。

  • String[] args是一个字符串集合,由空格分隔,可以在终端上输入程序。更多的时候,初学者不会使用这个变量,但总是存在以防万一。

答案 6 :(得分:9)

即使OP只讨论String[] args,我想提供public static void main(String[] args)的完整示例。

Public:是Access Modifier,定义了谁可以访问此方法。公共意味着任何类都可以访问此方法(如果其他类能够访问此类。)。

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现在可以回答他自己的问题了。

答案 7 :(得分:8)

当你完成代码时,你会把它变成一个扩展名为.java的文件,它可以通过双击来运行,也可以通过一个控制台(mac上的终端,windows上的cmd.exe)来运行。用户做了很多事情。有一件事是他们可以看到控制台消息(System.out.print或System.out.println),如果他们双击它们就看不到它们。他们可以做的另一件事是指定参数,所以通常你会使用

java -jar MyCode.jar

导航到程序文件夹后

cd C:My/Code/Location

在Windows上或

cd My/Code/Location

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

java -jar MyCode.jar parameter1 parameter2

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

答案 8 :(得分:7)

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

public static void main (String... args)

换句话说,main方法必须接受String数组(String args[])或varargs(String... args)作为方法参数。名字args也没有神奇之处。您也可以写下arguments甚至freddiefujiwara,如下面的e.gs所示:

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

答案 9 :(得分:6)

用简单的外行人的语言解释。

当我们将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]);
    }

答案 10 :(得分:6)

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

答案 11 :(得分:6)

当从控制台执行java类时,main方法就是所谓的。为了实现这一点,这个主要方法的定义必须是

public static void main(String [])

此字符串数组称为args的事实是标准约定,但并非严格要求。您可以在调用程序的命令行中填充此数组

java MyClass a b c

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

答案 12 :(得分:3)

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

答案 13 :(得分:2)

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'

答案 14 :(得分:0)

除了所有先前的评论。

public static void main(String[] args) 

可以写为

 public static void main(String...arg)

 public static void main(String...strings)

答案 15 :(得分:0)

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

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

java MyProgram This is just a test

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

答案 16 :(得分:0)

尝试一下:

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

答案 17 :(得分:0)

您也可以使用以下语法。

public static void main(String... args)

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