[英]Using multiple constructors with one object in Java
我有兩個用於Student的構造函數,正在嘗試將它們與一個對象一起使用。 但是我應該做錯了,因為我的輸出不是我期望的。
輸出:學校:null等級級別:0預期專業:null
學生的身份證號碼是:154324學生的姓名:Sam Bay學生的GPA: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 ?? !!!!
您不能在單個對象上同時使用兩個構造函數。
在您的代碼中:
Student sam = new Student(12, "Alpha High School", "Biology");
創建一個新的Student
對象,並將其引用分配給變量sam
。
在下一行:
sam = new Student(154324, "Sam Bay", 3.56);
這將創建一個與第一個對象分開的另一個 Student
對象,並重新分配sam
來引用它。 在此過程中,您最終會孤立原始的Student
並將其留給垃圾回收。
您真正想做的是要么通過單個構造函數傳遞Student
所需的所有數據, 要么提供getter / setter(例如setGradeLevel(int level)
)和一層阻止方法訪問Student
對象直到所有字段的異常層充滿。 第一種選擇通常是聲音更大。
例如,一個完整的構造函數看起來像這樣(為便於閱讀而格式化):
public Student(int id, int gradeLevel, String name,
String school, String major, double gpa)
{
// fill your fields in here
}
我認為您應該再次通讀文檔以獲取構造函數 ;)
與Student sam = new Student(12, "Oakton High School", "Biology");
您正在使用給定的參數創建一個Student對象,並將其存儲在變量sam中。
當您致電sam = new Student(154324, "Sam Bay", 3.56);
您將再次創建一個新的 Student對象並將其存儲在sam中。 您不是在修改第一個對象,而是丟棄它並創建一個新對象。
您應該嘗試向您的Student對象添加一個方法,例如:
public void setAdditionalValues(int id, String name, double gpa){
this.id = id;
this.name = name;
this.gpa = gpa;
}
希望這會有所幫助:)
編輯:如前所述,您還可以使用一個構造函數,該構造函數接受所有參數或為Student-object的每個屬性實現設置器,如下所示:
public void setName(String name){
this.name = name;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.