[java] try catch에서 Throwable과 Exception 사용의 차이점

때때로, 나는 본다

try {

} catch(Throwable e) {

}

그리고 때로는

try {

} catch(Exception e) {

}

차이점은 무엇입니까?



답변

잡으면 서 Throwable서브 클래스를 포함합니다 Error. 일반적으로 로그를 작성하거나 잘못 될 수있는 모든 것을 처리하려는 스레드의 최상위 “모두 잡기”수준을 제외하고는 그렇게하지 않아야합니다. 알 수없는 코드를 실행할 수 있으며 가능한 한 해당 코드에 문제가있는 것에 영향을받지 않아야하는 프레임 워크 유형 응용 프로그램 (예 : 응용 프로그램 서버 또는 테스트 프레임 워크)에서 더 일반적입니다 .


답변

첫 번째 것은의 모든 서브 클래스를 Throwable포함 Exception하고 (이 포함 하고 Error) 두 번째 것은의 모든 서브 클래스를 포착합니다 Exception.

Error프로그래밍 방식으로 복구 할 수 없으며 로깅 목적 (다시 통과)을 제외하고는 일반적으로 포착되지 않습니다. Exception프로그래밍 방식으로 복구 할 수 있습니다. 서브 클래스 RuntimeException는 프로그래밍 오류를 나타내며 일반적으로 포착되지도 않습니다.


답변

Thowable현재 사용되지 않는 Thread.stop()메소드 에서 스레드를 중지하기 위해 기본적으로 throw되는 ThreadDeath조차도 실제로 잡습니다 . 그래서 잡기로 Throwable당신은 당신이 적어도 당신의 catch 블록 거치지 않고 try 블록을 떠나지 않을 거라고 확신 할 수 있습니다,하지만 당신은 또한 준비를 처리해야 OutOfMemoryError하고 InternalErrorStackOverflowError.

캐치 Throwable는 모든 종류의 요청을 외부 코드에 위임하지만 서비스를 유지하기 위해 종료되지 않는 외부 서버 루프에 가장 유용합니다.


답변

ThrowableException뿐만 아니라 슈퍼 클래스입니다 Error. 정상적인 경우 Exception근본 원인을 잃지 않도록 항상 하위 클래스를 잡아야 합니다.

당신이 당신의 자바 코드의 제어에없는 잘못을가는 것들의 가능성을 볼 만 특별한 경우, 당신은 캐치 할 필요 ErrorThrowable.

네이티브 라이브러리가로드되지 않았다는 것을 표시하기 위해 Throwable을 잡는 것을 기억합니다.


답변

사람들이 Throwable을 사용하여 인프라 장애 / 비 가용성으로 인해 발생할 수있는 일부 오류를 포착하는 것을 보았습니다.


답변