我正在尝试使用一组特定的值构造一个PackingCase对象。尽管程序在编码过程中未显示任何错误,但在运行时却出现此错误;
Exception in thread "main" java.lang.StackOverflowError
at assignment.pkg2.PackingCase.<init>(PackingCase.java:59)
at assignment.pkg2.PackingCase.<init>(PackingCase.java:60)
我的代码如下:
public class PackingCase {
// private fields go here
int serialNumber;
int timesUsed;
int timeCreated;
int timeStored;
String name;
String description;
void setCase(int s, int TU, int TC, int TS){
serialNumber = s;
timesUsed = TU;
timeCreated = TC;
timeStored = TS;
}
double volume(){
return serialNumber*timesUsed*timeCreated*timeStored;
}
public PackingCase(){
PackingCase PC1 = new PackingCase();
double vol;
PC1.setCase(1, 2, 3, 4);
vol = PC1.volume();
System.out.println(""+vol);
}
第59行是“ public PackingCase(){”,而第60行是“ PackingCase PC1 = new PackingCase();”。考虑到我发现的示例实际上使用了相同的代码结构,并且无论如何编译都没有错误,所以我不知道发生了什么。任何帮助,将不胜感激。
最佳答案
每次创建新对象都会导致另一个新对象的创建(依此类推...),直到堆栈溢出为止。
相反,它应该看起来像这样:
public PackingCase(){
this.setCase(1, 2, 3, 4);
vol = this.volume();
System.out.println(""+vol);
}