Java中main()方法的格式为什么是固定不变的?

在《Java main()方法》一节中提到 main() 方法定义必须是“public static void main(String[] 字符串数组参数名)”,本节告诉大家为什么在 Java 中定义 main 方法的语法是不可改变的。

1)public :这个字段决定了方法是否可以被外部方法调用。我们知道C语言里面的函数是运行操作系统环境中的,可以认为操作系统一个大的方法,这个方法调用了C语言的 main()。Java 中也是同样的道理,只不过 Java 的 main 方法是跑在 JVM 中的。如果不限定 public,JVM 就不能调用 main 方法。

注意:在 Java SE1.4 以前是不强制 main 方法为 public 的。当 main 方法不是 public 时,有些版本的 Java 解释器也可以执行 Java 应用程序。Java SE1.4 及以后的版本中强制 main 方法是 public。

面向对象的语言叫方法,例如 Java。面向过程的语言叫函数,例如C语言。实际上方法就是函数,函数就是方法,只是在不同的语言不同的称呼而已。

2)static:在C语言中,所有的函数都可以被直接调用,main 函数相当于全局方法,没有类的概念,但在 Java 中一般先要创建一个类的对象,再通过对象调用方法,但是在执行 main 方法之前创建一个对象显然是不可能的,因为 JVM 规定 main 方法为入口方法,从 main 开始执行。static 关键字就解决了这个问题,static 关键字修饰的方法可以视为类方法,不需要创建对象就可以直接调用该方法。

3)void:由于 Java 的主方法是栈中最底层的方法,所以并不存在能够接收的值,没有能接收 main 方法的返回值,所以使用 void。

为什么 Java 不能像C语言,C++ 那样返回 int 型值?

C语言的 main 函数的调用过程:首先,程序进入到入口方法之前,是发生了很多事情的。操作系统的安排,启动运行时库,运行时库再初始化好环境,然后启动你的入口函数,你的程序才正常的运行起来。等你的程序运行结束后,就退回到运行时库,然后再退回到操作系统,然后系统再调度其他程序执行。因为 main() 不是由操作系统直接调用,所以返回类型不一样也是可以理解的。可以认为运行时库就是操作系统和 main 函数的中间联系人,在C语言中由运行时库直接调用 main 函数,所以 main 函数的返回值也是运行时库接收。

在 Java 中,可以认为是操作系统→JVM→main 方法这样的调用过程,JVM 直接调用 main 方法,所以如果 main 方法有返回值,即 JVM 接收。但是 JVM 被设计为不接受任何返回值,所以 main 方法不能有返回值,只能 void。

4)String[]:类似于C语言中的参数 char**和int,Java 中数组可以记录数目,所以省去了 int 类型的参数来表示字符串个数。

因此,main() 方法定义必须是:“public static void main(String[] 字符串数组参数名) ”,这是 Java 的规范。