Control de flujo en Try Catch finalmente en Java

En este artículo, exploraremos todas las combinaciones posibles de try-catch-finally que pueden ocurrir cada vez que se genera una excepción y cómo ocurre el flujo de control en cada uno de los casos dados. 

  1. Flujo de control en la cláusula try-catch O en la cláusula try-catch-finally 
    • Caso 1: se produce una excepción en el bloque try y se maneja en el bloque catch
    • Caso 2: se produce una excepción en el bloque try no se maneja en el bloque catch
    • Caso 3: la excepción no ocurre en el bloque de prueba
  2. cláusula de prueba final 
    • Caso 1: se produce una excepción en el bloque de prueba
    • Caso 2: la excepción no ocurre en el bloque de prueba

Flujo de control en try-catch O try-catch-finally 

1. Se produce una excepción en el bloque de prueba y se maneja en el bloque de captura: si una declaración en el bloque de prueba generó una excepción, entonces el resto del bloque de prueba no se ejecuta y el control pasa al bloque de captura correspondiente . Después de ejecutar el bloque catch, el control se transferirá al bloque finalmente (si está presente) y luego se ejecutará el resto del programa. 

  • Flujo de control en try-catch:

Java

// Java program to demonstrate
// control flow of try-catch clause
// when exception occur in try block
// and handled in catch block
class GFG
{
    public static void main (String[] args)
    {
         
        // array of size 4.
        int[] arr = new int[4];
        try
        {
            int i = arr[4];
                 
            // this statement will never execute
            // as exception is raised by above statement
            System.out.println("Inside try block");
        }
        catch(ArrayIndexOutOfBoundsException ex)
        {
            System.out.println("Exception caught in Catch block");
        }
         
        // rest program will be executed
        System.out.println("Outside try-catch clause");
    }
}

Producción: 

Exception caught in Catch block
Outside try-catch clause
  • Flujo de control en la cláusula try-catch-finally:

Java

// Java program to demonstrate
// control flow of try-catch-finally clause
// when exception occur in try block
// and handled in catch block
class GFG
{
    public static void main (String[] args)
    {
         
        // array of size 4.
        int[] arr = new int[4];
         
        try
        {
            int i = arr[4];
                 
            // this statement will never execute
            // as exception is raised by above statement
            System.out.println("Inside try block");
        }
         
        catch(ArrayIndexOutOfBoundsException ex)
        {
            System.out.println("Exception caught in catch block");
        }
         
        finally
        {
            System.out.println("finally block executed");
        }
         
        // rest program will be executed
        System.out.println("Outside try-catch-finally clause");
    }
}

Producción: 

Exception caught in catch block
finally block executed
Outside try-catch-finally clause

2. La excepción que ocurrió en el bloque try no se maneja en el bloque catch: en este caso, se sigue el mecanismo de manejo predeterminado. Si el bloque finalmente está presente, se ejecutará seguido por el mecanismo de manejo predeterminado. 

  • cláusula try-catch:

Java

// Java program to demonstrate
// control flow of try-catch clause
// when exception occurs in try block
// but not handled in catch block
class GFG
{
    public static void main (String[] args)
    {
         
        // array of size 4.
        int[] arr = new int[4];
        try
        {
            int i = arr[4];
                 
            // this statement will never execute
            // as exception is raised by above statement
            System.out.println("Inside try block");
        }
         
        // not a appropriate handler
        catch(NullPointerException ex)
        {
            System.out.println("Exception has been caught");
        }
         
        // rest program will not execute
        System.out.println("Outside try-catch clause");
    }
}

Error de tiempo de ejecución: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at GFG.main(GFG.java:12)
  • cláusula try-catch-finally:

Java

// Java program to demonstrate
// control flow of try-catch-finally clause
// when exception occur in try block
// but not handled in catch block
class GFG
{
    public static void main (String[] args)
    {
         
        // array of size 4.
        int[] arr = new int[4];
         
        try
        {
            int i = arr[4];
                 
            // this statement will never execute
            // as exception is raised by above statement
            System.out.println("Inside try block");
        }
         
        // not a appropriate handler
        catch(NullPointerException ex)
        {
            System.out.println("Exception has been caught");
        }
         
        finally
        {
            System.out.println("finally block executed");
        }
         
        // rest program will not execute
        System.out.println("Outside try-catch-finally clause");
    }
}

Producción : 

finally block executed

Error de tiempo de ejecución: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at GFG.main(GFG.java:12)

3. La excepción no ocurre en el bloque de prueba: en este caso, el bloque catch nunca se ejecuta, ya que solo deben ejecutarse cuando ocurre una excepción. finalmente el bloque (si está presente) se ejecutará seguido por el resto del programa. 

  • cláusula try-catch:

Java

// Java program to demonstrate try-catch
// when an exception doesn't occurred in try block
class GFG
{
    public static void main (String[] args)
    {
         
        try
        {
             
            String str = "123";
                 
            int num = Integer.parseInt(str);
                 
            // this statement will execute
            // as no any exception is raised by above statement
            System.out.println("Inside try block");
             
        }
         
        catch(NumberFormatException ex)
        {
                 
            System.out.println("catch block executed...");
                 
        }
 
        System.out.println("Outside try-catch clause");
    }
}

Producción : 

Inside try block
Outside try-catch clause
  • cláusula try-catch-finally 

Java

// Java program to demonstrate try-catch-finally
// when exception doesn't occurred in try block
class GFG
{
    public static void main (String[] args)
    {
         
    try
    {
         
        String str = "123";
             
        int num = Integer.parseInt(str);
             
        // this statement will execute
        // as no any exception is raised by above statement
        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");
    }
}

Producción : 

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

Flujo de control en try-finally

En este caso, no importa si ocurre una excepción en el bloque try o no, finalmente siempre se ejecutará. Pero el flujo de control dependerá de si se ha producido una excepción en el bloque de prueba o no. 

1. Excepción planteada: si se ha producido una excepción en el bloque de prueba, el flujo de control finalmente se bloqueará seguido del mecanismo de manejo de excepciones predeterminado.

Java

// Java program to demonstrate
// control flow of try-finally clause
// when exception occur in try block
class GFG
{
    public static void main (String[] args)
    {
         
        // array of size 4.
        int[] arr = new int[4];
        try
        {
            int i = arr[4];
                 
            // this statement will never execute
            // as exception is raised by above statement
            System.out.println("Inside try block");
        }
         
        finally
        {
            System.out.println("finally block executed");
        }
         
        // rest program will not execute
        System.out.println("Outside try-finally clause");
    }
}

Producción : 

finally block executed
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at GFG.main(GFG.java:11)

2. Excepción no planteada: si no se produce una excepción en el bloque de prueba, el flujo de control finalmente se bloqueará seguido del resto del programa.

Java

// Java program to demonstrate
// control flow of try-finally clause
// when exception doesn't occur in try block
class GFG
{
    public static void main (String[] args)
    {
         
        try
        {
            String str = "123";
             
            int num = Integer.parseInt(str);
             
            // this statement will execute
            // as no any exception is raised by above statement
            System.out.println("Inside try block");
        }
         
        finally
        {
            System.out.println("finally block executed");
        }
         
        // rest program will be executed
        System.out.println("Outside try-finally clause");
    }
}

Producción :

Inside try block
finally block executed
Outside try-finally clause

Artículos relacionados:  

Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *