2012-10-16 89 views
0

但是,對於下面的代碼,我得到了未處理的Exception類型錯誤,儘管據我瞭解,我已經處理了catch塊中的異常。儘管在捕獲塊中捕獲未處理的異常錯誤

class NewException extends Exception{ 
private String msg; 
public NewException(String msg){ 
    this.msg = msg; 
} 
public String getExceptionMsg(){ 
    return msg; 
}} 
class CatchException { 
public static void method() throws NewException{ 
    try { 
     throw new NewException("New exception thrown"); 
    } 
    catch (NewException e){ 
     e.printStackTrace(); 
     System.out.println(e.getExceptionMsg()); 
    } 
    finally { 
     System.out.println("In finally"); 
    } 
}} 
public class TestExceptions{ 
public static void main(String[] args){ 
    CatchException.method(); 
}} 
+1

您打印前你說得不對。 – Cratylus

+0

我同意@Cratylus,當你執行'e.printStackTrace()'時,它看起來像你在IDE /命令行工具中有一個異常,但實際上你沒有。 –

+0

@ Cratylus,@ FlorianMinges:我不確定自己明白。我在做什麼與Thinking in Java中的這個例子有什麼不同:http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ311_005.htm? – Jin

回答

2

您的method()聲明它會拋出NewException。無論是法裏面是無關緊要:

public static void method() throws NewException{ 
    //... 
}} 

public static void main(String[] args){ 
    CatchException.method(); 
}} 

編譯器看到您呼叫的main()CatchException.method()和你是不以任何方式處理它(或者捕捉或聲明main()拋出NewException以及因此錯誤。

編譯器並不在意你是否真的在拋出異常,看看ByteArrayInputStream.close()--它不會拋出IOException--但是你必須自聲明之後才能處理它。

+0

編譯時錯誤...沒有意識到。 +1! – Cratylus

+0

謝謝,這有幫助。 – Jin