当java中有多个主要方法时会发生什么?

时间:2015-04-14 14:54:59

标签: java

我目前正在查看一些不是我编写的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命令执行此代码时,我没有收到任何错误。

5 个答案:

答案 0 :(得分:2)

<强>被修改

  1. 要在Java中调用main,您还必须提供类名。所以这种方式没有歧义。在您的情况下,使用任何解压缩程序解压缩您的jar文件,并查找名为MANIFEST.MF的文件。该文件将包含主类的名称 请不要尝试更改MANIFEST.MF文件。相反,如果您需要调用另一个main方法,请使用备用命令行,指定包含main方法的类,您希望使用类似于以下内容的类: java -classpath somejar.jar com.example.Foo
  2. 有关覆盖和重载静态方法的答案,请参阅Can I override and overload static methods in Java?
  3. 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方法。默认主类通常在清单中定义。