[java]关于main方法的一切

版权声明:未经博主同意,谢绝转载!(请尊重原创,感谢) https://blog.csdn.net/topdeveloperr/article/details/83991132

Table of Contents

概述

为什么main方法必须是static的?

为什么main方法必须是void的?

为什么main方法必须是public的?

其他


概述

Java中的main方法,是一个java应用程序的入口,无论一个java的应用多么复杂庞大,或是多么的小,只要他是一个可以运行的java程序那么必然就要有一个main方法。main方法的定义格式通常固定如下:

public static void main(String[] args){

}

我们可以在方法签名当中加上final关键字,也可以修改方法的参数的定义方式,但无论如何,一个main方法必须要是static的,返回类型为void的,且是public的。为什么java中的main方法要这么设计和规定呢?下面我们就围绕以下三个问题来分析java中的main方法。

为什么main方法必须是static的?

关于static关键字我们知道的是,static关键字修饰的方法,可以不用通过创建一个实例去访问,而是可以通过类名直接访问。并且static修饰的方法以及变量存储在虚拟机当中的方法区当中,而非堆内存当中。

那么,对于虚拟机来说也是一样的道理。main方法定义为static的,则对于虚拟机来说,在程序启动之后并不需要创建一个实例,就可以去调用这个main方法。

而如果main方法不定义为static的话,虚拟机就需要设计成去new一个包含main方法的类的实例,再去调用这个main方法。这个时候就会存在一个问题,若这个类存在不止一个构造方法,虚拟机是无法决定使用哪个构造方法去创建实例的。

当然,从我个人理解的角度,java虚拟机可以实现为解析非static的main方法,因为它可以规定自己使用默认的构造方法去初始化一个类,然后再去调用main方法即可,只是这相对而言会麻烦一些。从这个层面来讲我们可以认为这是java虚拟机的一个约定。

为什么main方法必须是void的?

void是java的main方法的返回值,理解返回值应该从方法调用者的角度去理解,java的main方法的调用者是java虚拟机,而java虚拟机在启动java程序时,只需要调用main方法,而不需要此方法返回任何的值,因此,main方法被设计为void的。

为什么main方法必须是public的?

Java设计了几个访问修饰符,包括:private,protected,public。 在Java中声明为public的任何方法或变量都可以从该类的外部访问。 而JVM访问main方法显然不是在类的内部访问,因此main方法需要定义为public的方法。

其他

从java诞生的历史背景来看,有的问题就会更好理解。写过c语言程序的话,就会发现java的main方法定义事实上和c语言是十分相似的,而c语言的main方法就是需要用static关键字修饰。从这一角度也可以说Java这门语言在诞生之初本来就是故意设计成C程序员熟悉的。

 

猜你喜欢

转载自blog.csdn.net/topdeveloperr/article/details/83991132