局部变量和成员变量的初始值问题

引言

大家都知道,在java中,成员变量是可以不用给初始值的,默认就有一个初始值。而局部变量,必须显示给予一个初始值,否则编译无法通过。大家在学习的时候,一般是直接把这个结论直接记下,很少去考虑原因。

所以,这是为什么呢?

正文

比如


img_bf1074fdb15413bd451873effb3f35a5.png

这段代码是会出现如下编译异常的


img_eb1177bddf52f9055f984f485e19f075.png

但是,像下面这么写就不会


img_1658f33e5f53a30187216630cf5e813e.png

javac这么设计的原因,不是因为推断不出局部变量的初始值,而是出于严谨性的考虑。

成员变量

无法确定你的调用顺序,例如,你可以这么调


img_39e8bccc62deb3f4b601ebf4161bc7f0.png

也可以这么调


img_31206f1691be396c8cf494b9e1ea65b8.png

编译器无法确定name的初始值,于是给了一个初始值。真正的值,交给jvm在运行时期处理。

局部变量

可以明确你的调用顺序,我相信应该没人会像下面这么写


img_33c4e83d7eea8d7a15a418ad6c6aea99.png

在局部变量中,必然是先声明一个变量,再进行赋值。于是,java的编译器觉得,既然你肯定是先声明一个变量,再调这个变量了。那就在声明的时候,就把初始值给我吧。不是我不能推断你的初始值,而是让你在声明的时候就把初始值给我,我是为你好,帮你减少代码出错的可能性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值