我是java编程的新手,刚刚接触到一个由许多文件组成的java程序,其中只有一个文件具有主函数,而其他文件则没有。我真的不明白为什么我们不在每个java文件中都有一个主函数。
在java中,main()
是程序/应用程序的入口点。有时,在一个应用程序中,我们只需要一个入口点来启动程序,然后再使用其他必要的代码。
但并不是所有的应用程序都需要main()
方法,比如web应用程序或java小程序,其中容器启动应用程序/程序。
每个Java程序都必须有一个入口点,并且该入口点必须具有特定的签名。正如您所注意到的,它是public static void main(String[] args)
之后,作为入口点的类可以创建其他类的实例和/或调用它们的方法,或调用静态类级方法。这些类没有必要有入口点,因为程序已经在Java虚拟机(JVM)中运行(执行代码)。
您会注意到,新手(有时甚至是经验丰富的)程序员在试图运行运行时环境找不到入口点的程序时会犯一个常见错误。例如,Eclipse:Java,没有找到主方法(在本例中,问题是OP有错误的方法签名)。运行库必须找到一些东西来运行。
如果您的代码将由其他代码运行(例如,您正在开发一个库或API,其中包含将用作另一个应用程序的部分的功能),则可能不需要有主方法。如果您使用IDE浏览一些标准库的.jar文件,您应该会发现它们中很少有带有主方法的类——这是因为它们不打算单独运行,而是在另一个应用程序的上下文中运行。
public void main(String args[])
方法是程序的入口点。如果直接运行,它将从main方法开始。然而,并不是您在Java中创建的每个类都是可接受的入口点。事实上,在许多应用程序中,应该只有一个main
方法。通常不需要太多。有些java库根本没有主方法。该代码通常被设计为可以被其他java代码使用,并且通常没有合理的方式来运行它自己。它并不是为了做到这一点而设计的。它是为了帮助其他这样做的程序。
没有main
方法的类用于:a)为其他java程序提供功能(例如依赖项),b)为通过main
方法调用的程序提供额外功能。
下面是几个示例文件来说明第二个。
MainExample.java
public class MainExample{
public static void main(String args[]){
OtherClass other = new OtherClass()
other.doExpensiveComputation1();
other.doExpensiveComputation2();
}
}
其他类别.java
public class OtherClass{
public void doExpensiveComputation1(){
//do stuff here
}
public void doExpensiveComputation2(){
//do other stuff here
}
}
现在,您可能会问,"难道我不能在主类中编写那些方法吗?"。在某些情况下,答案可能是肯定的,但对于更复杂的代码,通常不是。在某些情况下,这是不切实际的,因为它把主类搞得太乱了,无法跟踪。跟踪将类保存在不同文件中的代码要容易得多。
Java程序的执行始终从Main方法开始。具有main方法的类是程序的入口点,从那里可以获得所需的其余功能
如果需要,可以在每个java文件中都有main方法,它将充当程序的多个入口点。