2010-11-30 32 views
4

我明白這個錯誤的想法。但我想我不明白這是如何工作的調用堆棧。Java異常:異常myException永遠不會在相應的嘗試語句正文中拋出

文件Main.java:

public static void main(String[] args) { 
    try { 
     Function1(); 
     } catch (myException e) { 
     System.out.println(e.getMessage()); 
    } 
} 
public static void Function1() { 
    Function2(); 
} 

功能2存在於另一個文件:

File2.java

public void Function2() throws myException { 
    .... 
} 

所以通過多次調用(下調用棧)我有函數2其中指定要求「throws myException」。主函數(錯誤指向的地方)怎麼沒有認識到我把myException拋出了這一行?

任何指導,在我的「例外知識」的'洞'在哪裏將不勝感激。

aitee,

+0

if myException一個運行時異常?如果你需要讓Function2拋出myException,Function1也應該拋出它。 – hvgotcodes 2010-11-30 19:30:28

+0

類Main和File2之間的關係是什麼? (哪一個繼承自哪一個?) – 2010-11-30 19:31:30

+0

這並不直接與你的問題直接相關,但我強烈建議遵守命名約定:像`Function1`和`Function2`這樣的方法應該以小寫字母開頭, `myException`應該以大寫字母開頭。約定允許你和其他程序員更好地理解彼此的代碼。 – 2010-11-30 19:35:36

回答

1

孔是Function2宣佈,它拋出異常,但Function1沒有。 Java並沒有通過可能的調用層次挖掘方式,而是直接取決於您在throws聲明中聲明的內容。

Function1因爲沒有宣佈扔掉可能是因爲myExceptionRuntimeException

1

你的問題是,Function1()沒有聲明它throws myException - 這意味着應該有2個編譯錯誤:一個關於未被捕獲或聲明的異常,一個關於捕獲未聲明的異常。