为什么Java中需要String [] args?

时间:2009-11-04 06:57:35

标签: java

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

java Print "Hello, World!"

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

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

6 个答案:

答案 0 :(得分:31)

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

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

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

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

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

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