2013-12-06 2 views
1
public class Confusing{ 
    public static void main(String[] args){ 
     Confusing cf = new Confusing(); 
     try{ 
      cf.confuse(); 
     }catch(Exception e){ 
      System.out.println("Caught exception: " + e.getMessage()); 
     } 
    } 

    public void confuse() throws Exception{ 
     try{ 
      throw new Exception("First Exception"); 
     }catch(Exception e){ 
      throw new Exception("Second Exception"); 

      }finally{ 
      throw new Exception("Third Exception"); 
     } 
    } 
} 

Почему результат Caught exception: Third Exception?Какое исключение нужно бросить?

Прежде всего, он выбрасывает First Exception, который впоследствии пойман. Затем выбросьте Second Exception, а также, наконец, Third Exception. Почему только Third Exception отправляется обратно на главную?

+2

Java? Пожалуйста, убедитесь, что вы пометили какой язык. – crashmstr

+2

http://stackoverflow.com/questions/3779285/exception-thrown-in-catch-and-finally-clause – Kaushal

ответ

4

Это прямо в спецификации языка Java. (§11.3, Run-Time Обработка исключения)

Если блок или попытка поймать в примерочных, наконец, или примерочных всеобъемлющая, наконец, оператор завершает резко, то, наконец, положение выполняется во время распространения исключение, даже , если в конечном счете не найдено соответствующее предложение catch.

Если, наконец, положение выполняется из-за резкого завершения попытку блока и сам по себе, наконец, раздел завершается преждевременно, то причина преждевременного завершения блока Ьгу отбрасывается и новая причина для преждевременного завершения распространяется оттуда.

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