为了账号安全,请及时绑定邮箱和手机立即绑定

为什么必须在Java中初始化局部变量(包括基元)?

为什么必须在Java中初始化局部变量(包括基元)?

慕盖茨4494581 2019-07-30 16:00:37
为什么必须在Java中初始化局部变量(包括基元)?为什么必须在Java中初始化局部变量(包括基元)?为什么在实例变量的情况下不相同?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

好吧,在局部变量的情况下,很清楚“之前”是什么意思,因为声明(在方法中)和引用之间的程序流是顺序的。如果在方法之外声明的字段,编译器永远不知道将要使用哪个代码,因此它不能生成错误,因为可能某些其他方法在使用之前初始化该字段。


查看完整回答
反对 回复 2019-07-30
?
HUH函数

TA贡献1836条经验 获得超4个赞

在Java中,如果未手动初始化类和实例变量,则它们将采用默认值(null,0,false)。但是,局部变量没有默认值。除非为局部变量赋值,否则编译器将拒绝编译读取它的代码。恕我直言,这导致了这样的结论:在声明它时,初始化一个带有一些默认值的局部变量(如null,后面可能会导致NullPointerException)实际上是一件坏事。请考虑以下示例:

Object o;if (<some boolean condition>)
  o = <some value>;else
  o = <some other value>;System.out.println(o);

o使用null 的初始化是完全没有必要的,因为Java编译器在编译时检查任何代码路径o在读取变量之前初始化(使用null或某些非null值)。这意味着,System.out.println(o);如果您要o在上面的代码片段中注释掉变量的两个初始化中的任何一个,编译器将拒绝编译该行。

这适用于Java,也许仅适用于Java。我不知道像C#这样的语言。但是,在旧的C(也许是C ++)中,仍然建议在声明变量AFAIK时始终初始化变量。这种“老派”编程语言可能是这样的原因,即始终初始化变量的建议出现在书籍和关于Java等现代语言的讨论中,其中编译器会跟踪变量是否已初始化。


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号