在Java中构造新对象时发生堆栈溢出错误

在Java中构造新对象时发生堆栈溢出错误,java,object,stack-overflow,Java,Object,Stack Overflow,我试图用一组特定的值构造一个PackingCase对象。虽然程序在编码过程中没有显示错误,但在运行时,我得到了这个错误 Exception in thread "main" java.lang.StackOverflowError at assignment.pkg2.PackingCase.<init>(PackingCase.java:59) at assignment.pkg2.PackingCase.<init>(PackingCase.java:60) 第59

我试图用一组特定的值构造一个PackingCase对象。虽然程序在编码过程中没有显示错误,但在运行时,我得到了这个错误

Exception in thread "main" java.lang.StackOverflowError
at assignment.pkg2.PackingCase.<init>(PackingCase.java:59)
at assignment.pkg2.PackingCase.<init>(PackingCase.java:60)

第59行是“public PackingCase(){”,第60行是“PackingCase PC1=new PackingCase();”。考虑到我发现的一个示例使用了几乎相同的代码结构,并且编译时没有任何错误,我不知道发生了什么。任何帮助都将不胜感激。

每次创建一个新对象都会导致创建另一个新对象(等等…),直到堆栈溢出

相反,它应该是这样的:

public PackingCase(){ 
    this.setCase(1, 2, 3, 4);
    vol = this.volume();
    System.out.println(""+vol);
}

构造函数递归调用自身,导致堆栈溢出。

构造函数中有一个递归调用。将构造函数保留为空(只需删除它),然后从
main
方法运行此代码:

public static void main(String[] a){
    PackingCase pc1 = new PackingCase();
    pc1.setCase(1, 2, 3, 4);
    double vol = pc1.volume();
    System.out.println(""+vol);
}

您正在
new
的处理程序中调用
new
,创建一个无限循环(由于堆栈是有限的,它最终会耗尽空间)。但是
public PackingCase(){…}
是一个构造函数。这意味着只有当有人已经使用了
new PackingCase()时才会调用它
。构造函数中的代码不必创建对象(分配空间),只需初始化它(为其字段设置值)。

@pst-pedantic不需要后跟“但是…”。谢谢!]+1:堆栈溢出错误消息
public PackingCase(){      PackingCase PC1 = new PackingCase(); ...}
public static void main(String[] a){
    PackingCase pc1 = new PackingCase();
    pc1.setCase(1, 2, 3, 4);
    double vol = pc1.volume();
    System.out.println(""+vol);
}