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

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

为什么必须在Java中初始化局部变量(包括基元)?为什么在实例变量的情况下不相同?



慕盖茨4494581
浏览 488回答 3
3回答

守候你守候我

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

HUH函数

在Java中,如果未手动初始化类和实例变量,则它们将采用默认值(null,0,false)。但是,局部变量没有默认值。除非为局部变量赋值,否则编译器将拒绝编译读取它的代码。恕我直言,这导致了这样的结论:在声明它时,初始化一个带有一些默认值的局部变量(如null,后面可能会导致NullPointerException)实际上是一件坏事。请考虑以下示例:Object&nbsp;o;if&nbsp;(<some&nbsp;boolean&nbsp;condition>) &nbsp;&nbsp;o&nbsp;=&nbsp;<some&nbsp;value>;else &nbsp;&nbsp;o&nbsp;=&nbsp;<some&nbsp;other&nbsp;value>;System.out.println(o);o使用null&nbsp;的初始化是完全没有必要的,因为Java编译器在编译时检查任何代码路径o在读取变量之前初始化(使用null或某些非null值)。这意味着,System.out.println(o);如果您要o在上面的代码片段中注释掉变量的两个初始化中的任何一个,编译器将拒绝编译该行。这适用于Java,也许仅适用于Java。我不知道像C#这样的语言。但是,在旧的C(也许是C ++)中,仍然建议在声明变量AFAIK时始终初始化变量。这种“老派”编程语言可能是这样的原因,即始终初始化变量的建议出现在书籍和关于Java等现代语言的讨论中,其中编译器会跟踪变量是否已初始化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java