为什么要在构造函数中初始化字段?

时间:2015-03-14 04:05:52

标签: java netbeans field

所以,让我说我有一个叫做城市的课程。与我初始化其领域的区别是什么? e.g。

public class City {
    private String cityName;
    private int population;
    private boolean goodPeopleLiveThere;

    City() {
        cityName = "las vegas";
        population = 603488;
        goodPeopleLiveThere = true;
    }
}

为什么我会在构造函数而不是字段中初始化,反之亦然?

看到我面临的歧义通常是我会在构造函数中将它们设置为参数,然后在我实例化我的类时在main()中初始化它们,但是我已经看过的一些教程如上所述初始化它们,而且我还没有完全理解在字段/构造函数中而不是在对象中初始化的含义。

4 个答案:

答案 0 :(得分:0)

通常,人们会使用该格式来实现功能。以下面的例子为例

private int houseNumber;
private String houseStreet;

public House(int houseNumber, String houseStreet) {
    this.houseNumber = houseNumber;
    this.houseStreet = houseStreet;
}

现在,您可以更轻松地完成以下操作。

public static void main(String[] args) {
    House randomHouse = new House(12, "Main Street");
    House otherHouse = new House(69, "Random Ave.");
}

而不是为每个房子创建一个新类。

答案 1 :(得分:0)

这些设定变量没有区别。但是,如果这些变量取决于用户输入,则可能存在差异。例如:

public class City{
    private String cityName;
    private int population;
    private boolean goodPeopleLiveThere;
    City(String city, int pop, boolean good)){
        cityName = city;
        population = pop;
        goodPeopleLiveThere = good;
    }
}

现在,在这个例子中,这些变量依赖于在实例化时提交的值,这在构造函数中并不罕见。

答案 2 :(得分:0)

除了个人喜好之外,只有轻微的差别。但是,在构造函数体运行之前初始化字段。如果它覆盖之前初始化的构造函数中的字段,则会导致错误。

最重要的是,在整个代码中应该保持一致。

答案 3 :(得分:0)

在某些情况下,初始化构造函数外部的对象字段是可以接受的,例如,builder-pattern是使用嵌套类初始化实例成员的静态工厂模式之一。

没有“一个比另一个更好” - 只是不同的方法,每个方法都有利弊。

当你在构造函数之外初始化变量时,你应该注意不要在它完全构造之前发布它,否则你将陷入一个难以调试的混乱中。