簡體   English   中英

Java-處理調用堆棧中更高的異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM