相信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方法的定义问题)。
main方法是否一定要参数?
答案是肯定的,main方法中必须有一个输入参数,类型为字符串数组(即String[]),这个也是java的规范,同样不要问为什么。至于参数名可以自行定义,不强制使用args。(之所以大家都使用args,其实是习惯问题)。
main方法的返回类型是否可变?
不可以,main方法的返回类型就是空(void),没允许用其他任何类型返回。
重点来了,一个java类中可以有几个main方法?
答案是:很多个!是不是很惊讶?有人要说了,平时只要多写一个就编译报错了,怎么可能有多个呢?
其实,这里有个重点、重点、重点,重要的事情说三遍,原因在于main方法支持重载,代码示例直接告诉你事实!
图1
图1编译就出错了,原因在于:main(java.lang.String[]) is already defined in MainDemo。
图2
图3
再看图3,编译也通过了,但是运行就会出错,原因在于:Exception in thread "main" java.lang.NoSuchMethodError: main,即JVM只认"public static void main(String[] args)"形式的main函数!