我目前正在查看一些不是我编写的java代码。在java项目中有多个包,我看到三个主要方法,它们都在不同的类中。包含main方法的两个类在同一个包中,另一个主要在一个单独的包中。当我执行代码时,似乎在单独的包中单独调用主要方法。
第一个主要方法是
public static void main(String[] args) {
//code written in here seperate package
}
第二个主要方法是
public static void main(String[] args) {
//code written in here same package as third main
}
第三个主要方法是
public static void main(String[] argv) {
//code written in here same package as second main
}
所有三个方法都包含相同的参数,因此不应重载。它们都具有执行不同功能的代码。这怎么可能? java如何知道调用哪个方法?在命令行中通过java jar命令执行此代码时,我没有收到任何错误。
答案 0 :(得分:2)
<强>被修改强>
main
,您还必须提供类名。所以这种方式没有歧义。在您的情况下,使用任何解压缩程序解压缩您的jar文件,并查找名为MANIFEST.MF的文件。该文件将包含主类的名称
请不要尝试更改MANIFEST.MF文件。相反,如果您需要调用另一个main
方法,请使用备用命令行,指定包含main
方法的类,您希望使用类似于以下内容的类:
java -classpath somejar.jar com.example.Foo
Sualeh。
答案 1 :(得分:1)
Java不知道要调用哪种方法。
这是用户在启动JVM时指定的内容。此时,您选择“目标类”;并且JVM将在该类中搜索main方法。换句话说:当你在命令行上调用“java”时,你通过选择一个类名来告诉应该执行哪个main()
方法!
可能是您的应用程序部署为JAR存档;并且该JAR文件中的清单文件也可以指出“目标”类。
答案 2 :(得分:0)
调用静态方法需要在调用期间使用类名。调用main方法也不例外。因此,所讨论的方法是“主要”方法没有区别。 Java中没有限制静态方法如果它们位于不同的类中而被唯一地命名(或重载)。
答案 3 :(得分:0)
你可以在jar创建时定义jar的主类,你必须只设置一个类名,所以没有歧义的范围 第二种方法是使用命令
运行jar文件java -jar jarfilename.jar foo('foo' is class name that has main method)
因此没有歧义范围
答案 4 :(得分:0)
你有很多使用main方法的类。所以,你可以运行这么多类。 要运行特定的类,你必须隐含地提到它:
java -classpath . Foo
其中Foo是您想要用来运行main方法的类。 当您运行没有类名的java时,则使用默认类来运行main方法。默认主类通常在清单中定义。