2010-07-12 5 views

답변

7

문제를 숨기지 않고 문제가 발생하면 일부 코드를 실행하려는 경우.

예를 들어,이 예외가 발생했을 경우 데이터베이스에 기록하는 동안 변경 사항을 롤백하고 싶은 말은하자 :이 코드를 사용하는 경우

try { 
    writeToDatabase(); 
} catch(Exception ex) { 
    rollbackChanges(); 
} 

가 호출하는 함수가 예외가 발생했음을 발견하지 않습니다.

대신

try { 
    writeToDatabase(); 
} catch(Exception ex) { 
    rollbackChanges(); 
    throw ex; 
} 
+1

fillInStackTrace를 호출하는 이유는 무엇입니까? 그것의 문서는 여러 번 호출 될 때 어떤 일을하는지는 알려주지 않지만, 원래의 스택 추적을 덮어 쓰거나, 위의 코드가 원래의 이유를 숨기거나 아무것도하지 않을 것이다. 위의 코드는 불필요한 복잡성을 가진다. . –

+0

@esko : 네 말이 맞아. 결정된. – SLaks

+0

일반적으로 예외를 롤백하지 않겠습니까? –

1

다소 무뚝뚝하기 위해 작성해야 : 예외 처리를 사용 할 수 있습니다.

예외가 발생하기 전에 (또는 개발자가 예외 처리를 올바르게 사용하는 방법을 이해하기 전에) 프로그래머는 '부적절한 항목'이 있으면 -1 또는 null과 같은 오류 코드를 반환합니다. 이를 염두에두고, 실패한 몇 가지 방법을 다시 말해 줄 수 있습니까? 예 : 대형 API에서 일부 저수준 IO 방법이 실패했습니다. null s/또는 -1을 함께 묶을 수도 있고 아니면 그냥 예외를 던져서 일 때 잡아 당겨야한다. 예외적으로 JVM 자체도 예외가 될 수있다. 회복 할 수 없다.

기본적으로 발생하는 예외로부터 진정으로 복구 할 수있는 catch 논리를 작성할 수없는 경우 기본적으로 예외를 다시 throw합니다. 종종 Java의 경우 Java는 대부분의 예외를 거의 모두 포착해야하므로 예외는 대부분 검사 된 예외입니다.

체크 대 체크되지 않은 재실행 ... J2EE 애플리케이션을 수행 할 때 점검 된 예외 내부에서 새로운 체크되지 않은 예외 (RuntimeExpcetion)를 컨테이너로 다시 던질 때가 있습니다. 컨테이너에는 예외를 처리하고 사용자에게 기본 오류 페이지를 표시하는 기본 방법이 있습니다. 이는 Aspect Oriented 패러다임에서 비롯된 것입니다. 나는 또한 wrote about how to do this here입니다.

+0

나는 Java가 체크 예외를 잡아서 체크하지 않은 상태로 다시 던지는 패턴을 촉진하기를 정말로 바란다. 나는 그것이 의미 상으로 정확한 행동 과정이되는 상황이 확인 된 예외가 단순히 방법을 통해 거품을 내야하는 상황보다 더 많을 것이라고 가정합니다. – supercat