2 回答

TA貢獻1797條經驗 獲得超4個贊
由于 Student 類中的這些行,您收到堆棧溢出錯誤
Student nameBanID = new Student();
Student n = new Student();
Student none = new Student();
在您調用 ClassWork6_2 時,Student nameBanID = new Student();您正在創建 Student 類的實例并將其分配給nameBanID變量。當您創建該類的實例時,它會立即遇到該行,該行表示Student nameBanID = new Student();使您的代碼經歷創建新學生的循環,直到發生堆棧溢出錯誤為止。
以下是三個構造函數的外觀
private String name;
//changed bannerID to long to match input from code example
private long bannerID;
public Student(String name){
setName(name);
}
public Student(long bannerID){
setBannerID(bannerID);
}
public Student(String name, long bannerID){
setName(name);
setBannerID(bannerID);
}
您當前的代碼沒有定義任何構造函數,但是當您沒有定義構造函數時,java 會為您創建一個默認構造函數。一旦定義了構造函數,您就可以使用這些構造函數創建一個 student 對象。
String studentName = "Jeffery";
long bannerID = 123456789;
Student studentWithName = new Student(studentName);
Student studentWithBannerID = new Student(bannerID);
Student studentWithNameAndBannerID = new Student(studentName,bannerID);
這是我對你的學生類所做的所有修改
class Student {
private String name;
private long bannerID;
public Student(String name){
setName(name);
}
public Student(long bannerID){
setBannerID(bannerID);
}
public Student(String name, long bannerID){
setName(name);
setBannerID(bannerID);
}
public Student(){}
public String getNameBanID(){
return bannerID + name;
}
public String getName(){
return name;
}
public long getBannerID(){
return bannerID;
}
public void setBannerID(long bannerID){
this.bannerID = bannerID;
}
public void setName(String name){
this.name = name;
}
}

TA貢獻1836條經驗 獲得超3個贊
當您創建一個新Student
對象時,您將創建并初始化另外 3 個 Student 對象。這會導致 Student 創建的遞歸,從而導致java.lang.StackOverflowError
.
您似乎也沒有您的Student
類的構造函數(例如public Student () {...}
)。理想情況下,構造函數是您初始化類變量的地方。
試試這個:不要Student
在類本身中創建 3 個對象,而是在main
方法中創建它們。還為您的Student
類添加構造函數方法
添加回答
舉報