为什么有必要将`String [] args`作为main()参数?

时间:2015-10-31 17:42:50

标签: java string main

我不会问(String args[])是什么,因为这里已经回答:What is "String args[]"? parameter in main method Java

我的问题是为什么在编写main()时有必要编写它?

我参加了实践考试,在那里我遇到了一个问题并意识到在写String args[]时我没有写public static void main()。但是在写完main(String args[])之后,问题就解决了。 (我怎么以及为什么还不知道!)

同一天,我被问到Viva,我被问到 - "是否有必要在撰写String args[]时写下main()?"并且由于发生的错误,我回复了#34;是"当被问及时为什么没有回答"为什么?"。
所以我想知道为什么有必要编写String [] args

3 个答案:

答案 0 :(得分:2)

来自Java Language Specification 12.1.4

  

方法main必须声明为publicstaticvoid。它必须指定一个形式参数(第8.4.1节),其声明的类型是String的数组。因此,可以接受以下任一声明:

     

public static void main(String[] args)

     

public static void main(String... args)

(请注意,在同一个类中,mainString[]不能有两个String...方法,因为varargs只是编译时的语法糖时间将被数组替换,因此最终会有两个方法处理String[],一个类不能有两个方法具有相同的名称和参数)

所以当你执行像

这样的命令时
java YourClass foo bar

Java虚拟机会将foobar参数放在String[]数组中,并尝试将该数组传递给main方法,该方法可以将其作为参数接受。

当命令没有像

这样的参数时,也会使用此方法
java YourType

这个决定简​​化了我们的生活,因为我们不需要专注于处理有两个入口点的案例

  • 一个带参数的命令
  • 和其中一个命令没有任何参数。

我们可以简单地允许用户传递参数,但如果我们不想处理它们,我们可以简单地忽略它们。

还要记住,我们被允许在我们的类中拥有任何具有适当声明的方法(并且不违反从超类继承的任何规则,如扩展成员可见性 - 我们不能使受保护的方法公开),所以没有什么

错了
public static void main(){
    /*your code*/
}

但您需要意识到此方法不能用作入口点,因此如果您想从此方法启动应用程序,则需要创建正确的main方法这将执行您的 main()方法:

public static void main(String ...){
    main();
}

答案 1 :(得分:1)

这是命令参数。如果没有它们,JVM必须在尝试调用方法之前执行检查以查看方法是否包含参数,确定它是否可以执行main()main(args)(两种语法正确的方法,具有不同的方法叫他们)

答案 2 :(得分:1)

在Java中,入口点必须是main()方法。这就是您运行课程时所调用的内容。不会调用没有参数的main(String[])方法。如果命令中没有参数,则只需使用长度为0的数组调用[]

要解决Viva问题,参数的标识符仅由编译器使用,可以更改,以及String...的替代放置或使用public static void main(String[] args)指定数组。所以它似乎是技术性的,但你可以使用以下任何一种:

  1. public static void main(String args[])
  2. public static void main(String... args)
  3. public static void main(String[] custom_identifier)
  4. public static void main(String custom_identifier[])
  5. public static void main(String... custom_identifier)
  6. name