簡體   English   中英

我們何時應該在方法中拋出異常或捕獲異常?

[英]When should we throw exceptions, or catch exceptions, in a method?

我一直在閱讀有關異常的更多內容,但我不確定在什么情況下我們應該拋出一個方法

public void fxml() throws IOException
{
     // method body here
}

或者在方法中捕獲異常

public void fxml()
{
          FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("fxml.fxml"));

            try
            {
                fxmlLoader.load();
            } 
            catch (IOException exception) 
            {
                throw new RuntimeException(exception);
            } 
}

從Oracle的例子中可以看出

有時,代碼可以捕獲可能在其中發生的異常。 但是,在其他情況下,最好讓調用堆棧中的方法進一步處理異常。 例如,如果您將ListOfNumbers類作為類包的一部分提供,則可能無法預測包的所有用戶的需求。 在這種情況下,最好不捕獲異常並允許進一步調用堆棧的方法來處理它。

https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html

所以我很好奇,如果這是說我們可能不需要類/方法,並且通過在此方法中執行try / catch,如果我們不使用它就不會起作用,所以我們“拋出它”以后用嗎?

似乎類本身也“拋出異常”以便以后使用...它是否只是一個拋出的層次結構,直到你最終可以使用它? 在上面的教程中,后面的幾章后面是一個名為“鏈式異常”的章節,這個方法實際上是什么,以后該方法會被拋棄?

我還讀了這個線程什么時候在Java方法聲明中使用throws?

但我發現它並沒有完全解釋我想知道什么,但我發現了這個興趣

如果要捕獲異常類型,則不需要拋出它,除非您要重新拋出它。 在您發布的示例中,開發人員應該完成一個或另一個,而不是兩個。

通常情況下,如果您不打算對例外做任何事情,則不應該抓住它。

你可以做的最危險的事情就是捕捉異常並且不做任何事情。

我不確定他是什么意思“重新拋出”它,除非他說的是拋出方法並在以后捕捉它?

然后,如果你不打算使用它,他會談到沒有做任何異常的事情,所以如果我們需要它,它似乎扔掉它供以后使用是首選的嗎?

然后談論危險嗎? 為什么是這樣?

所以基本上如果我們不知道我們是否會使用它,那么我們應該拋出它以便可以調用方法本身,或者如果我們知道它將被調用,無論如何,那么我們應該嘗試一下/ catch塊?

我還注意到我的示例還會基於IOException拋出RuntimeException。 所以從某種意義上說,你可以采用我們拋出的第一個方法,無論如何,然后將它扔到try OR catch塊中? 似乎catch塊更適合“RuntimeException”或其他系統異常之一,但也許還有其他用例?

思考?

謝謝您的幫助!

如果您的代碼無法完成其工作(也稱為“履行合同”),則拋出異常。 這可能是因為調用者傳遞了無效輸入,或者某些外部資源出現故障(例如網絡連接丟失)。

當您可以以某種方式處理下游的預期問題時捕獲異常。 例如,您可能會捕獲指示網絡問題的異常並重試操作幾次,或者您可能會向用戶顯示錯誤消息並詢問下一步該做什么。

如果下游代碼可能拋出異常,但您的代碼位於中間位置並且不知道該怎么做,那么讓異常前往調用代碼。

暫無
暫無

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

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