[英]Java - handling exceptions higher in call stack?
如果將foo()
的結果傳遞給bar()
並且bar()
具有處理異常的機制,為什么它無法編譯(未報告的異常Exception;必須捕獲或聲明為拋出)?
public class Foobar {
public static int foo() throws Exception {
throw new Exception();
}
public static void main(String[] args) {
System.out.println(bar(foo()));
}
public static int bar(int x) {
try {
return x;
} catch (Exception e) {
return 0;
}
}
}
由於foo()
的結果用作bar(..)
的參數,因此必須在bar
被調用之前進行計算。 但是,在可以確定foo
的結果之前,將引發異常,從而導致異常終止並且不再執行任何代碼(除了finally塊和直到捕獲到異常為止)。 如果foo
返回異常而不是拋出異常,則一切都會不同。
foo()
在main
方法中而不是在bar
方法中“執行”,然后foo()
返回傳遞給bar()
。
在bar()
調用之前先調用foo
以計算要傳遞給bar
的int,以便將異常傳播到main
not bar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.