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



我不是在问什么是(String args[]),因为这里的答案是:什么是"字符串args[]"?主方法Java中的参数。

我的问题是,为什么在写main()的时候必须写它?

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

同一天,我在Viva中被问到——"在写main()的时候有必要写这个String args[]吗?"由于出现了错误,我回答了"是",但当被问到"为什么?"时,我没有回答
所以我想知道为什么有必要写String[]args

来自Java语言规范12.1.4

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

public static void main(String[] args)

public static void main(String... args)

(请注意,在同一个类中不能有两个main方法和String[]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();
}

在Java中,入口点必须是public static void main(String[])方法。这就是运行类时的简单名称。不会调用不带参数的main()方法。如果您的命令中没有参数,那么您只是在调用长度为0的数组main(String[])

为了解决Viva问题,参数的标识符仅由编译器使用,并且可以更改,同时替换[]的位置或使用String...指定数组。因此,这似乎是一个技术问题,但你可以使用以下任何一种:

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

它用于命令参数。如果没有它们,JVM将不得不在尝试调用该方法之前执行检查,以查看该方法是否包含参数,从而确定它是否可以执行main()main(args)(两种语法正确的方法,具有不同的调用方式)

相关内容

  • 没有找到相关文章

最新更新