在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
?
答案 0 :(得分:7)
Java在设计时考虑了可移植性,因此Java程序将由不同的操作环境调用。让环境将Java对象传递给main
会对调用者系统施加太多限制,因为该系统将具有“理解”输入并将其转换为Java对象的任务。
答案 1 :(得分:3)
这很简单,因为args
来自外部java环境,它来自操作系统,因此无法创建Java对象,它只能传递字符串
要从控制台调用java程序,它将类似于:
c:\java MyProgram 123
java无法知道操作系统正在传递一个对象,它只是一个字符串。
答案 2 :(得分:2)
每当您从Console
阅读时,默认情况下String
就是String[] array
的原因。
如果您使用:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter String");
String str = br.readLine();
字符串变量str
by contains String,因为br.ReadLine()
为您提供字符串
答案 3 :(得分:1)
因为您无法通过命令行参数传递对象。相反,将传递的参数解释为Strings
。
答案 4 :(得分:1)
public static void main(String[] args)
是执行类文件$java MyClass input1 input2
时运行的主要方法。
答案 5 :(得分:1)
因为操作系统没有将变量类型的参数传递给JVM。如果你有Object[] args
,那么没有操作系统,JVM就无法真正推断出它们的类型。它也是“标准”的一般合同(当然是Java)(例如祖先的C / C ++)Main function。
答案 6 :(得分:1)
可能是因为“String”是一个char序列数组,它带有连续的内存,可以使用标准键盘输入。否则main方法将如何处理类型转换。