java try catch когда прерывается поток программы?
Здравствуйте, я не очень хорошо знаком с обработкой исключений в Java, так что:
Как говорится в разделе в основном блоке try / catch, когда я ловлю исключение в блоке Try, когда прерывается поток программы?
try{
//some code that raises an Exception
}catch(Exception e){
// react to interrupt or continue program flow
}finally{
// always done after the catch
}
//when is this code executed?
Оператор finally всегда выполняется после try catch, поэтому что нужно сделать в части catch, чтобы либо прервать программу, либо позволить программе продолжить?
5 ответов:
Поток команд прерывается, когдалюбое исключение происходит в любом месте.
Если исключение возникает в диапазоне
try, и класс исключения "присваивается" классу, указанному в предложенииcatch, то управление передается в начало блока catch. (Если класс исключения не "присваивается", то исключение просто "всплывает" к следующему внешнему блокуtryили потоку EH.)Если блок
catchне выбрасывает исключение (или перестроить исходное), то исключение считается "обработанным", и выполнение продолжается сразу после Спискаcatchпредложений для этогоtry. Это может означать, что поток входит в блокfinally, прежде чем продолжить в конце блокаfinally.Если исключение не поймано, или исключение (re)сигнализируется в блоке
catch, то выполняется любой следующий блокfinally, прежде чем исключение "всплывет".Если
returnвыполняется вtryилиcatchблок тогда любойfinallyвыполняется до того, какreturnвступит в силу.
Если вы перехватываете исключение в блоке catch, и блок finally не создает никаких исключений, операторы после блока finally будут выполняться сразу же после выполнения блока finally.
Если вы не перехватываете исключение в блоке catch или создаете новое исключение либо в блоке catch, либо в блоке finally, операторы после блока finally не будут выполняться, и следующий код, который будет выполнен, является самым непосредственным включающим блок catch это может обрабатывать брошенное исключение.
Catch()блок должен уведомлять / обрабатывать исключения.Цитирую из docs,
Блок catch содержит код, который выполняется, если и когда вызывается обработчик исключений. Система выполнения вызывает исключение обработчик, когда обработчик является первым в стеке вызовов, чей ExceptionType соответствует типу создаваемого исключения. Система считает это совпадением, если брошенный объект может быть законно присвоен обработчик исключений аргумент.
И
Как говорится в основной теме try / catch block, когда я ловлю исключение в блоке Try, когда происходит поток программы прерывается?
Блоки Catch предназначены для обработки исключений. Так что если ошибок нет
Catchблок не будет выполнен, однакоfinally()будет выполнен
try { System.out.println("Throw exception"); int i = 5/0; } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); e.printStackTrace(); }finally{ System.out.println("Doubt solved if line prints"); } System.out.println("After exception");Здесь код попробуйте его самостоятельно я думаю, что не будет необходимости объяснения после выполнения этого до тех пор, пока не произойдет исключение плитки он будет непосредственно идти к catch и даже тогда он будет идти к выполнению finally, а затем дальнейшего кода.
Выполните следующий код, чтобы понять поток исключений для исключений.
try { //line 1 //line 2 throw new Exception(); //line 3 // line 4 // line 5 } catch (Exception e) { // if exception occur at line 3, line 4 & 5 will not executed because of interrupt in execution flow. // since your program is interrupted when exception occur. System.out.println("Catch block will execute after exception !"); }finally{ System.out.println("Finally block will execute after exception !"); } // your program will continue its execution. System.out.println("Code after the finally block also exectute after the exception !");Вывод
Catch block will execute after exception ! Finally block will execute after exception ! Code after the finally block also exectute after the exception !
Comments