我有下课。
public class Test {
public static void main(Integer[] args) {
System.out.println("This is not a main");
}
public static void main(String[] args) {
System.out.println("This is the main");
}
}
这里有两个main
方法,它们接受Integer[]
和String []
作为输入参数。我的问题是JVM
如何总是加载第二个方法作为这个类的主要方法。为什么总是将输入参数视为array
的{{1}}?
答案 0 :(得分:14)
因为这就是Java一直在寻找的东西。 Java Language Specification, Section 12.1.4:
方法main必须声明为public,static和void。它必须指定一个形式参数(第8.4.1节),其声明的类型是String
的数组
答案 1 :(得分:5)
因为字符串是您传递到命令行的内容。
来自
的45
myProgram.exe 45
不是整数。它是一个包含字符4
和5
恰好可以使用"45"
之类的字符串来表示整数。反过来做这件事要困难得多。(至少对用户而言)
答案 2 :(得分:4)
由于命令行参数始终为Strings
。
答案 3 :(得分:2)
我们总是输入命令行参数作为字符串。 :)
答案 4 :(得分:1)
除了其他人提到的内容之外,您还可以使用var-args来实现String数组。
public static void main (String ...a)
答案 5 :(得分:0)
有关详细信息,请查看此文档
http://docs.oracle.com/javase/tutorial/getStarted/application/
还
Using int Instead Of String: public static void main (int[] args)
答案 6 :(得分:0)
正如其他人所说的那样,main
方法将始终由JVM调用,并带有一个带字符串数组的重载。如果您愿意,您可以自由地对该方法进行其他重载。您甚至可以在代码中自己调用它们。只是VM专门寻找一个带有字符串数组的重载。
答案 7 :(得分:0)
这是JVM认可的唯一签名 THE MAIN METHOD
public static void main(String[] args)
您可以根据需要使用尽可能多的重载主方法但是只有具有上述签名的方法才会被jvm调用
答案 8 :(得分:0)
命令行参数是main()
方法的参数,它们在运行时传递给它。由于Java仅使用String
类型的命令行参数,因此JVM忽略了传递Integer的另一个main()
方法。
答案 9 :(得分:0)
java中main方法的签名是public static void main(String[] args) {}
,这就是JVM的类加载器在程序开始时加载的内容。除非你在main中手动执行,否则不会调用带有Integer参数的另一个main。尝试修改你的代码,如下所示,你会注意到什么都不会被调用,你的程序将不会打印任何东西。
public class Test {
public static void main(Integer[] args) {
System.out.println("This is not a real main so nothing gets printed");
}
}
顺便说一下,你可以用你想要的任何参数编写一个重载的main方法。只要参数不是 String []或String ... ,它们都不会开始滚动程序。