1、 voidhtml
以下,像C, C++同样,将返回值类型改成int,再返回一个0,虽然编译经过,可是运行时会报错。java
找到一种可理解的解释:方法的反作用和返回值类型。(http://www.cnblogs.com/huanmin/p/6429778.html)程序员
一个方法的执行,若是在返回一个值以外还致使某些外部“状态”发生变化,则称该方法产生了反作用。这里所谓“状态”发生变化,能够是实例域或静态变量被修改。函数
因为Java的主函数是栈中最底层的函数,因此并不存在可以接收的值(没有谁能接收main的返回值),因此使用void。spa
但是为何Java不能像C, C++那样返回int型值?操作系统
找到描述C语言的main函数的调用过程:首先,咱们的程序进入到入口函数以前,是发生了不少事情的。操做系统的安排,启动运行时库,运行时库再初始化好环境,而后启动你的入口函数,你的程序才正常的运行起来。等你的程序运行结束后,就退回到运行时库,而后再退回到操做系统,而后系统再调度其余程序执行。(https://www.cnblogs.com/deanyuton/p/8227733.html).net
由于main()不是由操做系统直接调用,因此返回类型不同也是能够理解的。能够认为运行时库就是操做系统和main函数的中间联系人,在C语言中由运行时库直接调用main函数,因此main函数的返回值也是运行时库接收。在Java中,能够认为是操做系统→JVM→main函数这样的调用过程,JVM直接调用main函数,因此若是main函数有返回值,即JVM接收。可是JVM被设计为不接受任何返回值,因此main函数不能有返回值,只能void。设计
可是JVM为何不接受返回值?htm
http://www.javashuo.com/article/p-ttsuzfnp-nh.html(装载JVM)对象
https://www.cnblogs.com/iceAeterNa/p/4876940.html (深刻虚拟机)
2、 public
一、去掉public关键字
2、public关键字改成protected
三、public改成private
编译警告:The method main(String[]) from the type TestMain is never used locally
public是函数的权限,决定了是否能够被外部函数调用,若是改成private,则只能是该main函数所在类的方法能够调用,在其余类中不可见,protected规定子类和同一个包类可用,可是调用main函数的函数所在包和main函数所在包确定不在同一个包内,因此必须是public。C里面的函数是运行在操做系统环境中的,注意是运行时库调用main函数,可是整个C代码及运行时库都直接在操做系统中运行,可是Java的代码是运行在JVM中的,若是不限定public,JVM就没法调用main函数。(https://blog.csdn.net/echostream/article/details/44039169)
可是在Java SE1.4之前是不强制main函数为public的。当main方法不是public时,有些版本的java解释器也能够执行java应用程序。有个程序员报告了这个bug. 若是感兴趣能够查一下这个bug号码4252539.这个bug被标明“关闭”,不予修复。Sun公司的工程师解释说:java虚拟规范并无要求main方法必定是public。 好在,这个问题在 java SE1.4及之后的版本中强制main方法是public 最终的到了解决。(http://www.javashuo.com/article/p-uokhlhzh-nh.html)
3、 static
在C语言中,全部的函数均可以被直接调用,main函数至关于全局函数,但在Java中通常先要建立一个类的对象,再经过对象调用函数,可是在执行main函数以前建立一个对象显然是不可能的,由于JVM规定main函数为入口函数,从main开始执行。static关键字就解决了这个问题,static关键字修饰的方法能够视为类方法,不须要建立对象就能够直接调用该方法。
4、 main方法重载
main函数也能够重载,只要知足重载的条件便可。