Java 运行时堆栈溢出错误
当我运行这段代码时,我在运行时得到一个Java 运行时堆栈溢出错误,java,Java,当我运行这段代码时,我在运行时得到一个stackoverflowerrror。为什么我会得到这个例外 class F{ String name; int rollNo; F ref; F(String name,int rollNo){ this.name = name; this.rollNo = rollNo; ref = this; } public static void main(St
stackoverflowerrror
。为什么我会得到这个例外
class F{
String name;
int rollNo;
F ref;
F(String name,int rollNo){
this.name = name;
this.rollNo = rollNo;
ref = this;
}
public static void main(String[] args){
F f = new F("Shivam",138);
System.out.println(f);
}
public String toString(){
return name+" "+rollNo+" "+ref;
}
}
这是我得到的一个例外:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at F.toString(F.java:20)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at F.toString(F.java:20)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at F.toString(F.java:20)
at java.lang.String.valueOf(String.java:2994)
当此行执行toString()
调用的f
对象的方法时。及
请参阅toString()的实现
再次连接ref
对象,因此,toString
方法递归地无限调用。
将toString
的实现更改为此
public String toString(){
return name+" "+rollNo;
}
当此行执行toString()
调用的f
对象的方法时。及
请参阅toString()的实现
再次连接ref
对象,因此,toString
方法递归地无限调用。
将toString
的实现更改为此
public String toString(){
return name+" "+rollNo;
}
这是因为您正在使用ref
进行自引用,并在toString()
中打印,这会创建被调用的toString()
的无限递归。首先不确定您为什么需要自我参考,您可以在需要时使用this
。如果您确实需要ref
,可以将其从toString()
方法中删除,它应该可以工作。这是因为您正在使用ref
进行自引用,并在toString()
中打印,从而创建被调用的toString()
的无休止的递归。首先不确定您为什么需要自我参考,您可以在需要时使用this
。如果您确实需要ref
,您可以将其从toString()
方法中删除,它应该可以工作。当您使用ref-it调用其toString()方法时,被重写的方法toString()出现问题,同样的方法调用变成了递归,从而导致问题。
您应该使用类的字段,而不是同一个类对象。当您使用ref it调用其toString()方法时,重写的方法toString()出现问题,并且同一方法调用再次变成递归,从而导致问题。
您应该使用类的字段而不是同一个类对象。您希望程序打印什么?问题在于toString()中包含了“ref”。通过在其中包含“ref”,它尝试在toString()方法本身中计算ref.toString。如果您可以共享toString的预期输出,那就更好了。这只是一个无休止的递归问题。System.out.println(f);是否重新检查问题。在字段中保留对对象本身的引用是没有意义的。您可以通过this
从实例中的任何位置引用对象本身。您希望程序打印什么?问题在于toString()中包含了“ref”。通过在其中包含“ref”,它尝试在toString()方法本身中计算ref.toString。如果您可以共享toString的预期输出,那就更好了。这只是一个无休止的递归问题。System.out.println(f);是否重新检查问题。在字段中保留对对象本身的引用是没有意义的。您可以通过this
从实例中的任何位置引用对象本身。
public String toString(){
return name+" "+rollNo;
}