public static void main( String arg[] )
在上面的陈述中,我可以使用int
数组代替String
数组吗?如果我不在括号中添加任何内容,即如果我使用空括号,会发生什么?
答案 0 :(得分:5)
使用您提到的更改编译代码时,它将成功编译。当您尝试运行时,JVM将使用String数组作为参数检查main方法。由于没有使用String数组作为参数的main方法,因此您的代码将无法成功执行并抛出NoSuchMethodError。
答案 1 :(得分:3)
不,我认为你不能使用int数组而不是String数组。因为操作系统使用参数int
来传递一个整数值,指定用户输入的命令行参数的数量。所以你必须遵循以下模式。
public static void main(String[] args)
public static void main(String args[])
答案 2 :(得分:2)
代码将编译但不会运行。
string []的原因是人们可以通过命令行传递参数。
答案 3 :(得分:2)
我不确定Int array
你的意思,但不,你不能。方法签名需要与public static void main(String[] args)
完全匹配。你唯一可以改变的是参数的名称。方法的名称,参数类型,可见性(公共与私有等)是运行时用于查找方法本身的内容。如果它不符合该签名,则它不是入口点方法,因此在您的应用程序启动时不会被调用。
但是,应该注意的是,您所建议的内容将在没有问题的情况下进行编译。在您尝试运行该应用程序之前,不会出现这些问题。
答案 4 :(得分:1)
编译器将接受但运行时将为您提供NoSuchMethodError
答案 5 :(得分:0)
主要方法是java应用程序的入口点。如果您查看java language specification,请具体说明:
必须声明方法main 公共,静态和无效。它必须 接受一个单一的参数 字符串数组。这种方法可以 声明为
public static void main(String[] args)
或
public static void main(String... args)
传入的String []数组包含已由启动的应用程序传入的任何命令行参数。然后,您可以阅读它们并根据需要进行转换。
答案 6 :(得分:0)
如果您希望获取数字而不是字符串,请使用此方法
public static void main(String[] args) {
int[] numbers = new int[args.length];
for(int i = 0; i < args.length; i++) numbers[i] = Integer.parseInt(args[i]);
}
处理例外是读者的练习。
其他答案很好地解释了“为什么”的其他问题。
答案 7 :(得分:0)
不,它会产生类似的运行时错误 在课堂测试中未找到的主要方法,请将主要方法定义为: public static void main(String [] args)
JAVA对主方法签名更具体,它将您的方法视为一个类中的一般方法。
答案 8 :(得分:0)
如果要将String参数从主静态方法转换为int,请执行以下操作:
public class StringToIntArgs {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] anIntArray = new int[args.length];
for(int i = 0; i < args.length; ++i) {
anIntArray[i] = Integer.valueOf(args[i]);
System.out.println(((Object)anIntArray[i]).getClass().getName());
}
}
}
现在使用以下参数编译并运行Java代码:
C:\Users\smith\Documents\programming\java>javac StringToIntArgs.java
C:\Users\smith\Documents\programming\java>java StringToIntArgs 1 2 3 4 5
java.lang.Integer
java.lang.Integer
java.lang.Integer
java.lang.Integer
java.lang.Integer