java程序的main函数

一、问题

      java程序(工程)一定要有main函数吗???

答:如果是单纯的javaApplication(java应用程序)应该有main()函数作为入口,但是像jsp或者是applet等都是不需要main()函数的。

二、补充知识

       java程序可以不要main()函数这个说法其实不“准确”。下面说说为什么不太准确。

1、普通java程序

      对于普通java程序来说, java有一个固定形式的主函数,其形式为:public static void main(String[ ] arg)。

       首先,main方法是JVM(java虚拟机)自动调用,JVM调用main方法的位置自然不会在某个类中、或某个包中,因此只有当main方法在公有级别上时,才对JVM可见,所以mian方法需要public修饰,同理,main方法所在的类也需要public修饰符。

        其次,由于main方法是所有程序的入口,也就是main被调用时没有任何对象创建,不通过对象调用某一方法,只有将该方法定义为静态方法,所以main方法是一个静态方法,既需要static修饰。

         最后,JVM对于java程序已经是最底层,由它调用的方法的返回值已经没有任何地方可去,因此,main方法返回值为空,既需用void修饰。

        因此Java的main函数只能写作这样的形式:public static void main(String[ ] arg)。

2、特殊java程序

      Java程序不一定需要main函数,那么不带main函数的Java代码如是怎样定义的呢。其实用到的知识就是类的静态:

public class Main_No{
	static{
		System.out.println("hello,Java");
		System.exit(1);//加这句话的目的也是为了退出运行环境,否则会报错
	}
}

 3、jsp或者是applet等都是不需要main()函数的

     这句话的理解:WEB项目放在tomcat, weblogic, websphere容器里面,在启动这些服务器的时候,就已经启动了这些服务器main的方法,所以web程序就不需要main()方法启动了。

     举个例子—— tomcat的主类是BootStrap类,也是以此类的main方法作为入口启动的,web项目部署到tomcat服务器之后,启动tomcat,tomcat从它自己的主函数开始运行,就一直在跑着,等到请求过来的时候。tomcat接受到请求,它直接从项目文件中把那个没有主函数的应用拉进来,就这么直截了当的执行了其中的方法。相当于只有一个main方法,其他的都是等请求过来的时候,根据请求调用相应的方法。

 三、总结

      main()函数是JVM运行时能识别的一种固定形式,一般程序是需要的,静态代码块随类加载的特性看似打破了mian()函数必须存在的铁律,但其实它根本就不构成一个java程序。对于web项目来说,mian函数在tomcat, weblogic, websphere等容器中了。所以严格意义上来说:java程序需要一个main()函数。

猜你喜欢

转载自blog.csdn.net/weixin_40449300/article/details/85713453