相信99%的程序员都是从“hello,world”开始学java的吧,当你们第一次面对hello,world时,有没有注意到这一行是写在main方法里的呢?既然谈到这里,那么,又有多少人真正了解main方法呢?今天就来说说这个。

什么是main方法?

main()方法是这么定义的:public static void main(String args[])。没有之一,这是Java里的规范,不要问为什么。非要为什么要这么定义,这个和JVM的运行有关系,后面会说到。

main方法为什么必须是静态的?

当一个类中有main()方法,只要执行“java 类名”就会启动JVM去执行该类中的main方法。由于JVM在运行Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用,因此,main方法前面需要使用public static进行修饰(这也就解答了上述main方法的定义问题)。




java的main可以没有参数吗 java程序可以没有main函数吗_java main方法


main方法是否一定要参数?

答案是肯定的,main方法中必须有一个输入参数,类型为字符串数组(即String[]),这个也是java的规范,同样不要问为什么。至于参数名可以自行定义,不强制使用args。(之所以大家都使用args,其实是习惯问题)。

main方法的返回类型是否可变?

不可以,main方法的返回类型就是空(void),没允许用其他任何类型返回。

重点来了,一个java类中可以有几个main方法?

答案是:很多个!是不是很惊讶?有人要说了,平时只要多写一个就编译报错了,怎么可能有多个呢?

其实,这里有个重点、重点、重点,重要的事情说三遍,原因在于main方法支持重载,代码示例直接告诉你事实!


java的main可以没有参数吗 java程序可以没有main函数吗_java main函数_02

图1


图1编译就出错了,原因在于:main(java.lang.String[]) is already defined in MainDemo。


java的main可以没有参数吗 java程序可以没有main函数吗_java main函数_03

图2


java的main可以没有参数吗 java程序可以没有main函数吗_java main方法_04

图3


再看图3,编译也通过了,但是运行就会出错,原因在于:Exception in thread "main" java.lang.NoSuchMethodError: main,即JVM只认"public static void main(String[] args)"形式的main函数!