我试图理解构造函数是如何工作的,并提出了两个问题。我有两个班,一个是地址,另一个是一个人。 Person类中有两个Address对象。以下是我正在做的事情的简化示例:
private class Person{
private String name;
private Address unitedStates;
private Address unitedKingdom;
Person()
{
this.name = "lary"
}
Person(String n)
{
this.name = n;
//Can I call Address(string, string) here on unitedStates and unitedKingdom?
}
}//end of person class
private class Address{
private String street;
private String country;
Address()
{
this.street = "1 Washington sq";
this.country = "United States";
}
Address(String s, String c)
{
this.street = s;
this.country = c;
}
}
}
如果我按原样离开Person(),它是否会将UnitedStates和unitedKindom的值填入" 1 Washington sq"自动?
和
我可以传递我在示例中留下该注释的Address对象的参数吗?
答案 0 :(得分:1)
如果没有自己初始化,对象的字段将始终自动设置为默认值。该值取决于字段的数据类型(请参阅此处https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。表示对象的字段的默认值为null
。
由于您未初始化字段unitedStates
和unitedKingdom
,因此其值为null
。你可以做的是初始化Person
构造函数中的字段:
Person()
{
this.name = "lary";
this.unitedStates = new Address();
this.unitedKingdom = new Address();
}
Person(String n)
{
this.name = n;
this.unitedStates = new Address("myStreet", "myCountry");
this.unitedKingdom = new Address();
}
您还可以在另一个构造函数中使用关键字this
。请注意,我添加了第三个由其他构造函数调用的构造函数:
Person(String n, Address unitedStates, Address unitedKingdom)
{
this.name = n;
this.unitedStates = unitedStates;
this.unitedKingdom = unitedKingdom;
}
Person(String n)
{
this(n, new Address("myStreet", "myCountry"), new Address());
}
Person()
{
this("lary", new Address(), new Address());
}
答案 1 :(得分:-1)
地址字段刚刚初始化为null。你必须在User构造函数中为它指定一个Address实例,例如
unitedStates = new Adress();
将在没有参数的情况下调用Address的构造函数。