Explicación de la jerarquía de excepciones en Java

Publicado: 2022-03-08

El término 'Excepción' es la abreviatura de "evento excepcional". En Java, una excepción es esencialmente un evento que ocurre durante la ejecución de un programa e interrumpe el flujo normal del programa. Las excepciones son no deseadas y en su mayoría inesperadas, que generalmente surgen en tiempo de ejecución o compilación. Todas estas excepciones deben manejarse para garantizar que el programa se ejecute con su flujo natural.

Sin embargo, antes de manejar Excepciones, sería útil saber qué diferentes tipos de Excepciones están presentes con Java. A través de este artículo, veamos los distintos tipos de excepciones en Java y la jerarquía de excepciones que siguen.

Tabla de contenido

Jerarquía de excepciones en Java

La jerarquía de excepciones en el lenguaje de programación Java comienza con la clase Throwable, que proviene de la clase Object y es su subclase directa, mientras que la clase Exception presenta todas las ramas de esta clase Throwable en dos subclases: error y excepción. Aquí hay un diagrama de flujo para comprender mejor la jerarquía de excepciones de Java:

La clase Exception presenta todas las excepciones que podría necesitar manejar mientras trabaja con el lenguaje de programación Java. Algunos ejemplos comúnmente conocidos y encontrados de tales excepciones incluyen NullPointerException, ClassNotFoundException, IllegalArgumentException, etc.

Por otro lado, la clase Error se ocupa de problemas más graves en la arquitectura de su programa Java y no se soluciona dentro del código de la aplicación. Algunos ejemplos de errores en Java son InternalError, AssertionError, OutOfMemoryError, etc.

Las excepciones en Java se dividen en dos categorías:

  • Excepciones marcadas: también se conocen como excepciones en tiempo de compilación.
  • Excepciones no verificadas: también se conocen como excepciones de tiempo de ejecución.

Un punto importante a tener en cuenta en este momento es que las excepciones no marcadas son todas subclases de la clase RuntimeException. Hablaremos más sobre las excepciones marcadas y no marcadas más adelante en este artículo. Pero antes de eso, veamos esencialmente cómo los errores y las excepciones difieren en su funcionamiento para que no haya confusión.

Errores y excepciones en Java: ¿en qué se diferencian?

La documentación oficial del lenguaje de programación Java se refiere a los errores como sucesos durante la programación de Java que “indican problemas graves que una aplicación razonable no debería tratar de detectar”. La gravedad de Errors queda clara por la forma en que está formulada esta declaración. Claramente, esto se refiere al conjunto de problemas que su programa podría enfrentar y de los que no es posible recuperarse sin refactorizar el código o modificar la arquitectura de la aplicación Java.

Veamos un método Java que arrojará un error:

impresión de vacío estático público (String S) {

huellas dactilares);

}

En el código mencionado anteriormente, el método print() actúa como un método recursivo que sigue llamándose a sí mismo repetidamente, una y otra vez, hasta que alcanza el tamaño máximo permitido para una pila de subprocesos en Java. En ese momento, sale de la ejecución con un error muy común: StackOverflowError, que dice algo como:

Excepción en el hilo "principal" java.lang.StackOverflowError

en StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)

Como muestra el ejemplo anterior, el método arroja un ejemplo, pero este error no se puede manejar en el código en sí. Entonces, el programa simplemente deja de ejecutarse porque el daño es irrecuperable. Como solución, el código necesita ser modificado.

A diferencia de los errores, las excepciones indican condiciones que pueden ser detectadas por una aplicación razonable. Las excepciones en Java incluyen problemas que pueden ocurrir en tiempo de compilación o durante el tiempo de ejecución. Estas excepciones ocurren con bastante frecuencia en todas las aplicaciones, especialmente durante la fase de prueba y depuración. Como resultado, las excepciones en Java se pueden manejar dentro del propio programa para garantizar que el código funcione con su flujo natural.

Ahora, hablemos un poco más sobre la jerarquía de excepciones en Java observando qué son las excepciones marcadas y no marcadas.

Excepciones marcadas y no marcadas en Java

Como se mencionó anteriormente, las excepciones en un programa Java pueden ocurrir durante el tiempo de compilación o durante el tiempo de ejecución. Esto es lo que nos da los dos amplios tipos de Excepciones presentes en Java. A continuación se analizan estas dos excepciones en detalle.

Excepciones en tiempo de compilación

Las excepciones que ocurren en el momento de la compilación se conocen como excepciones en el momento de la compilación. Estas también se denominan excepciones verificadas debido al hecho de que debe verificarlas explícitamente en su programa Java y manejarlas en el código mismo. Las clases como InterruptedException, IOException y más son excepciones comprobadas.

Veamos un método que puede manejar una excepción marcada:

public void escribir un archivo () {

try (BufferedWriter b_w = new BufferedWriter(new FileWriter(“myFile.txt”))) {

b_w.write(“Prueba”);

} captura (IOException ioe) {

ioe.printStackTrace();

}

}

Como puede ver, hay dos declaraciones en el bloque de prueba del código anterior:

  • Instanciando el objeto – BufferedWriter
  • Usar el objeto para escribir en el archivo

Ambas declaraciones pueden lanzar IOException. IOException, al ser una excepción comprobada, debe ser manejada por la persona que llama o por el método. En el ejemplo anterior, puede ver que la excepción se maneja dentro del propio método.

Excepciones de tiempo de ejecución

A diferencia de las excepciones en tiempo de compilación que se lanzan durante el tiempo de compilación, las excepciones en tiempo de ejecución o no verificadas se pueden lanzar "en cualquier momento", lo que esencialmente significa en tiempo de ejecución. Como resultado de esto, los métodos no necesitan usar explícitamente bloques de captura y lanzamiento para manejar estas excepciones no verificadas. Algunas de las clases que heredan excepciones de tiempo de ejecución no verificadas incluyen: NullPointerException, ArithmeticException, etc.

Veamos un fragmento de código Java que arroja una excepción no verificada NullPointerException y que no se maneja en el fragmento de código a diferencia de antes. Aquí lo tienes:

public void escribir en un archivo () {

probar (BufferedWriter b_w = null) {

b_w.write(“Prueba”);

} captura (IOException ioe) {

ioe.printStackTrace();

}

}

Cuando llama al método anterior, el programa lanzará una NullPointerException ya que el objeto BufferedWriter es nulo. Así es como se leería la excepción:

Excepción en el hilo "principal" java.lang.NullPointerException

en IOExceptionExample.writeToFile(IOExceptionExample.java:10)

en IOExceptionExample.main(IOExceptionExample.java:17)

En conclusión

Con eso, llegamos al final de este blog sobre la comprensión de la jerarquía de excepciones en Java. Tenga en cuenta que esta no es una cobertura completa de las excepciones en Java y cómo manejarlas. Para eso, debe profundizar y exponerse a diferentes Excepciones posibles para ver cómo funcionan. Conocer el manejo de excepciones lo preparará para una carrera exitosa como desarrollador completo, ya que las excepciones forman los conceptos básicos de cualquier aplicación.

En upGrad, tenemos un curso especializado en desarrollo de pila completa: programa ejecutivo de PG en desarrollo de software, especialización en desarrollo de pila completa , donde lo llevamos a través de todos los matices del desarrollo de software centrándonos principalmente en el desarrollo de pila completa. ¡Le sugerimos que revise el curso y probablemente reserve un asiento pronto!

1. ¿Qué clase está presente en la parte superior de la jerarquía de excepciones en Java?

La clase Throwable está en la parte superior de la jerarquía de excepciones en Java.

2. ¿Cuáles son los diferentes tipos de Excepciones presentes en Java?

Java tiene excepciones no verificadas y verificadas. Las excepciones marcadas también se denominan excepciones en tiempo de compilación, mientras que las excepciones no marcadas también se conocen como excepciones en tiempo de ejecución.

3. ¿Cómo se manejan las excepciones en Java?

Try-catch es la forma más fácil de manejar Excepciones en Java. La parte principal del código que desea ejecutar debe colocarse en el bloque de prueba, mientras que uno o más bloques de captura capturarán todas las excepciones que arroja el código. Este método detectará cualquier tipo de excepción de Java que se produzca.