Excepción comprobada vs Excepción en tiempo de ejecución
Las excepciones son tipos especiales de eventos, que pueden perturbar el flujo normal del programa. La excepción del nombre proviene de "evento excepcional". Lanzar una excepción es el proceso de crear un objeto de excepción y entregarlo al sistema de tiempo de ejecución. Cuando el sistema de tiempo de ejecución recibe el objeto de excepción, intentará encontrar a alguien que lo maneje dentro de la pila de llamadas atravesándolo en el orden inverso (en el que se llamaron los métodos). El sistema de ejecución es exitoso si encuentra un método con un controlador de excepciones. El controlador de excepciones es un bloque de código que puede manejar oficialmente dicha excepción. Si el sistema de tiempo de ejecución encuentra un controlador adecuado, pasará el objeto de excepción al controlador. Esto se llama atrapar la excepción. Sin embargo, si la excepción no puede ser manejada, el programa terminará. En Java, las excepciones se heredan de la clase Throwable. Las excepciones verificadas son excepciones en las que el compilador impone el manejo. Las excepciones de tiempo de ejecución son un tipo de excepciones que el compilador no comprueba.
¿Qué es una excepción marcada??
Las excepciones verificadas son objetos de la clase java.lang.exception o sus subclases (excepto la java.lang.RuntimeException y sus subclases). Las excepciones comprobadas se "verifican" en el momento de la compilación. Eso significa que el programador debe capturar o lanzar estas excepciones, o de lo contrario la compilación se quejaría (causando un error del compilador). Debido a esta razón, muchas excepciones comprobadas son bien conocidas por los programadores. Por ejemplo, la IOException y sus subclases son excepciones verificadas, y cuando el programador está tratando de acceder o modificar un archivo, el compilador verifica que el programador se encargue de todas las posibles IOExceptions.
¿Qué es una excepción de tiempo de ejecución??
Las excepciones de tiempo de ejecución consisten en java.lang.RuntimeException y todas sus subclases. Hablando teóricamente, tienen el mismo propósito que las excepciones comprobadas, y pueden lanzarse o manejarse como una excepción comprobada, pero el compilador no impone el manejo de ellas. Por lo tanto, las excepciones de tiempo de ejecución pertenecen a la familia de excepciones no verificadas. Las excepciones NullPointerException, NumberFormatEception, ClassCastException y ArrayIndexOutOfBoundsException son excepciones de tiempo de ejecución comunes en Java.
¿Cuál es la diferencia entre Excepción marcada y Excepción de tiempo de ejecución??
Aunque, tanto las excepciones comprobadas como las excepciones en tiempo de ejecución no son deseadas durante la ejecución de un programa, tienen sus diferencias. El compilador impone el control de las excepciones verificadas, pero no las excepciones en tiempo de ejecución. Por lo tanto, las excepciones marcadas deben lanzarse o manejarse para que el código se compile, pero no hay tal requisito con respecto a las excepciones de tiempo de ejecución. En consecuencia, las excepciones de tiempo de ejecución pertenecen a la categoría de excepciones no verificadas junto con errores.
La desventaja con las excepciones comprobadas es que el programador tiene que manejarlo incluso si no sabe cómo hacerlo. Por lo tanto, si el programador simplemente lanza una nueva excepción sin envolver el original, se perderá el seguimiento de la pila que pertenece a la excepción original. Aquí es donde las excepciones de tiempo de ejecución son útiles. Debido a que todas las excepciones de tiempo de ejecución pueden manejarse en un solo lugar, los programadores pueden escribir menos cantidad de código. Por otro lado, como las excepciones marcadas deben detectarse, no hay ninguna sorpresa para el programador. Ella siempre sabrá qué excepción marcada puede ser lanzada por un cierto método. Al contrario de esto, se pueden lanzar varias excepciones de tiempo de ejecución sin el conocimiento del programador.