我的印象是主要方法必须有形式“公共静态无效的主要(字串[] args){}”,你不能错过INT []参数。
但是,在Windows命令行,运行以下.class文件时,既接受int和字符串作为参数。
例如,使用这个命令将给出输出“纵梁”:“的java IntArgsTest纵梁”
我的问题是,为什么呢? 为什么会这样的代码接受一个字符串作为没有错误的说法?
这里是我的代码。
public class IntArgsTest
{
public static void main (int[] args)
{
IntArgsTest iat = new IntArgsTest(args);
}
public IntArgsTest(int[] n){ System.out.println(n[0]);};
}
进入主法,使用的JVM启动程序的人,一切都是一个字符串,应有尽有。 它可以像INT 1,但它确实为字符串“1”,这是一个很大的区别。
现在,你的代码,如果你尝试运行它时会发生什么? 当然,因为它是有效的Java,但你的主要方法签名不匹配由JVM需要为程序的起点的话,会编译就好了。
为了您的代码运行,你需要添加一个有效的主要方法一样,
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将查找main
方法有确切的签名public static void main(String[])
该main
您已经定义方法只不过是另一种方法的类。
我没有访问Windows现在,但让我尝试在一段时间。 我曾尝试在Fedora,当然我有以下异常:
Exception in thread "main" java.lang.NoSuchMethodError: main
请注意,类将因为上述的编译细说原因。
更新:我在Windows 7测试,结果是一样的。 我很惊讶你怎么说的吧为你工作。
此代码将不会运行。 而代码编译(因为你并不需要一个主编译),当您尝试运行它,你会得到一个"Main method not found"
错误。
更妙的是,当我跑它,它说:
"please define the main method as: public static void main(String[] args)
此代码包含不公开的作品静态无效的主要(INT []参数)。 因为JVM需要的参数值作为一个字符串参数。 它不采取任何int参数。 因此,如果我们想要一个int参数意味着我们必须将字符串参数转换为整数参数。 运行该代码是必需的有效方法主要 (例如: 公共静态无效主要(字符串ARGS []))