这在Java中 – 线程“main”java.lang.StackOverflowError中的异常

前端之家收集整理的这篇文章主要介绍了这在Java中 – 线程“main”java.lang.StackOverflowError中的异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我收到stackoverflow错误

我的课 –

  1. public class Tester {
  2.  
  3. int id;
  4.  
  5. Tester(int id){
  6. this.id = id;
  7. }
  8.  
  9. public String toString(){
  10.  
  11. String rep = "Hex: " + this + ",Id: " + this.id;
  12. return rep;
  13. }
  14.  
  15. }

主要方法

  1. class Driver{
  2.  
  3. public static void main(String [] args){
  4.  
  5. Tester t = new Tester(123);
  6. System.out.println(t);
  7.  
  8. }
  9.  
  10. }

错误

  1. Exception in thread "main" java.lang.StackOverflowError
  2. at java.lang.String.length(Unknown Source)
  3. at java.lang.AbstractStringBuilder.append(Unknown Source)
  4. at java.lang.StringBuilder.append(Unknown Source)
  5. at java.lang.StringBuilder.<init>(Unknown Source)
  6. at com.examscam.model.Tester.toString(Tester.java:13)
  7. at java.lang.String.valueOf(Unknown Source)
  8. at java.lang.StringBuilder.append(Unknown Source)
  9.  
  10. ---------REPEAT !!!

解决方法

你写了:
  1. String rep = "Hex: " + this + ",Id: " + this.id;

在java中简单地写这意味着你间接调用this.toString().

我相信您正在尝试覆盖Object的toString()方法,并且在您的toString()版本中,您希望打印已传递的ID以及对象的哈希码.

所以要取代输出

  1. String rep = "Hex: " + this + ",Id: " + this.id;

  1. String rep = "Hex: "+ this.getClass().getName().hashCode() +",Id: " + id;

你会得到输出

  1. Hex: 1800024669,Id: 123

猜你在找的Java相关文章