[英]Is there a way to throw IOException in a runnable?
我有一些無法正常工作的代碼(這對我來說是很常見的事情),但是因為我沒有收到錯誤,所以它只會繼續以錯誤的數據運行。 我認為的問題是,它不斷告訴我將部分代碼包裝在try / catch塊中(我的測試是基本的,我只是在try區域中輸出一條消息,如果輸出了,我認為一切都很好。好在我的代碼中)。 據我了解,在生產環境中,放置try / catch語句有助於代碼繼續運行,但是這使我難以進行故障排除,因為我正嘗試對代碼的這一部分進行故障排除。
有沒有辦法解決這個問題,這樣我就可以真正看到嘗試區域中何時出現故障?
這是我的代碼示例:
try {
ByteArrayInputStream baos_back = new ByteArrayInputStream(message);
ObjectInputStream oos_back = new ObjectInputStream(baos_back);
i = oos_back.readInt();
d = oos_back.readDouble();
list_of_ints = (int[]) oos_back.readObject();
oos_back.reset();
baos_back.reset();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您是否正在嘗試使程序在發生此錯誤時崩潰? 如果是這樣,您應該能夠將IOException
包裝在RuntimeException
然后拋出該IOException
。 它們未經檢查,因此您無需聲明它們,它應該可以殺死您的程序。
如果您想讓代碼引發適當的異常,建議不要使用try-catch塊。 Try-catch用於處理異常發生時的異常,然后繼續運行程序,但是聽起來您根本不想處理它們。
如果確實要使用try-catch塊,則始終可以在catch塊的末尾手動拋出RuntimeException。 就像是:
throw new IOException();
try {
// Some code...
} catch(Exception e) {
// Error handling code...
throw new RuntimeException(e.getMessage());
}
正如我在評論中提到的那樣,您可以使用一攬子catch語句捕獲Java中的所有異常:
try {
// code
} catch (Exception e) {
e.printStackTrace();
}
這將捕獲在try
塊中引發的每個Exception
,並且唯一不能捕獲的是Error
。
在實踐中,您將希望限制捕獲的異常類型,並捕獲更具體的異常,因此可以按以下方式進行異常鏈:
try {
// code
} catch (IOException ioe) {
// we expected this
ioe.printStackTrace();
} catch (SomeOtherException soe) { // just an example...
soe.printStackTrace();
} catch (Exception e) {
// Did we expect this? Maybe not!
e.printStackTrace();
}
上面的內容還表明,您預計會發生某些類型的異常,然后發出大范圍的包羅萬象的語句,可能會捕獲您未曾想到的事情。
您也可以將異常記錄到文件或其他內容中,而不是像現在的代碼那樣將它們輸出到標准輸出中。 基本的日志記錄實用程序是java.util.logging
。
我仍然建議您學習使用調試器。 調試器可以執行很多操作,例如每當引發異常時就暫停程序執行,並允許您在程序執行的任何時候檢查變量和字段的值。 如果使用Eclipse或Netbeans或IntelliJ或其他IDE,則它們具有調試器。 如果使用命令行,則有jdb
命令行Java調試器。
我建議編輯您的代碼生成模板以執行此操作
catch ( $ExceptionClass e )
{
// TODO: Autogenerated catch block
e.printStackTrace();
throw new RuntimeExcepton( e );
}
這樣,您就有了一個TODO提醒,在stdout上有一個barf,並確保如果您沒有提供正確的異常處理程序,您的程序將崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.