2009-06-03 2 views
2

난 체인 예외에 관한 질문이자바 체인 예외

try{ } catch(Exception e) { throw new SomeException(); } 

내가) (새 SomeException을 던져 줄에서 오류 메시지를 표시합니다이 내 일식처럼 할 경우; 는 "처리되지 않은 예외" 을 진술하고 난 .EXAMPLE http://java.sys-con.com/node/36579을 읽을 튜토리얼을 수행 할 필요가 없기 때문에이 같이 수행해야하는 것은이

+0

대부분의 경우 예외 처리 방법을 모르는 경우에는 전파하는 것이 더 좋습니다. 예외 전파가 구현 세부 사항을 호출자에게 노출하게하는 경우에만 예외를 연결하면됩니다. – CurtainDog

+0

이는 체인을 연결하는 데 예외가 아닙니다. – Raedwald

답변

3

당신의 방법은 그 선언해야하는 이유는 무엇

try{ } catch(Exception e) { 
          try{ throw new SomeException(); } catch(Exception e){} 
          } 

같은 것을 넣어야합니다 그 예외를 throw 할 수 있습니다. 따라서 다음을 추가해야합니다 :

throws SomeException { 

메소드 머리글 끝에.

+0

어쨌든 어떤 값을 추가하기 때문에 try/catch가 필요하지 않습니다. –

+0

try 블록에서 예외를 catch하고 SomeException을 던지기 때문에 try/catch 블록이 필요합니다. – cd1

5

SomeException이 확인 된 예외인지 여부에 따라 다릅니다. 그것이 (예외를 확장하지만 RuntimeException을 확장하지 않으면) 메소드에 선언하거나 RuntimeException을 던져야합니다.

이 코드를 어떻게 보일지입니다 : 몇 가지 예외가 예외를 사용하는 생성자가없는 경우

...) throws SomeException { 
.... 
try { 
.... 
} catch (Exception e) { 
    throw new SomeException(e); 
} 

, 다음을 수행하십시오

throw (SomeException) new SomeException().initCause(e); 

그 방법을 때 예외 궁극적으로 잡히면 문제의 근본 원인을 알게됩니다.

+0

구문 수정 : new SomeException(). initCause (e); – Chadwick

+0

@Chadwick : 고마워. – Yishai

8

예외가 checked exception 인 경우 throws 메서드를 또 다른 예외로 선언해야합니다.

("클래스는 클래스의 RuntimeException와 그 서브 클래스 및 클래스 오류와 그 서브 클래스되는 체크되지 않은 예외는 다른 모든 예외 클래스는 예외 클래스를 검사합니다.."- Java Language Specification, Second Edition, Section 11.2를)

예를 들어보다는 : 당신이 필요로하는

void someMethod throws SomeException { 
    try { 
     // Do something that raises an Exception. 
    } catch (Exception e) { 
     throw new SomeException(); // No problem. 
    } 
} 
1

:

void someMethod { 
    try { 
     // Do something that raises an Exception. 
    } catch (Exception e) { 
     throw new SomeException(); // Compile error. 
    } 
} 

A는 throws 메소드 선언에 추가해야합니다 메소드 선언에 "throws SomeException"을 추가하십시오. RuntimeException에서 유래 한 예외를 제외하고는 메소드가 throw하는 모든 예외 유형을 지정해야합니다.