public static void mian(String[]args)剖析

我们都知道java里面 main() 方法定义必须是“public static void main(String[] 字符串数组参数名)”,那
到底是为什么呢?

首先我们得知道main()是程序的入口,Java中所有的函数必须属于类,没有什么全局函数一说,因此main函数不能是全局成员,必须是某个类的成员。

既然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 函数相当于全局方法,没有类的概念,因为 JVM 规定 main 方法为入口方法,从 main 开始执行。但在 Java 中一般先要创建一个类的对象,再通过对象调用方法,但是在执行 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 的规范。
原因就是它是一个类的成员函数,同时又是JVM程序的入口,那肯定是满足

  1. 类未创建时就能JVM就能调用!(权限及已经分配内存)——public static
  2. main方法在栈的最底层,没有其他函数能接受其返回值,而且JVM被设计为不接受任何返回值——void
  3. 为了解决命令行参数的问题,又java的数组可以记录长度——(String []args)

所以

public static void main(String[]args){};//是java的规范

注意我们这里是说必须要为public,static,及void,加一个数组命令行参数!保证这些满足的形式都行。
如一下的形式都可以:
在这里插入图片描述

发布了93 篇原创文章 · 获赞 65 · 访问量 5479

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/105419550