Requisito previo: Excepciones en Java , Excepciones comprobadas frente a no comprobadas
Propagación de excepciones: primero se lanza una excepción desde la parte superior de la pila y, si no se detecta, baja la pila de llamadas al método anterior.
Después de que un método lanza una excepción, el sistema de tiempo de ejecución intenta encontrar algo para manejarlo. El conjunto de posibles «algo» para manejar la excepción es la lista ordenada de métodos que se llamaron para llegar al método donde ocurrió el error. La lista de métodos se conoce como pila de llamadas y el método de búsqueda es Propagación de excepciones.
Propagación de excepciones en excepciones no comprobadas
cuando ocurre una excepción, la propagación es un proceso en el que la excepción se coloca desde la parte superior hasta la parte inferior de la pila. Si no se detecta una vez, la excepción vuelve a descender al método anterior y así sucesivamente hasta que se detecta o hasta que llega al final de la pila de llamadas. Esto se llama propagación de excepciones y esto sucede en el caso de Excepciones no verificadas.
En el ejemplo a continuación, la excepción ocurre en el método m() donde no se maneja, por lo que se propaga al método n() anterior donde no se maneja, nuevamente se propaga al método p() donde se maneja la excepción.
La excepción se puede manejar en cualquier método en la pila de llamadas, ya sea en el método main(), el método p(), el método n() o el método m().
Nota: De manera predeterminada, las excepciones no verificadas se reenvían en la string de llamadas (propagadas).
// Java program to illustrate // unchecked exception propagation // without using throws keyword class Simple { void m() { int data = 50 / 0; // unchecked exception occurred // exception propagated to n() } void n() { m(); // exception propagated to p() } void p() { try { n(); // exception handled } catch (Exception e) { System.out.println("Exception handled"); } } public static void main(String args[]) { Simple obj = new Simple(); obj.p(); System.out.println("Normal flow..."); } }
Producción:
Exception handled Normal flow...
Propagación de excepciones en excepciones marcadas
A diferencia de las excepciones no verificadas, la propagación de la excepción no ocurre en el caso de la excepción verificada y es obligatorio usar la palabra clave throw aquí. Solo se propagan las excepciones no comprobadas. Las excepciones comprobadas arrojan un error de compilación.
En el siguiente ejemplo, si omitimos la palabra clave throws de las funciones m() y n(), el compilador generará un error de tiempo de compilación. Porque, a diferencia del caso de las excepciones no verificadas, las excepciones verificadas no pueden propagarse sin usar la palabra clave throws.
Nota: De forma predeterminada, las excepciones marcadas no se reenvían en la string de llamadas (se propagan).
// Java program to illustrate exception propagation // in checked exceptions and it can be propagated // by throws keyword ONLY import java.io.IOException; class Simple { // exception propagated to n() void m() throws IOException { // checked exception occurred throw new IOException("device error"); } // exception propagated to p() void n() throws IOException { m(); } void p() { try { // exception handled n(); } catch (Exception e) { System.out.println("exception handled"); } } public static void main(String args[]) { Simple obj = new Simple(); obj.p(); System.out.println("normal flow..."); } }
Producción:
exception handled normal flow...
Publicación traducida automáticamente
Artículo escrito por Lokesh Singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA