2013-08-28 2 views
1

스택 추적이 발생합니다 : 전파 예외는 다음과 같이

c 
b 
a 
main 

cFileNotFoundException을 던지고 있다고 가정합니다. 나는 을 사용하여 b에이 예외를 전파했다. 그리고 b에서 a으로 그리고 a에서 main으로 예외를 전파하고 있습니다.

메인에 throws FileNotFoundException을 사용할 때 예외는 전파됩니까?

FileNotFoundException에 대해서 catch을 주 내부에 정의하지 않았으므로, throws 만 정의했기 때문에.

답변

3

Java 런타임에서 스택 추적을 인쇄하고 프로그램을 중단합니다.

는 (이 질문을 주도 무엇 궁금 당신은 당신의 행동에 의해 혼동 코드를 시도해 봤어.??)

+0

나는 메소드를 호출 할 때 메소드 호출시 예외를 처리해야하는 것과 같은 어딘가를 읽었습니다. 메소드 호출시 예외를 throw합니다. 다만 예외를 선언했습니다. 의심 스러움 자체가 예외를 처리하기에 충분합니다. – user2345736

+0

글쎄, 호출하는 메서드는 "아무도 이것을 만지지 말라. 아무도 나를 부르면 안된다"고 말하는 것으로 예외를 처리한다. 네, 충분합니다. 그것이 옳은 일인지 극단적으로 상황 의존적입니다. –

+0

감사합니다. Sebastian.So 예외는 main 메소드에서 throw를 사용할 때 JVM에서 처리됩니다. – user2345736

2

예외는 JVM에 의해 처리 될 것이다 - 그것은 스택 트레이스를 출력하고 종료. 도중에 어딘가에 잡히지 않는 Runtime-Exceptions에도 똑같이 적용됩니다.

+0

감사합니다. 메인 메소드가 (내 예제에 따라) 예외에 의해 throw되는 예외를 throw 할 때 (catch를 사용하지 않고), 예외가 JVM에 의해 처리 될 것입니다. 내가 틀렸다면 나를 수정하십시오. – user2345736

3

캐치되지 않는 예외는 결국 코드를 ​​실행하는 스레드의 UncaughtExceptionHandler에 의해 처리됩니다. Thread 클래스에는 캐치되지 않는 예외에 대한 처리기를 설정하는 메서드가 있습니다. Thread#setDefaultUncaughtExceptionHandler의 문서는 과정을 설명 :

catch되지 않은 예외 처리 후 스레드의 ThreadGroup 객체에 의해 마지막으로 기본 캐치되지 않는 예외 핸들러 스레드에 의해 처음으로 제어됩니다. 스레드에 명시 적으로 포착되지 않은 예외 핸들러 세트가없고 스레드의 스레드 그룹 (상위 스레드 그룹 포함)이 uncaughtException 메소드를 특화하지 않으면 기본 핸들러의 uncaughtException 메소드가 호출됩니다.

기본 캐치 예외 처리기를 설정하면 응용 프로그램에서 시스템의 "기본"동작을 이미 받아 들일 수있는 스레드에 대해 캐치되지 않은 예외 (예 : 특정 장치 또는 파일에 대한 로깅)를 처리하는 방식을 변경할 수 있습니다 제공됩니다. 다른 캐치되지 않는 예외 핸들러가 설정되어 있지 않은 경우

ThreadGroup의 하나 System.err에 예외의 스택 트레이스를 출력합니다.

사양에서는 catch되지 않는 예외 처리기를 실행해야하는 스레드가 아니라 Oracle/OpenJDK JVM에서 종료하려고하는 스레드 (예외를 발생시킨 스레드)를 지정하는 것처럼 보입니다.