今天在整合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,如果反復,無限循環~~~~~最后,啪嘰,內存溢出.這個錯誤有點讓人哭笑不得,第一次遇到,真是然我手足無措,立碑如此,切勿再犯.