ssh整合問題總結--運行項目時報java.lang.StackOverflowError(堆棧溢出)異常


  今天在整合ssh項目中,碰到一個異常,當我提交購物車數據到訂單時,瀏覽器報了一個這樣的異常.

  當時,我就嚇壞了.尼瑪,這不是內存溢出了嗎?嚇得我趕緊去檢查了每一個有遍歷語句的代碼,結果沒有發現一個死循環,折騰了兩個多小時,最后終於發現了問題,簡直讓人抓狂,原因竟然是我在實體類,order(訂單),orderItem(訂單項)中都重寫了ToString()方法.請看:

OrderItem.java:

package com.wang.shop.order.entity; import com.wang.shop.goods.entity.Goods; public class OrderItem { private Integer itemId;//訂單項Id
    private Integer count;//商品數量
    private double total;//商品總價格 //訂單項中的商品
    private Goods goods; //訂單項所屬的訂單
    private Order order; //get/set方法省略
 @Override public String toString() { return "OrderItem [itemId=" + itemId + ", count=" + count + ", total="
                + total + ", goods=" + goods + ", order=" + order + "]"; } }

Order.java:

package com.wang.shop.order.entity; import java.util.Date; import java.util.HashSet; import java.util.Set; import com.wang.shop.user.entity.User; /** * 訂單實體 * @author Administrator * */
public class Order { private Integer orderId;//訂單Id 主鍵
    private String name;//收貨人姓名
    private String address;//收貨地址
    private String tel;//收貨人電話
    private String postNum;//郵編
    private double allTotal; private Date orderDate;//訂單創建日期 //訂單所屬的用戶
    private  User user;//所有用戶 外鍵 用戶Id //訂單里面的多個訂單項
    private Set<OrderItem> orderItems=new HashSet<OrderItem>(); //get/set方法省略
 @Override public String toString() { return "Order [orderId=" + orderId + ", name=" + name + ", address="
                + address + ", tel=" + tel + ", postNum=" + postNum + ", allTotal=" + allTotal + ", orderDate=" + orderDate + ", user=" + user + ", orderItems=" + orderItems + "]"; } }

請注意!請注意!請注意! 在order類中我有一個set集合的屬性,value正好是orderItem,而我又重寫了OrderItem的ToString方法,於是乎,當代碼執行:

  System.out.println("order:"+order);或者System.out.println("orderItem:"+orderItem);

  的時候,程序打印Order時,會打印OrderItem,打印OrderItem時,會打印Order,如果反復,無限循環~~~~~最后,啪嘰,內存溢出.這個錯誤有點讓人哭笑不得,第一次遇到,真是然我手足無措,立碑如此,切勿再犯.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM