Java 为什么我会得到Ja.lang.StackOverflower错误
为什么我要使用java。Java 为什么我会得到Ja.lang.StackOverflower错误,java,exception,exception-handling,stack-overflow,Java,Exception,Exception Handling,Stack Overflow,为什么我要使用java。在此处输入代码lang.StackOverflower在下面的程序中出现异常 public class Image { Image i=new Image(); public Image() { } private byte[] image_array; private String image_name; private long id; public static void main(String[] args) {
在此处输入代码
lang.StackOverflower在下面的程序中出现异常
public class Image {
Image i=new Image();
public Image() {
}
private byte[] image_array;
private String image_name;
private long id;
public static void main(String[] args) {
Image ii=new Image();
}
}
因为当行
Image ii=newimage()时代码>在main
内执行,它创建Image
的实例,并在其中写入行Image i=newimage()代码>
这意味着您要不断重复创建新的图像实例
只需像图像i那样保存它编码>并根据需要对其进行初始化。一旦实例化了类Image
的对象,就开始创建它。在此过程中,它接收类型为Image
的字段i
,该字段用类为Image
的新对象初始化。这个会再次初始化,以此类推
只需删除该行Image i=newimage()代码>和提示:了解java命名约定。A) 除了常数B)使用有意义的名称<代码>图像i
。。。没有任何意义ii
更糟糕。很抱歉,谁在投票一个非常明显重复的问题?我认为这个问题不太明显,因为构造函数实际上是空的,然后有一个实例字段调用该构造函数。因此,解释需要参考JLS以及实例字段是如何初始化的。如果您了解java类的基本知识,这就非常明显了instanciation@jhamon,但重复问题并没有真正解决这个问题。当构造函数为空时,什么触发递归?调用堆栈不应该到此结束吗?我要求对正在发生的事情进行更好的解释;为什么它会重复创建实例?到底是什么导致了无休止的递归?代码中的任何地方都没有显式的递归调用。@Mick助记符,这是因为Image i=new Image()
在类图像中,它是一个实例变量。创建该类的实例时,将初始化实例变量(如果未显式初始化,则默认为null(对于对象))。认为这很容易理解;-)我在寻找一个解释,它涉及到实例变量初始值设定项w.r.t.的执行顺序在哪里指定构造函数。