2011-06-14 4 views

답변

2

임의의 Throwable이 잡힐 수 있습니다. 그러나 Error의 하위 클래스는 사용자 응용 프로그램 코드에 의해 포착되지 않습니다. 그들은 여전히 ​​잡힐 수 있지만, 일부 오류는 심지어 나쁜 상태로 응용 프로그램을 떠날 수도 있습니다 (예를 들어 OutOfMemoryError).

+0

흠 - 확실하지 않습니다. "사용자 응용 프로그램 코드"에 따라 다릅니다. 원격 로그 작성기 서비스이고 디스크가 부족하면 오래된 로그 파일을 지우고 다시 시도하여 공간을 비울 수 있습니다. – Bohemian

+0

@Bohemian : 거의 확실하게 IOException이 될 수 있습니다 ... –

+0

@ 보헤미안 Java 언어 사양 http://java.sun.com/docs/books/jls/second_edition/html/exceptions.doc.html'Error 클래스와 그 서브 클래스는 평범한 프로그램이 보통 복구 할 것으로 예상되지 않는 예외입니다. 그 (것)들을 붙잡고 싶을 아무 케이스도 없다. 귀하의 특정 예제에서 어떤 오류를 언급합니까? –

0

catch 블록은 선언 된 Throwable 형식의 하위 형식을 catch합니다. 예를 들어 catch (Exception ex) {}은 RuntimeException (un-checked)이 자식이기 때문에 try 블록에 던져지는 모든 Exception을 처리합니다.

예외의 하위 클래스가 아니므로 오류 인스턴스를 catch하지 않습니다. 정말로 catch를 모두 원한다면 catch (Throwable th)과 같은 것을 사용할 수 있습니다. 이것은 오류가 발생하기 때문에 일반적으로 응용 프로그램이 쉽게 복구 할 수없는 문제를 나타냅니다.

0

체크/체크되지 않은 예외에 대해서는 잘 알려진 사실이 있습니다. 은 컴파일시에만입니다.

추한 트릭으로 throw 된 것으로 선언되지 않은 곳에 체크 예외를 던지면 체크되지 않은 예외처럼 처리됩니다 (즉, 많은 예외가 발생합니다). 가장 가까운 일치하는 catch 블록에 도달하는 데 필요한만큼 스택 프레임). 그리고 네, 그런 트릭이 존재합니다.

그리고 기본적으로 평균을 Thread default uncaught exception handler (또는 per-thread uncaught exception handler)으로 처리하면 예 : "정상적으로"잡아서 처리하지 않는 체크 된 예외와 확인되지 않은 예외를 모두 처리합니다.

관련 문제