类体中实例变量的默认值

时间:2021-02-12 12:48:14

标签: java class constructor initialization instance

当我们在类的主体中写实例变量并且给定构造函数初始化它们时,那​​么为什么我们可以直接在构造函数之外初始化变量而不去构造函数呢?这不是建设者的职责吗?

class Sample{
LinkedList<String> string=new LinkedList<>();//Initializing in the body of the class
String value="Hi";//Initializing in the body of the class

   public Sample(){
   //shouldnt string and value initialize here?}
}

3 个答案:

答案 0 :(得分:1)

字段初始化发生在构造函数体执行之前。这在某些情况下很有用,例如,如果您有多个构造函数,并且字段应该具有相同的初始值。在您的示例中,您总是希望从一个空列表开始,从而避免空指针异常。对于一般的集合来说,这确实是一个很好的做法。

答案 1 :(得分:0)

为什么我们可以?因为语言说你可以。

这可能是一个不令人满意的答案,但基本上就是这样。

我认为这只是风格偏好的问题。对于简单的情况,特别是当我不需要任何带参数的构造函数时,我将使用初始化器 (String foo = "bar") 而不是在构造函数中进行。对于具有许多变量和多个构造函数的复杂情况,我可能会使用初始化器,然后让构造函数处理需要不同的值。对于中间情况,我倾向于在构造函数中进行设置。

答案 2 :(得分:0)

您的问题更多是关于软件设计的。在某些情况下,有时您需要为对象设置一些默认值。我个人尝试尽可能多地在构造函数中初始化值。我认为它更清晰,因为构建对象的新实例是构造函数的任务。另外,我相信尝试使对象不可变是一种很好的做法,这意味着您有 final 字段并在构造函数中初始化它们。当然,这并不总是可行的,但不可变对象更容易出错。

相关问题