在JAVA中,如何将值从构造函数传递给另一个类中的setter?

在JAVA中,如何将值从构造函数传递给另一个类中的setter?,java,class,oop,constructor,Java,Class,Oop,Constructor,我现在正在学校学习面向对象编程,其中有些方面我还不太了解。我有一个程序,可以创建一个包含用户姓名和生日的数据库。所以我有3个类:person,PersonProgram(主要)和Date。Person类具有用于名称和出生日期的构造函数、setter和getter。Date类对正确的日期和闰年等进行错误检查。在主程序中,我创建了5个人,然后提供菜单选项来更改和修改姓名和日期。例如,如果用户想要更改名称,我的代码如下所示: System.out.println("Enter new first na

我现在正在学校学习面向对象编程,其中有些方面我还不太了解。我有一个程序,可以创建一个包含用户姓名和生日的数据库。所以我有3个类:person,PersonProgram(主要)和Date。Person类具有用于名称和出生日期的构造函数、setter和getter。Date类对正确的日期和闰年等进行错误检查。在主程序中,我创建了5个人,然后提供菜单选项来更改和修改姓名和日期。例如,如果用户想要更改名称,我的代码如下所示:

System.out.println("Enter new first name:");
people[choice-1].setFirstName(input.next());
public class Person {

    private Date birthDate;

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate){
        this.birthDate = birthDate;
    }
}
这对我来说很有效,也很有意义。但是我想知道怎样才能正确地更改日期?Date构造函数为日、年和月取3个整数,因此在主程序中,我会提示用户输入3个新日期,这些日期存储在日、月、年整数中。因此,我的理解是,从那里我将把这3个整数传递给日期构造函数:

new Date(month, day, year);

我感到困惑的是,接下来该怎么办。日期构造函数获取新的日期调用,并将其传递给setter。如何将这个新创建的日期对象传递回Person程序,以便birthdate的setter亲自更新相应的Person对象?如果我对我的问题不清楚,请告诉我,我想我可以清楚地说出我想问的问题,而不必发布我所有的代码。

是“date”类型的person类中的出生日期吗

如果是这样,您应该创建类日期的实例,执行所需的控制,并将其传递给persson实例中出生日期的构造函数或设置器

Date birthDate = new Date(month, day, year);
// Some controls
people[choice-1].setBirthDate(birthDate);

在你的
Person
课程中,你应该有如下内容:

System.out.println("Enter new first name:");
people[choice-1].setFirstName(input.next());
public class Person {

    private Date birthDate;

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate){
        this.birthDate = birthDate;
    }
}
然后在中设置
生日
如下:

person[choice-1].setBirthDate(new Date(month,day,year));
考虑到您从OOP开始,这里有一个重要的概念,即封装,
Person
类限制对其字段的自由访问,如
birthDate
,并设置与这些字段交互的规则。例如,您可以在分配日期之前检查日期是否为空

public void setBirthDate(Date birthDate){
    if(birthDate != null) {
        this.birthDate = birthDate;
    } else {
        //Whatever you wanna do here (throw an Exception, etc, etc)
    }
}
评论问题

尽管最好再提出一个问题:

我必须在Person类中创建Date类的实例吗?或者在任何地方


否,属性/字段
生日
是对
日期
对象的引用,该对象将存储在内存中,直到没有引用为止。由您决定在何处创建它们,尽管有创作模式,一系列设计模式可以帮助您解决这一问题。

您可以这样设置:
人[choice-1].setBirthday(新日期(月、日、年))。您必须提供先选择Person的选项。

保存日期并将其传递给Person类的构造函数。或者,先创建Person对象,然后使用Person类setter方法从保存日期设置Person对象的日期。例如,
date savedDate=新日期(月、日、年);人员[choice-1]。设置日期(savedDate)@alayor成功了,谢谢!最后的两条评论应该作为答案发布。谢谢你的回复,到目前为止我的代码就是这样的。不过,我有一个关于实例的问题。我必须在Person类中创建Date类的实例吗?或者在任何地方?