如果且僅當您確實可以做某些事情來解決該問題,您希望處理髮生的異常。
這裏有一個常見的例子:
int foo(String userInput) {
int i = Integer.parseInt(userInput);
return i * 4;
}
這將引發除了非數字的字符串輸入。但你無法做任何事情,所以你讓它傳播。
再舉一例
class Communicator {
private InputStream in;
private OutputStream out;
public Communicator(Socket socket) throws IOException {
in = new ObjectInputStream(socket.getInputStream());
out = new ObjectOutputStream(socket.getOutputStream());
}
}
如果套接字拋出IOException,你能指望有可能復甦,使該通訊仍然工作?我想不是。放手吧,讓它傳播,讓它找到能夠應付它的人。
另外,您應該知道您不必catch
或申報throws
爲所有例外。如果它是RuntimeException
,則不需要。 (NumberFormatException異常)對於最一部分,這些異常通常意味着錯誤(?NullPointerException異常,任何人)或惡意的用戶輸入
這似乎是一個很好的通用的錯誤處理方法。謝謝! – 2011-05-03 13:47:27
@bkail你能解釋'rethrow'(2)多一點在你的答案? – JJD 2012-08-12 21:40:02
@JJD例如,SAXParser.parse方法可能會捕獲IOException(例如,日誌記錄,清理等),但它們會重新拋出異常,因爲調用者有上下文來處理它(例如,FileNotFoundException或其他一些I/O問題最終用戶可能知道如何解決)。 – 2012-08-13 05:53:54