考慮下面的代碼是否檢查了異常或不在JAVA中?
public void myMethod1() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod1_fixed() throws Exception {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod2() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
} catch (Exception e) {
throw e;
}
}
myMethod1()
在抱怨沒有處理Exception e
被拋出,這我理解,因爲Exception
檢查異常,你不得不處理它,因此myMethod1_fixed()
添加throws Exception
,這是幸福的。
現在與myMethod2()
它也拋出Exception e
,但它很高興,即使沒有throws Exception
,意味着Exception
未選中?
編譯器知道任何檢查的異常都會在前一個塊中被捕獲,因此它必須是'RuntimeException'。 – shmosel
哇,這很快。謝謝你帶着答案向我指出另一個問題。所以我對定義checked和unchecked異常的理解仍然是正確的,只是從JAVA 7開始,編譯器足夠聰明,可以識別真正的異常類型。但無論如何,沒有必要否定。 – user1589188