为什么不在类中初始化原始字段是一种不好的做法?

Pwn*_*012 5 java primitive initialization

Java原语在O的内存中总是有一个默认值(布尔值为假= 0).那么,如果由于这种机制甚至具有预定义值,为什么不对它们进行初始化被认为是一种不好的做法呢?在数组中,即使初始化了一个新的int [8],其中的所有值都没有真正初始化,但这并不是不赞成的......

Ced*_*ach 5

通过显式定义一个值,很明显,您打算在执行该点使用该值。如果不是这样,另一位读者可能会把它解释为好像您忘记初始化该变量,或者您不在乎该点(稍后将其设置在其他位置)。

换句话说,它是某种隐式文档。通常,为提高可读性,编写冗长的代码被认为是更好的做法。即永远不要使用缩写的方法名称,写出来!

另外,如果您必须编写行注释(//),则几乎总是可以通过将以下代码包装到命名方法中来替换它们。隐式文档ftw!:)


Boh*_*ian 4

所有实例变量都已初始化。如果不指定值,则使用默认值。

谁说不初始化实例变量是不好的做法?我倾向于不初始化它们,除非它是非默认值,但无论如何这都不是什么大问题。这是关于可读性和减少“代码噪音”提高可读性。恕我直言,无用的初始化是代码噪音。

  • 不,您不应该默默地依赖默认值。为什么不写出来让大家都清楚呢? (2认同)
  • 正如 Oracle 文档中所述,它们被认为是不好的做法。http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html(请参阅默认值)。仅类字段初始化为0,局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。 (2认同)
  • 嗯,这些细节使代码更具可读性。如果我读到像“int x;”和后来的“int y = x + 2”这样的东西,我会尝试找出作者在哪里为x赋值。如果我找不到它,我会认为他们忘记这样做了。 (2认同)
  • @Bohemian 我同意精益、精确的代码更好。例如,巧妙组织“if”、循环和“try”-“catch”块可以减少方法长度和嵌套级别,使代码更具可读性。但显式初始化变量(在合理的情况下)不会降低代码的可读性。省略这些初始化实际上会降低代码的表达能力。 (2认同)