簡體   English   中英

什么時候拋出運行時異常?

[英]When to throw runtime exception?

最近,我接受了公司的采訪,他們給了我一個編碼問題。 我得到了與卡片組相關的程序,其中一種方法是洗牌。 所以我把程序寫成:

/** Shuffle the list of cards so that they are in random order 
 * @param d Deck of cards*/
public  static void shuffle(Deck d)
{
    if(d == null)
        throw new IllegalArgumentException();
    Random randomGenerator = new Random();
    List<Card> cards = d.getDeckOfCards();   // cards is basically Linked List.. cards = new LinkedList<Cards>()
    for(int i=0;i<cards.size();i++)
    {
        int randomNumber = randomGenerator.nextInt(52);
        Card c1 = cards.remove(randomNumber);
        Card c2 = cards.remove(0);
        cards.add(0, c1);
        cards.add(randomNumber,c2);
    }       

}

在上面的代碼中,我拋出了IllegalArgumentException ,這是我最懷疑的。 在什么條件下應該實際拋出運行時異常? 我們應該拋出運行時異常嗎?

謝謝

我們應該拋出運行時異常嗎?

是的,我們應該。 運行時異常用於特定目的 - 它們表示編程問題,只能通過更改代碼來修復,而不是更改程序運行的環境。

在什么條件下應該實際拋出運行時異常?

使用類或方法的方式檢測錯誤時,拋出運行時異常。

通常,當您需要拋出運行時異常時,有兩種情況:

  • 傳遞無效參數值 - 這是運行時異常的最常見原因。 大多數參數驗證異常應該是運行時異常。 Java提供了幾個子類來表示這些特定問題。
  • 以錯誤的順序調用方法 - 這是另一個常見原因。 如果在類完成初始化或其他一些准備步驟之前無法調用某些方法,則在錯誤的時間調用會導致運行時異常。

從這個意義上說,你的代碼很好:它完全適合第一類,即傳遞無效的參數值。 我會做的一件事略有不同的是添加一條消息來說明哪個參數的值無效,但在你的情況下它並不重要,因為那里只有一個參數。

實際上, IllegalArgumentExceptionRuntimeException的子類

最好是更具體一點,以幫助其他程序員。 我肯定更喜歡IllegalArgumentException因為它最好地描述了究竟出了什么問題,但實際上,任何一個都可以工作。

例如,如果您正在讀取文件,並且發生了一些IO錯誤,則您不太可能從錯誤中恢復,因此將錯誤重新拋到頂部並因此終止應用程序並不是一個糟糕的行動方案。

另一方面,如果您預計可恢復的錯誤,那么您應該絕對捕獲並處理錯誤。 例如,您可能讓用戶在表單中輸入數據。 如果輸入數據不正確,輸入處理代碼可能會拋出異常(例如,在解析格式錯誤的數字字符串時會出現NumberFormatException )。 您的代碼應捕獲這些異常並向用戶返回錯誤,提示輸入正確。

捕獲異常並拋出RuntimeException ,將原始異常設置為RuntimeException的原因非常重要。

拋出新的RuntimeException(originalException)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM