2014-12-13 2 views
1

이 코드를 고려메인에서 예외가 발생하면 어떻게됩니까?

public class Test { 

    public static void main(String[] args) throws Exception { 
     mayFail(); 
     System.out.println("This shouldn't run"); 
    } 

    public static void mayFail() throws Exception{ 
     throw new Exception(); 
    } 

} 

은 내가 Exceptionthrow 앤 경우 main이 종료됩니다 알고있다.

제가 알고 싶은 것은 JVM (또는 어느 곳에서나) 이런 일이 발생할 때 실행되는 왕이 있습니까?

편집 : 나는 제대로이 아니라 멀리는 간다 이해한다면

public class Test{ 

    public static void main(String[] args) throws Exception { 
     UncaughtExceptionHandler a = new UncaughtExceptionHandler() { 

      @Override 
      public void uncaughtException(Thread t, Throwable e) { 
       System.out.println("Uncaught Exception"); 
      } 
     }; 

     Thread.setDefaultUncaughtExceptionHandler(a); 

     mayFail(); 
     System.out.println("This shouldn't run"); 
    } 

    public static void mayFail() throws Exception{ 
     throw new Exception(); 
    } 

} 

:

마스를 읽은 후 내가 너무 좋아이 Exception을 처리하기 위해 관리 대답 샤이 크? 그리고 UncaughtExceptionHandler없이 프로그램은 아무 것도하지 않고 종료됩니다.

+0

@Charlie 당신은 내 질문을 이해하지 못했습니다. –

+0

그래서 내 코멘트를 삭제했습니다 : I – Charlie

답변

2

기본적으로 main도 스레드로 실행되며 기본 threadGroup의 uncaughtException 메서드가 실행됩니다. 사용자 정의 uncaughtExceptionHandler을 명시 적으로 정의하고 등록한 경우 그 내용이 호출됩니다.

스레드가 부족하고 메인이 실행을 종료하고 main이 실행중인 유일한 비 데몬 스레드 인 경우, Java 프로세스도 종료됩니다.

+0

흥미 롭습니다, 나는 그걸로 엉망으로 만들고 내 질문을 업데이 트했습니다. 이게 정말 먼가요? 'UncaughtExceptionHandler'를 명시 적으로 정의하지 않았다면 아무 일도 일어나지 않을까요? –

+0

아니요. uncaughtException 처리기가 있는지 여부에 관계없이 JVM을 정상적으로 종료합니다. 이것은 당신의 질문에 관한 것이 었습니다. "JVM (또는 어디에서든지)이 일이 발생할 때 실행하는 프로 시저의 왕이 있다는 것이 무엇인지 알고 싶습니다." – SMA

+0

오, 나는 그것이 이더넷 방식을 종결시킬 것이라는 것을 알고 있습니다. 이 경우에 호출 된 일부 외부 (나에 의해 작성되지 않은) 절차를 사용했습니다. –

관련 문제