關于下面的 Java 代碼,NetBeans 抱怨該throw宣告,指出存在“未報告的例外IOException”,即使我已經捕捉到它......
public class MyClass {
public static java.util.Properties properties = new java.util.Properties();
static {
try {
properties.load(new java.io.FileInputStream("my.properties"));
}
catch (java.io.IOException somethingbad) {
throw somethingbad;
}
}
}
如果我替換
throw somethingbad;
為
;
沒有抱怨。我想了解這是為什么以及如何正確處理它。如果出現此類例外,我希望程式簡單地停止,因此我重新拋出它。
我檢查了這個問題的答案unreported IOException 即使在 try-catch 塊中并拋出例外,但他們并沒有啟發我。
這個班級現在是單獨站立的。沒有其他類參考它。
uj5u.com熱心網友回復:
在 Java 中有兩種型別的例外:
1-檢查例外
2- 未經檢查的例外
處理:使用try catch塊:可能導致例外的行應該在try塊中,當出現例外時catch塊運行。
宣告:在宣告可能導致例外的方法時,可以添加語法: throws Exception_Class_Name 以通知呼叫者此方法可能包含可能拋出 Exception_Class_Name 型別的例外的代碼。
未經檢查的例外不會導致問題,因為它們不需要被處理或宣告,但如果您處理或宣告則沒有問題。
Checked Exceptions需要處理或宣告(可以同時處理和宣告)。
查看您的示例,您有一個名為“ somethingbad ”的 IOException 型別的例外,在 java 代碼中,必須處理或宣告肯定拋出Checked Exception的任何行,因此該行:
throw somethingbad;
必須被處理或宣告,這里你的行在一個靜態塊內,我們可以在討論方法內的代碼時宣告例外,所以在這里你需要使用 try catch 塊來處理例外,將你的行放在 try 和撰寫一個可以捕獲此檢查例外的確切型別或超型別的 catch 塊,如果您需要程式停止執行,您可以簡單地拋出一個未經檢查的例外(RuntimeException例如)。
處理 IOEXception :
import java.io.IOException;
public class MyClass {
public static java.util.Properties properties = new java.util.Properties();
static {
try {
properties.load(new java.io.FileInputStream("my.properties"));
} catch (IOException somethingbad) {
try {
throw somethingbad;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
拋出未經檢查的例外:
import java.io.IOException;
public class MyClass {
public static java.util.Properties properties = new java.util.Properties();
static {
try {
properties.load(new java.io.FileInputStream("my.properties"));
} catch (IOException somethingbad) {
throw new RuntimeException(somethingbad.getMessage());
}
}
}
uj5u.com熱心網友回復:
您正在做的是將rethrowing相同的例外回傳給靜態塊的呼叫者。
根據Java 規范,如果靜態塊拋出已檢查的例外類,則為編譯時錯誤。
在您的情況下,由于您使用FileInputStreamwhich 最終需要處理FileNotFoundExceptionor IOException& 這就是您rethrow檢查它的原因,IOException它會給您帶來編譯時錯誤。如果您真的想在此例外發生后停止執行,那么您只需在代碼塊中列印堆疊跟蹤:
class MyClass {
public static java.util.Properties properties = new java.util.Properties();
static {
try {
properties.load(new java.io.FileInputStream("my.properties"));
}
catch (IOException e) {
e.printStackTrace(); //just to give info why exception occurred.
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473228.html
上一篇:sys.excepthook在multiprocessing.Process被忽略?
下一篇:在拋出此例外的方法中拋出例外
