何时是嵌套类(Java)中调用的构造函数

时间:2016-09-25 23:46:22

标签: java class constructor

我试图理解构造函数是如何工作的,并提出了两个问题。我有两个班,一个是地址,另一个是一个人。 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对象的参数吗?

2 个答案:

答案 0 :(得分:1)

如果没有自己初始化,对象的字段将始终自动设置为默认值。该值取决于字段的数据类型(请参阅此处https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)。表示对象的字段的默认值为null。 由于您未初始化字段unitedStatesunitedKingdom,因此其值为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的构造函数。