java main函数 静态_为什么java的main方法必须是静态的

为什么java的main方法必须是静态的

这个是我最近编程想到的问题,查了一些资料,这里总结一下。

从Java程序运行的角度来说,在java程序运行的时候,JVM会去这个类对应的class文件中查找public static void main (String[] args) 进行运行,main方法的运行是由一个特定的线程main进行的,程序会一直运行直到main线程结束或者non-daemon线程终止。所以,当你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException,意味着异常来自于main线程。如果找不到main方法的话,它就会抛出NoSuchMethodError:main异常,并停止执行。

但是程序运行角度只是表明,更深层次来说,正因为main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例,否则由于创建main类的实例时,构造器可以被重载,JVM就没法确定先调用哪个方法。

此外,由于main方法是公共的,也就是我们要作为类方法进行调用的,所以要设置为public。又因为main方法的返回值没有意义,所以设置为void.

正是因为main方法是静态的,所以所有它直接调用的方法也必须是静态的,相应的,这些方法中使用的变量也要是静态变量。而“类的静态成员变量必须初始化,全局静态变量如果没有初始化会初始为0,函数中的静态变量会在第一次运行函数时初始,而且仅初始一次”,所以就要求我们必须进行变量的初始化。

如果要使用非静态方法或者非静态变量怎么办?把main方法抽离出来、创建一个启动类就好了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值