【问题标题】:Why only String[] args in java instead of Object[] args?为什么 java 中只有 String[] args 而不是 Object[] args?
【发布时间】:2013-12-11 01:19:24
【问题描述】:

在java中,根据Java Language Specification 12.1.4,main方法应该声明如下:

public static void main(String[] args){
     //code of program
}

通过使用String[] args,我们可以获得命令行参数。有时需要将这些命令行参数转换为适当的类型。假设如果您提供了任何数字 123 作为参数,并且您想将其转换为 int,那么我们可以使用以下转换方法之一:

int n1=Integer.valueOf(args[0]);
//or
int n2=Integer.parseInt(args[0]);

但是,如果 java 可以提供使用 Objects[] args 而不是 String[] args,那么我们可以轻松地从一种类型转换为另一种类型,例如,转换如下:

public static void main(Object[] args){
     int n1=(Integer)args[0];
}

我不明白为什么 java 使用 String[] args 而不是 Object[] args

【问题讨论】:

标签: java command-line-arguments command-prompt


【解决方案1】:

Java 的设计考虑到了可移植性,因此 Java 程序可以被不同的操作环境调用。让环境将 Java 对象传递给 main 会对调用者系统施加过多的限制,因为该系统的任务是“理解”输入并将其转换为 Java 对象。

另一方面,字符串是通用的:所有操作环境都有它们。因此,Java 规范需要字符串,因为知道您的 Java 程序能够比外部环境更好地处理和理解它们。

【讨论】:

    【解决方案2】:

    这很简单,因为args 来自外部 java 环境,它来自操作系统,因此它不能创建 Java 对象,它只能传递字符串

    要从控制台调用 java 程序,应该是这样的:

    c:\java MyProgram 123
    

    Java 无法知道操作系统正在传递一个对象,它只是一个字符串。

    【讨论】:

      【解决方案3】:

      每当您从Console 阅读时,默认情况下都是String,这就是他们将其设为String[] array 的原因。

      如果你使用:

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.print("Enter String");
      String str = br.readLine();
      

      字符串变量str 包含字符串,因为br.ReadLine() 为您提供字符串

      【讨论】:

        【解决方案4】:

        因为您不能通过命令行参数传递对象。相反,很自然地将传递的参数解释为Strings

        【讨论】:

          【解决方案5】:

          public static void main(String[] args)是执行Class文件$java MyClass input1 input2时运行的main方法。

          【讨论】:

            【解决方案6】:

            因为操作系统不会将变量类型的参数传递给 JVM。如果您有Object[] args,那么没有操作系统,JVM 就无法真正推断出它们的类型。这也是“标准”(例如祖先的 C/C++)Main function 的一般合同(当然是在 Java 中)。

            【讨论】:

              【解决方案7】:

              可能是因为“String”是一个字符序列数组,它占用连续的内存,可以使用标准键盘输入。否则 main 方法将如何处理类型转换。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-09-03
                • 2015-09-06
                • 1970-01-01
                • 2013-10-20
                • 2011-08-23
                • 2014-02-22
                • 2012-10-21
                • 1970-01-01
                相关资源
                最近更新 更多