[java] 关于main方法的一切

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关键字修饰的方法,可以不用通过创建一个类的实例,而是直接通过类名直接去访问。例如下面代码中调用methodA这样:

public class TestA{
    public static void methodA(){
         
    }

    public void methodB(){
       TestA.methodA();
    }
}

并且, 从内存角度来说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程序员熟悉的。

 

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值