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类添加构造函数方法
添加回答
举报
