Excepción verificada vs EXCEPCIÓN DE TIEMPO
Las excepciones son un tipo especial de eventos, que pueden perturbar el flujo normal del programa. La excepción del nombre proviene del "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 tiempo de ejecución es exitoso si encuentra un método con un controlador de excepción. El controlador de excepción es un bloque de código que puede manejar oficialmente dicha excepción. Si el sistema de tiempo de ejecución encuentra un controlador apropiado, pasará el objeto de excepción al controlador. Esto se llama atrapar la excepción. Sin embargo, si no se puede manejar la excepción, el programa terminará. En Java, las excepciones heredan de la clase lanzable. Las excepciones verificadas son excepciones sobre las cuales el compilador hace cumplir el manejo. Las excepciones de tiempo de ejecución son un tipo de excepciones, que el compilador no verifica.
¿Qué es una excepción verificada??
Las excepciones verificadas son objetos de la clase Java.lang.excepción o sus subclases (excepto el Java.lang.RuntimeException y sus subclases). Las excepciones verificadas se "verifican" en el momento de la compilación. Eso significa que el programador debe atrapar o lanzar estas excepciones, o de lo contrario la compilación se quejaría (causando un error del compilador). Por esta razón, muchas excepciones verificadas son muy conocidas por los programadores. Por ejemplo, el IOException y sus subcases se verifican excepciones, y cada vez que el programador se ocupa de acceder o modificar un archivo, el compilador verifica para asegurarse de que el programador se atiende a todas las posibles IOEXCEPCIONES.
¿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 subcases. Teóricamente hablando, tienen el mismo propósito que las excepciones verificadas, y pueden ser arrojados o manejados como una excepción verificada, pero el compilador no se aplica el manejo de ellas. Por lo tanto, las excepciones de tiempo de ejecución pertenecen a la familia de excepciones sin control. NullPointerException, NumberFormateception, ClassCastException y ArrayInDexOutofBoundSException son excepciones de tiempo de ejecución comunes en Java.
¿Cuál es la diferencia entre la excepción verificada y la excepción de tiempo de ejecución??
Aunque tanto las excepciones verificadas como las excepciones de tiempo de ejecución son ocurridos no deseados durante la ejecución de un programa, tienen sus diferencias. El compilador aplica el manejo de excepciones verificados, pero las excepciones de tiempo de ejecución no son. Por lo tanto, las excepciones verificadas deben ser lanzadas o manejadas para que el código se compile, pero no existe 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 sin control junto con errores.
Desventaja con las excepciones verificadas es que el programador tiene que manejarlo incluso si no sabe cómo. Entonces, si el programador solo lanza una nueva excepción sin envolver el original, se perderá la rastro 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 se pueden manejar en un solo lugar, por lo tanto, los programadores pueden escribir menos cantidad de código. Por otro lado, dado que las excepciones verificadas deben ser atrapadas, no hay sorpresa para el programador. Ella siempre sabrá qué excepción verificada podría ser arrojada por un determinado método. Contrariamente a esto, se pueden lanzar varias excepciones de tiempo de ejecución sin el conocimiento del programador.