为什么Java中需要String args?

我理解String [] args是一个传递给main作为参数的字符串数组。

java Print "Hello, World!" 

 class Print { public static void main(String[] args) { System.out.println(args[0]); } } 

但是,如果不将其作为参数包含(即使不使用),则会引发exception。 那为什么需要呢? 另外,为什么它不能是int []或boolean []?

它是一个String,因为命令行以文本表示。 如果要将该文本转换为整数或布尔值,则必须自己执行此操作 – 操作系统或Java引导程序将如何确切地知道您希望如何解析所有内容? 我想Java 可以寻找一个主命令方法,使用与命令行参数相同数量的参数,然后尝试使用Integer.parseInt等解析它们……但这会非常复杂,并且在许多情况下仍然不够。

至于它是强制性的 – 基本上Java设计者决定坚持使用单一方法签名,这比允许它是可选的更简单。 虽然有可能 – 在C#中,你可以拥有任何一个

 static void Main() static void Main(string[] args) static int Main() static int Main(string[] args) 

说实话,它最终并没有太大的区别。 必须包含参数没有明显的缺点。

Java运行时系统专门查找具有单个String[]类型参数的方法,因为它希望将参数传递给main方法。 如果不存在这样的方法,它会通过exception通知您。

如果要将(字符串)命令行参数视为整数或布尔值,则应自行进行转换。 这允许您处理某人进入您期望整数的"ponies"情况。

这就是语言的设计方式。 C和C ++都以类似的方式进行,但是使用单独的计数,包含在Java字符串数组中的信息。

可以将其设计为采用整数或布尔值,但这会为Java运行时添加更多工作,从而可能带来很少的好处。

字符串可用于将任何类型的信息传输到主程序(包括整数和布尔值)。 如果你想传入一个字符串(用户不得不手动将其编码为UTF-8或其他东西,而不是那些会使人们熟悉该语言的东西),那么整数就不是这样了。

只记得申报。 无论如何,如果你愿意,可以提出对语言的更改请求(使其成为可选项,或允许其他签名),但我怀疑这不会走得太远。

这是一个惯例。 该方法由命令行解释器使用,这就是它所期望的方式。 此外 – 编译器也期望以这种特定forms签名,并且如果省略参数,则不会编译

string []参数用于保存命令行参数,首先是类名。 此外,如果你调用你的main方法没有string []它只是一个重载而JVM将不会调用该方法。如果你跳过这个签名主方法,JVM将抛出一个exception

因为运行main()函数的代码非常专门针对该签名。 把它想象成某个地方:

 YourClass.main(new String[] { ... }); 

显然,如果主要采取其他措施,这将失败。