我的印象是main方法必须具有"public static void main (String[] args){}"的形式,你不能传递int[]参数。
但是,在 windows 命令行中,当运行以下 .class 文件时,它接受 int 和字符串作为参数。
例如,使用此命令将给出输出"stringers":"java IntArgsTest stringers"
我的问题是,为什么?为什么这段代码会接受一个字符串作为参数而没有错误?
这是我的代码。
public class IntArgsTest
{
public static void main (int[] args)
{
IntArgsTest iat = new IntArgsTest(args);
}
public IntArgsTest(int[] n){ System.out.println(n[0]);};
}
传递给main方法的所有内容,JVM用来启动程序的方法,都是字符串,所有内容。它可能看起来像 int 1,但它实际上是字符串"1",这是一个很大的区别。
现在有了你的代码,如果你尝试运行它会发生什么?当然,它可以很好地编译,因为它是有效的Java,但是您的主要方法签名与JVM作为程序起点所需的签名不匹配。
要运行代码,您需要添加一个有效的 main 方法,例如,
public class IntArgsTest {
public static void main(int[] args) {
IntArgsTest iat = new IntArgsTest(args);
}
public IntArgsTest(int[] n) {
System.out.println(n[0]);
};
public static void main(String[] args) {
int[] intArgs = new int[args.length];
for (int i : intArgs) {
try {
intArgs[i] = Integer.parseInt(args[i]);
} catch (NumberFormatException e) {
System.err.println("Failed trying to parse a non-numeric argument, " + args[i]);
}
}
main(intArgs);
}
}
然后在调用程序时传递一些数字。
好吧,你可以使用任何名称main
具有任意数量的参数的方法。 但是 JVM 将查找具有确切签名public static void main(String[])
的 main
方法。
您定义的main
方法只是该类的另一个方法。
我现在无法访问Windows,但让我尝试一下。 我确实尝试过 Fedora,当然我得到了以下例外:
Exception in thread "main" java.lang.NoSuchMethodError: main
请注意,由于上述原因,该类可以很好地编译。
更新:我在Windows 7上进行了测试,结果相同。 我很惊讶你说它对你有用。
此代码实际上不会运行。 当代码编译时(因为你不需要 main 来编译),当你尝试运行它时,你会得到一个"Main method not found"
错误。
更好的是,当我运行它时,它说
"please define the main method as: public static void main(String[] args)
此代码包含公共静态 void main (int[] args),它不起作用。因为 JVM 将参数值作为字符串参数。它不需要任何 int 参数。因此,如果我们想要一个 int 参数意味着我们必须将字符串参数转换为整数参数。要运行此代码,需要有效的 main 方法(例如:public static void main(String args[]))