所以,让我说我有一个叫做城市的课程。与我初始化其领域的区别是什么? e.g。
public class City {
private String cityName;
private int population;
private boolean goodPeopleLiveThere;
City() {
cityName = "las vegas";
population = 603488;
goodPeopleLiveThere = true;
}
}
为什么我会在构造函数而不是字段中初始化,反之亦然?
看到我面临的歧义通常是我会在构造函数中将它们设置为参数,然后在我实例化我的类时在main()中初始化它们,但是我已经看过的一些教程如上所述初始化它们,而且我还没有完全理解在字段/构造函数中而不是在对象中初始化的含义。
答案 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是使用嵌套类初始化实例成员的静态工厂模式之一。
没有“一个比另一个更好” - 只是不同的方法,每个方法都有利弊。
当你在构造函数之外初始化变量时,你应该注意不要在它完全构造之前发布它,否则你将陷入一个难以调试的混乱中。