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, чтобы либо прервать программу, либо позволить программе продолжить?

465   5  

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

    Ничего не найдено.