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.
- 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
- 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