2011-12-01 93 views
9

是否有可能拋出一個異常而沒有捕獲它?java拋出異常而沒有捕獲它?

public void foo() throws SomeException{ 
    // .... 
    if (somethingCatestrophic) throw new SomeException(); 
    // .... 
} 

現在我想調用foo,但不希望捕捉任何錯誤,因爲異常應該從來沒有在運行時拋出(除非有一個bug)

+0

有沒有什麼理由不想抓到它?如果是性能,就我所知,通過try-catch塊沒有太大的區別,除非實際拋出異常,否則會有很多開銷。但是如果錯誤是災難性的 –

+0

否,因爲錯誤不會發生(即編程錯誤或runtimeexceptions)。 – Pwnna

+0

哎呦,在完成之前發佈上面的內容。那麼錯誤永遠不會'假設'發生!但這聽起來像是你爲了它而拋出了錯誤。我認爲您需要重新考慮是否要將錯誤放在第一位 –

回答

28

除非您正在計劃並從本地恢復,否則在此情況下最好使用未檢查的異常,例如RuntimeException衍生產品。

+2

謝謝!這對編寫非樂觀代碼很有幫助,我可以有一個應該永遠不會發生的異常,但會讓另一個開發人員知道他們忘記了代碼中的某些內容。 –

1

你可以避免捕捉異常,但是如果拋出異常並且不捕捉異常,程序將停止執行(崩潰)。

有沒有辦法忽略一個例外。如果你的應用程序不需要做任何事情來響應給定的異常,那麼你只需要抓住它,然後什麼也不做。

try { 
    ...some code that throws an exception... 
} catch (SomeException ex) { 
    // do nothing 
} 

注意:這通常被認爲是不好的風格,然而,人們可能會告訴你。經常被引用的原因是,即使你不打算對異常做任何事情,在大多數情況下,你至少應該在某個地方記錄它,通知用戶,或採取其他適當的行動,具體取決於你的應用程序這是什麼原因造成了這個例外。如果你不確定爲什麼拋出一個異常(也許這是一個你還沒有解決的bug),那麼通常你至少應該記錄它,以便以後找出它。

+0

我發現我需要的是RuntimeException,因爲錯誤永遠不會發生(除非有錯誤,否則絕不會拋出異常在代碼中),我完全忘記了 – Pwnna

0

如果SomeException是檢查異常,調用foo()將不得不捕獲了異常,並處理它,或者也可以聲明爲拋出SomeException或它的父方法。

如果SomeException是運行時異常,那麼調用它的方法將不需要捕獲它。

1

爲什麼你不在方法中捕捉它?

只要使用try catch塊並繼續,如果異常是微不足道的,並且不影響程序的任何行爲。

+0

是的,完全忘記了RuntimeException。 (在python模式下) – Pwnna