簡體   English   中英

在Java中將多個構造函數與一個對象一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM