0

我正在将实例变量添加到作为引用类型的类“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 = ????
4

3 回答 3

1

您是说要this.birthday使用 Date 构造函数在 Person 的构造函数中进行初始化吗?然后new像这样使用关键字:

this.birthday = new Date(<arguments if any exist>);

new调用对象的构造函数。如果是这种情况,您不需要Date birthdayPerson 的构造函数参数,除非您将它用于其他用途。

于 2013-06-30T23:36:09.133 回答
1

你可以这样做:

this.birthday = new Date(birthday.getTime());

这将创建日期对象的副本。由于可以修改 Date ,因此使用相同的对象是很危险的,如果您只是复制了引用,您就会这样做:

this.birthday = birthday;

这会让外界在你不知情的情况下改变你的生日。

于 2013-06-30T23:27:11.837 回答
0

你可以简单

this.birthday = (Date) birthday.clone();

为什么用这种方式而不是?

this.birthday = birthday;

因为外人可以修改您的日期对象,然后他们正在修改您的内部结构,这是不好的,会破坏封装。

为什么用这种方式而不是?

this.birthday = new Date(birthday.getTime());

Date 不是最终类,如果Date object您传递的不是“真实日期”并且是子类,则会发生什么情况你想要什么。

于 2013-07-01T01:48:39.127 回答