如何在Java中的构造函数中初始化引用属性?
我正在将一个实例变量添加到类“Person”中,这是一个引用类型(“Date”,我为其编写了一个类)。 在我的Person类的构造函数中,我因此尝试使用Date类的构造函数初始化Date属性,但我不确定如何执行此操作。 以前我只初始化了原始类型(或字符串),如下所示。 这是我的代码中的一部分。 我不确定如何初始化“生日”,以便它使用Date类的构造函数。 谢谢!
public class Person { /* Attribute declarations */ private String lastName; // last name private String firstName; // first name private String email; // email address private Date birthday; // birth date /** * Constructor initializes the person's name, email address, and birthday */ public Person(String firstName, String lastName, String email, Date birthday) { this.firstName = firstName; this.lastName = lastName; this.email = email; this.birthday = ????
你是说你想使用Date构造函数在Person的构造函数中初始化this.birthday
? 然后像这样使用new
关键字:
this.birthday = new Date();
new
调用对象的构造函数。 如果是这种情况,您不需要Person的Date birthday
构造函数参数,除非您将其用于其他内容。
你可以这样做:
this.birthday = new Date(birthday.getTime());
这将创建日期对象的副本。 由于可以修改日期,因此使用相同的对象是很危险的,如果您刚刚复制了引用,那么您将要执行此操作:
this.birthday = birthday;
这将允许外面的世界在你不知道的情况下改变你的生日。
你可以很简单
this.birthday = (Date) birthday.clone();
为什么这样而不是?
this.birthday = birthday;
外人可以修改你的日期对象,然后他们正在修改你的内部结构,这是不好的,打破封装。
为什么这样而不是?
this.birthday = new Date(birthday.getTime())
;
如果你传递的Date object
不是“true Date”并且是子类 ,则日期不是最终类会发生什么?如果这样做不保留子类的内部结构,但是当你克隆时保留信息,但这种方法呢取决于你想要什么。