gpt4 book ai didi

java - 在 Java 中对一个对象使用多个构造函数

转载 作者:行者123 更新时间:2023-12-02 05:17:13 25 4
gpt4 key购买 nike

我有两个 Student 构造函数,并尝试将它们与一个对象一起使用。但我应该做错了,因为我的输出不是我所期望的。

输出:学校: 空年级水平:0意向专业:空

学生证号码:154324学生姓名:萨姆·贝学生平均绩点:3.56

类定义代码:

public class Student
{
private int id, gradeLevel;
private String name, school, major;
private double gpa;


//constructor to initialize the instance variables of student object
public Student(int id, String name, double gpa)
{
this.id = id;
this.name = name;
this.gpa = gpa;
}

public Student(int gradeLevel, String school, String major)
{
this.gradeLevel = gradeLevel;
this.school = school;
this.major = major;
}

//toString() to display the attributions of the student object
public String toString()
{
return "School: " + school +
"\nGrade Level: " + gradeLevel +
"\nIntended Major: " + major + "\n" +
"\nStudent's ID number is: " + id +
"\nStudent's name: " + name +
"\nStudent's GPA: " + gpa;
}

}//end class

主要代码:

public class StudentDrive

{
public static void main(String [] args)
{
//creating student objects
Student sam = new Student(12, "Alpha High School", "Biology");
sam = new Student(154324, "Sam Bay", 3.56);

System.out.println(sam);

}
}

看起来我已经初始化了第一部分,但我得到了 null 和 0??!!!

最佳答案

不能在一个对象上同时使用两个构造函数。

在您的代码中:

学生 sam = new Student(12, "阿尔法高中", "生物");

创建一个新的Student对象并将其引用分配给变量sam

在下一行:

sam = new Student(154324, "Sam Bay", 3.56);

这将创建另一个 Student 对象,与第一个对象分开,并重新分配 sam 来引用它。在此过程中,您最终会孤立原始的 Student 并将其留给垃圾回收。

您真正想做的是通过单个构造函数传递 Student 所需的所有数据,提供 getters/setters (例如 setGradeLevel(int level))和一层异常,阻止方法在所有字段都填满之前访问 Student 对象。第一个选项通常更合理。

例如,完整的构造函数看起来像这样(为了便于阅读而格式化):

public Student(int id, int gradeLevel, String name, 
String school, String major, double gpa)
{
// fill your fields in here
}

关于java - 在 Java 中对一个对象使用多个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com