2012-12-06 4 views

답변

5

네, catch 블록이 잡히면 안되는 런타임 예외를 잡아두기 때문에 좋지 않습니다. 당신이 자바 7 사용하는 경우

, 당신은 당신이 (예를 들어, 런타임 execeptions) 예기치 못한 execptions에 대한 동일한 기능을 할 수 있다면

catch (SomeException | SomeOtherException | YetAnotherException e) { 
    ... 
} 
+0

저수준의'Exception' 클래스를 잡는 것이 나쁜 이유를 이해할 수 있습니다 만, 모든 가능한 예외가 공통의 부모를 가지고 있다면 (예외는 아닙니다),'IOException '? –

+1

@JB Nizet은 런타임 예외를 포착하지 않아야합니까? –

+0

@ user470184 : 런타임 예외는 코드의 버그를 나타냅니다. 코드에 버그가있는 경우 메서드에서 의미있는 것을 반환하지 않기를 바랍니다. 대신, 버그를 식별하고 수정하기 위해 메소드가 빨리 실패하기를 원합니다. 예외가 있다고해서 암이 없다고 가정 해보십시오. 코드에 버그가 있고 NullPointerException을 throw하면 암에 주목하지 않겠습니까? –

3

Exception catch 블록에서 모두를 사용하여 모든 예외를 잡는 것보다 가능한 예외 (하위 클래스)를 잡는 것이 항상 좋습니다. 여기에 reference이 있습니다.

0

를 사용하여 코드에 의해 발생 할 수 있습니다, 그것은 괜찮습니다.

그렇지 않으면 하위 클래스를 잡는 것이 좋습니다.

코드 일부가 NullPointerException을 던지면 어떻게 될지 생각해보십시오.

0

예, Exception 클래스를 잡아서 예외를 스퀠 핑하는 것은 나쁜 습관입니다. 예외는 핸들러에 문제점 보고서를 전송하도록 설계되었으며, 이렇게하면 심각한 오류를 숨길 수 있습니다.

0

예외적으로 의 경우에는을 처리해야합니다. 따라서 모든 예외를 처리 (catch)하는 응용 프로그램의 위치가 있기를 바랍니다. 일반적으로 이것은 완전한 응용 프로그램 충돌을 방지하기 위해 예기치 않은 예외가 발생하는 대신 사용자에게 변명의 메시지와 함께 복구 경로를 제공합니다. 일반적으로 클래스에서 예상되는 실패를 처리하고 클래스와 메서드가 호출자에게 제공하는 계약을 신뢰합니다. 예를 들어, 데이터베이스에서 ID 문자열을 사용하여 레코드를 가져 오는 방법에서는 계약서에 null ID가 허용되지 않는다고 명확하게 말할 수 있기 때문에 SQL 예외 만 잡습니다. 잘못된 입력 예외를 다시 호출자에게 던지십시오. 그렇지 않으면 잘못된 레벨에서 사용자 입력의 유효성을 검사하게 될 수 있습니다.

관련 문제