我正在尝试使用一组特定的值构造一个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);
}

10-08 19:37