2012-10-16 2 views
0

다음 코드에 대해 처리되지 않은 예외 유형 오류가 발생합니다. 이해하지만 catch 블록에서 예외를 처리했습니다.처리되지 않은 예외 오류가 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

ex 네가 말하는 것처럼 너는 그것을 얻지 못한다. – 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()를 호출되어 있는지, 그리고 어떤 방법으로 처리되지 않습니다 (중 하나를 잡기 나뿐만 아니라 NewException을 던져 main()를 선언 본다

컴파일러는 실제로 예외를 던지는지 여부를 신경 쓰지 않습니다. ByteArrayInputStream.close()을보십시오. IOException을 던질 방법은 없지만 선언 된 이후로 처리해야합니다.

+0

컴파일 시간 오류 ... 실감하지 못했습니다. +1! – Cratylus

+0

감사합니다. 도움이됩니다. – Jin