Рубрики

Управление потоком в try catch наконец в Java

В этой статье мы рассмотрим все возможные комбинации try-catch-finally, которые могут произойти всякий раз, когда возникает исключение, и как происходит поток управления в каждом из указанных случаев.

    1. Поток управления в предложении try-catch ИЛИ в предложении try-catch-finally
      • Случай 1: Исключение происходит в блоке try и обрабатывается в блоке catch
      • Случай 2: исключение происходит в блоке try, не обрабатывается в блоке catch
      • Случай 3: исключение не происходит в блоке try
    2. предложение попробуй наконец
      • Случай 1: Исключение происходит в блоке try
      • Случай 2: исключение не происходит в блоке try

    Управление потоком в try-catch ИЛИ try-catch-finally

    1. Исключение происходит в блоке try и обрабатывается в блоке catch: если оператор в блоке try вызвал исключение, то остальная часть блока try не выполняется, и управление переходит к соответствующему блоку catch. После выполнения блока catch управление будет переведено в блок finally (если имеется), а затем будет выполнена остальная программа.
      • Контроль потока в try-catch:

        // Java-программа для демонстрации
        // управление потоком предложения try-catch
        // когда происходит исключение в блоке try
        // и обрабатывается в блоке catch

        class GFG 

        {

            public static void main (String[] args) 

            {

                  

                // массив размером 4.

                int[] arr = new int[4];

                try

                {

                    int i = arr[4];

                          

                    // этот оператор никогда не будет выполнен

                    // как исключение вызвано приведенным выше утверждением

                    System.out.println("Inside try block");

                }

                catch(ArrayIndexOutOfBoundsException ex)

                {

                    System.out.println("Exception caught in Catch block");

                }

                  

                // программа отдыха будет выполнена

                System.out.println("Outside try-catch clause");

            }

        }

        Выход:

        Exception caught in Catch block
        Outside try-catch clause
        
        
      • Поток управления в предложении try-catch-finally:

        // Java-программа для демонстрации
        // управление потоком предложения try-catch-finally
        // когда происходит исключение в блоке try
        // и обрабатывается в блоке catch

        class GFG

        {

            public static void main (String[] args) 

            {

                  

                // массив размером 4.

                int[] arr = new int[4];

                  

                try

                {

                    int i = arr[4];

                          

                    // этот оператор никогда не будет выполнен

                    // как исключение вызвано приведенным выше утверждением

                    System.out.println("Inside try block");

                }

                  

                catch(ArrayIndexOutOfBoundsException ex)

                {

                    System.out.println("Exception caught in catch block");

                }

                  

                finally

                {

                    System.out.println("finally block executed");

                }

                  

                // программа отдыха будет выполнена

                System.out.println("Outside try-catch-finally clause");

            }

        }

        Выход:

        Exception caught in catch block
        finally block executed
        Outside try-catch-finally clause
        
    2. Исключительная ситуация в try-блоке не обрабатывается в блоке catch: в этом случае используется механизм обработки по умолчанию. Если блок finally присутствует, он будет выполнен с последующим механизмом обработки по умолчанию.
      • предложение try-catch:

        // Java-программа для демонстрации
        // управление потоком предложения try-catch
        // когда происходит исключение в блоке try
        // но не обрабатывается в блоке catch

        class GFG 

        {

            public static void main (String[] args) 

            {

                  

                // массив размером 4.

                int[] arr = new int[4];

                try

                {

                    int i = arr[4];

                          

                    // этот оператор никогда не будет выполнен

                    // как исключение вызвано приведенным выше утверждением

                    System.out.println("Inside try block");

                }

                  

                // не подходящий обработчик

                catch(NullPointerException ex)

                {

                    System.out.println("Exception has been caught");

                }

                  

                // программа отдыха не будет выполнена

                System.out.println("Outside try-catch clause");

            }

        }

        Ошибка выполнения:

        Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
            at GFG.main(GFG.java:12)
        
      • предложение try-catch-finally:

        // Java-программа для демонстрации
        // управление потоком предложения try-catch-finally
        // когда происходит исключение в блоке try
        // но не обрабатывается в блоке catch

        class GFG

        {

            public static void main (String[] args) 

            {

                  

                // массив размером 4.

                int[] arr = new int[4];

                  

                try

                {

                    int i = arr[4];

                          

                    // этот оператор никогда не будет выполнен

                    // как исключение вызвано приведенным выше утверждением

                    System.out.println("Inside try block");

                }

                  

                // не подходящий обработчик

                catch(NullPointerException ex)

                {

                    System.out.println("Exception has been caught");

                }

                  

                finally

                {

                    System.out.println("finally block executed");

                }

                  

                // программа отдыха не будет выполнена

                System.out.println("Outside try-catch-finally clause");

            }

        }

        Выход :

        finally block executed

        Ошибка выполнения:

        Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
            at GFG.main(GFG.java:12)
    3. Исключение не возникает в блоке try: в этом случае блок catch никогда не запускается, поскольку он предназначен только для запуска при возникновении исключения. Блок finally (если имеется) будет выполнен с последующей остальной частью программы.
      • предложение try-catch:

        // Java-программа для демонстрации try-catch
        // когда исключение не произошло в блоке try

        class GFG

        {

            public static void main (String[] args)

            {

                  

                try 

                {

                      

                    String str = "123";

                          

                    int num = Integer.parseInt(str);

                          

                    // этот оператор выполнится

                    // поскольку никакое исключение не вызывается приведенным выше утверждением

                    System.out.println("Inside try block");

                      

                }

                  

                catch(NumberFormatException ex)

                {

                          

                    System.out.println("catch block executed...");

                          

                }

          

                System.out.println("Outside try-catch clause");

            }

        }

        Выход :

        Inside try block
        Outside try-catch clause
        
      • предложение try-catch-finally

        // Java-программа для демонстрации try-catch-finally
        // когда исключение не произошло в блоке try

        class GFG

        {

            public static void main (String[] args)

            {

                  

            try 

            {

                  

                String str = "123";

                      

                int num = Integer.parseInt(str);

                      

                // этот оператор выполнится

                // поскольку никакое исключение не вызывается приведенным выше утверждением

                System.out.println("try block fully executed");

                  

            }

              

            catch(NumberFormatException ex)

            {

                      

                System.out.println("catch block executed...");

                      

            }

              

            finally 

            {

                System.out.println("finally block executed");

            }

          

            System.out.println("Outside try-catch-finally clause");

            }

        }

        Выход :

        try block fully executed
        finally block executed
        Outside try-catch clause
        

    Контроль потока в try-finally

    В этом случае, независимо от того, произойдет ли исключение в блоке try или нет, в конечном итоге всегда будет выполняться. Но поток управления будет зависеть от того, произошло ли исключение в блоке try или нет.

    1. Возникло исключение: если в блоке try возникла исключительная ситуация, поток управления будет, наконец, блоком, за которым следует механизм обработки исключений по умолчанию.

      // Java-программа для демонстрации
      // управление потоком предложения try-finally
      // когда происходит исключение в блоке try

      class GFG

      {

          public static void main (String[] args) 

          {

                

              // массив размером 4.

              int[] arr = new int[4];

              try

              {

                  int i = arr[4];

                        

                  // этот оператор никогда не будет выполнен

                  // как исключение вызвано приведенным выше утверждением

                  System.out.println("Inside try block");

              }

                

              finally

              {

                  System.out.println("finally block executed");

              }

                

              // программа отдыха не будет выполнена

              System.out.println("Outside try-finally clause");

          }

      }

      Выход :

      finally block executed
      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
          at GFG.main(GFG.java:11)
      
      
    2. Исключение не вызывается: если исключение не возникает в блоке try, поток управления будет, наконец, блоком, за которым следует остальная часть программы.

      // Java-программа для демонстрации
      // управление потоком предложения try-finally
      // когда исключение не происходит в блоке try

      class GFG 

      {

          public static void main (String[] args) 

          {

                

              try

              {

                  String str = "123";

                    

                  int num = Integer.parseInt(str);

                    

                  // этот оператор выполнится

                  // поскольку никакое исключение не вызывается приведенным выше утверждением

                  System.out.println("Inside try block");

              }

                

              finally

              {

                  System.out.println("finally block executed");

              }

                

              // программа отдыха будет выполнена

              System.out.println("Outside try-finally clause");

          }

      }

      Output :
      Inside try block
      finally block executed
      Outside try-finally clause
      

    Статьи по Теме:

    Эта статья предоставлена Гауравом Миглани . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

    Рекомендуемые посты:

    Управление потоком в try catch наконец в Java

    0.00 (0%) 0 votes