Java 中的多个 main() 方法

2022-09-03 16:22:00

我想知道创建额外的main方法会对你的代码产生什么影响。

例如

public class TestClass {
    public static void main (String[] args){
        TestClass foo = new TestClass();
    }
}

程序最初启动后,将创建foo,并且其中将有另一个公共main方法。这会导致任何错误吗?


答案 1

它不会导致任何错误。仅仅因为初始化对象,并不意味着 main 方法被执行。Java最初只会调用传递给它的类的主方法,例如

>java TestClass

但是,执行如下操作:

public class TestClass
{
 public static void main (String[] args)
 {
  TestClass foo = new TestClass();
  foo.main(args);
 }
}

public class TestClass
{
 public TestClass()
 {
   //This gets executed when you create an instance of TestClass
   main(null);
 }

 public static void main (String[] args)
 {
  TestClass foo = new TestClass();
 }
}

将导致 一个 ,因为您正在显式调用 TestClass 的主方法,然后它将一次又一次地调用 main 方法,一次又一次地调用 main 方法,并且....StackOverflowError

当有疑问时,只需测试一下:-)


答案 2

main 方法是静态的,这意味着它属于类而不是对象。因此,该对象内部根本不会有另一个 main 方法。

你可以在对象的实例上调用 main 方法,但如果你这样做,它实际上只是调用 TestClass.main() 的另一种方式(包括我在内的许多人都不愿意在对象的实例上调用静态方法。

如果您在同一程序中引用多个主要方法,那么这也不是问题。只需指定主类并执行其main方法即可启动程序(在jar文件的情况下,这是清单文件中的main-class属性。