2014-12-13 6 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(); 
    } 

} 

Я знаю main прекращается, когда Exception является throw н.

Что я хочу знать, есть ли какой-то король процедуры в JVM (или в любом месте), который выполняется, когда это происходит?

EDIT:

После прочтения Алмас SHAIKH ответить мне удалось справиться с этой Exception так:

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(); 
    } 

} 

Так что, если я правильно понимаю это, насколько это идет? И без UncaughtExceptionHandler программа просто заканчивается, ничего не делая на самом деле?

+0

@Charlie Вы не поняли мой вопрос. –

+0

Вот почему я удалил свой комментарий: I – Charlie

ответ

2

По умолчанию даже main выполняется как поток, а по умолчанию используется threadGroup's uncaughtException. Если вы четко определили свой пользовательский uncaughtExceptionHandler и зарегистрировали его, то это то, что будет называться.

Сообщайте, что вы находитесь вне темы, а ваш главный завершает ее выполнение, и если main - это единственный поток, который не работает, тогда ваш Java-процесс также завершится.

+0

Интересно, я немного перепутал это и обновил свой вопрос. Так это действительно так далеко, так оно и есть? и ничего действительно не происходит, если я не определил явно «UncaughtExceptionHandler»? –

+0

Нет. Это приведет к прекращению JVM изящно независимо от того, у вас есть обработчик uncaughtException или нет. Это было в отношении вашего вопроса: «Что я хочу знать, есть ли какой-то король процедуры в JVM (или где угодно), которая выполняется, когда это происходит» – SMA

+0

О, я знаю, что это закончит эфир, мне просто интересно, была использована внешняя (не написанная мной) процедура, которая была вызвана в этом случае. –

Смежные вопросы