2016-09-26 2 views
0

내가 정의하고 잡는 여러 예외 유형 (예 : 네트워크 오류, 유효성 검사 오류 등)이 있습니다. 이제는 "예상하지 못한 다른 예외를 모두 잡아라. . " 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?Java - 다른 모든 예기치 않은 예외 캐치

일반용 Excepion e만을 사용하고 있습니까?

감사

+0

예. 또는 Throwable을 잡을 수는 있습니다 만, 그건 적당하지 않습니다. – Kon

답변

7

예상되는 모든 예외를 작성한 다음 예외와 함께 처리하는 것이 좋습니다 (예 :

try 
{ 
} 
catch (expectedException1 e) 
{ 
} 
. 
. 
. 
catch (Exception e) 
{ 
} 

이렇게하면 예외를 얻을 때, 당신은 일반적으로 그것을 처리 할 수 ​​있으며, 마지막으로 기대하고 개별 예외 이상의 조치를 취하기에서 당신을 도울 것입니다. Exception 클래스는 모든 예외의 맨 위에 있으므로, 마지막 예외가 필요합니다. 일반적인 규칙은 목록을 내려갈 때 계층 구조가 최상위로 이동하는 것입니다.

0

예외 하나가 합리적으로 잡는 것이 예외의 "큰"유형이다; 그렇지 않다면 무엇이든 포함합니다. Error.

경고의 단어 : 구체적인 컨텍스트에 따라 잡기 예외은 여전히 ​​나쁜 습관 일 수 있습니다. 그 두 가지 중 하나 일반적으로 표시됩니다 이렇게 : 당신은 당신의 코드가

  • 코드를 무엇을하고 있는지 모를

    1. 것은 당신이 정말로 그것을 나올 수도 알 수 없을 정도로 복잡하다

    그리고 두 옵션 모두; 그것은 피할 수있는 것입니다!

    즉, 잡기 예외은 일반적으로 매우 높은 수준에서만 수행하는 것으로 응용 프로그램의 하위 수준은 어떤 예외가 낮은 수준에서 발생하는지 정확하게 알아야합니다. 그걸 잡아라. 어쨌든 예외에 대해 하나의 캐치 ("먼 외부"에 있음) 만 있으면됩니다. 왜냐하면 : catch 블록에서 할 수있는 유일한 일은 - 일부 로깅과 오류 메시지입니다.

  • +0

    세 번째 옵션이 있습니다. 아마도 가장 정당한 케이스 일 것입니다. 거의 컨트롤 할 수없는 플러그 가능한 기능이 있습니다. – biziclop

    -1

    모범 사례로 RuntimeException을 확장하지 않는 예외는 catch되고 처리되거나 throw되어야합니다. setUncaughtExceptionHandler도 있습니다. java.lang.Thread으로 설정하면 'catch-all'으로 사용할 수 있습니다.

    +0

    setUncaughtExceptionHandler는 코드에서 가능한 다른 예외 처리기로 인터럽트 할 수 있습니다. 충돌보고 시스템에서 이상적으로 사용됩니다. 일반적으로 모든 예외를 잡기 위해 이것을 사용하면 안됩니다! 또한, 사용된다면 우리의 작업이 끝나면 원래 예외 핸들러로 전달하기 위해 적절한주의를 기울여야합니다. – prabodhprakash