En Java , podemos usar un bloque de prueba dentro de un bloque de prueba. Cada vez que se ingresa una declaración de prueba, el contexto de esa excepción se coloca en una pila. A continuación se muestra un ejemplo de un intento anidado.
En este ejemplo, el bloque de prueba interno (o bloque de prueba2) se usa para manejar la excepción ArithmeticException, es decir, la división por cero. Después de eso, el bloque de prueba externo (o bloque de prueba) maneja la ArrayIndexOutOfBoundsException.
Ejemplo 1:
class NestedTry { // main method public static void main(String args[]) { // Main try block try { // initializing array int a[] = { 1, 2, 3, 4, 5 }; // trying to print element at index 5 System.out.println(a[5]); // try-block2 inside another try block try { // performing division by zero int x = a[2] / 0; } catch (ArithmeticException e2) { System.out.println("division by zero is not possible"); } } catch (ArrayIndexOutOfBoundsException e1) { System.out.println("ArrayIndexOutOfBoundsException"); System.out.println("Element at such index does not exists"); } } // end of main method }
ArrayIndexOutOfBoundsException Element at such index does not exists
Cada vez que un bloque de prueba no tiene un bloque de captura para una excepción en particular, los bloques de captura del bloque de prueba principal se inspeccionan en busca de esa excepción, y si se encuentra una coincidencia, se ejecuta ese bloque de captura.
Si ninguno de los bloques catch maneja la excepción, el sistema de tiempo de ejecución de Java manejará la excepción y se mostrará un mensaje generado por el sistema para la excepción.
Ejemplo 2:
class Nesting { // main method public static void main(String args[]) { // main try-block try { // try-block2 try { // try-block3 try { int arr[] = { 1, 2, 3, 4 }; System.out.println(arr[10]); } // handles ArithmeticException if any catch (ArithmeticException e) { System.out.println("Arithmetic exception"); System.out.println(" try-block1"); } } // handles ArithmeticException if any catch (ArithmeticException e) { System.out.println("Arithmetic exception"); System.out.println(" try-block2"); } } // handles ArrayIndexOutOfBoundsException if any catch (ArrayIndexOutOfBoundsException e4) { System.out.print("ArrayIndexOutOfBoundsException"); System.out.println(" main try-block"); } catch (Exception e5) { System.out.print("Exception"); System.out.println(" handled in main try-block"); } } }
ArrayIndexOutOfBoundsException main try-block