声明类对象的正确方法是什么?

时间:2011-05-20 15:45:47

标签: java object constructor instantiation

这只是解决我偶然发现的争议的一个快速问题(对不起,我没有链接)。

我如何声明对象是这样的:

class Foo {

   private Bar aBar = new Bar();

   ...

}

现在我发现的争议说这是糟糕的Java。我不知道他为什么这么说,但他非常坚定。他提出的是所有对象都应该在类体中声明,但是在构造函数之前不会被实例化。任何人都可以为我阐明这一点吗?在构造函数中实例化对象确实更好吗?

TFYT

〜Aedon

编辑1:

我知道我使用了争议这个词,但我并不打算将其作为争议。

3 个答案:

答案 0 :(得分:4)

在大多数情况下,这无关紧要。我的经验法则是:

  • 如果您要使用相同的表达式来初始化所有构造函数中的变量,并且它不依赖于任何参数,请在声明时进行。
  • 否则,你几乎不得不在构造函数中这样做。

推理:通过在声明点初始化,它是 clear ,无论构造函数和参数如何,都将以相同的方式分配值。它还使您的构造函数更简单,并且没有重复。

警告:不要在构造函数中分配值,否则会使先前的清晰度无效:)

我建议您询问您的同事(或其他任何人),因为他声称您当前的代码“不好”。我确信有有效的替代观点,但如果他不能提供任何理由,那么就没有理由关注IMO。

另一个快速说明 - 我假设没有一个初始化者需要做任何重要的工作。如果他们这样做,那可能是一个混乱的点,特别是如果抛出异常。一般来说,我不喜欢我的构造函数做了很多工作。

答案 1 :(得分:2)

通过在构造函数中指定属性,可以立即清楚实例化类时将运行的代码 如果在字段声明中指定,则读取类构造函数的人将不会意识到该字段已在其他位置设置。

答案 2 :(得分:1)

构造函数的约定是创建一个语义上有效的实例。这就是所有字段都被正确初始化为合理的值等等。因此,初始化构造函数中的所有内容有助于阐明构成类的有效实例的原因。此外,当您有多个构造函数时,可以使用构造函数链接等机制来避免重复相同的代码。

然而,这只是一本类似教科书的理论,在现实生活中,你有时会做更有利的事情。如果你在声明点实例化对象,那么它几乎没有区别,因此不需要强有力的立场导致争议。