2
respuestas

Duda Checked & Unchecked

Estimados instructores, una pregunta. Cual es la principal diferencia entre las excepciones tipo Exception, Checked (Verificado) y las excepciones tipo RuntimeException, Unchecked (No verificado)

Mil gracias.

2 respuestas

Hola Edgar, espero que estés bien.

En Java - el tratamiento de errores se refiere a los procedimientos de respuesta y recuperación de condiciones de error, también el proceso compuesto de anticipación, detección y resolución con tratamiento de excepciones predefinidas.

Todas las excepciones son objetos de clase descendientes de la clase Throwable que incluye dos excepciones predefinidas que son subclases: Error y Exception.

La clase Error y sus descendientes se refieren a errores que son lanzados por el tiempo de ejecución de Java. Estas excepciones nunca son lanzadas por programas de usuario, y nunca deben ser manejadas allí. Hay dos descendientes de Exception: RuntimeException y IOException. En la mayoría de los casos se lanza una RuntimeException cuando un programa de usuario provoca algún error. Los programas de usuario pueden definir sus propias clases de excepción. La convención en el lenguaje Java es que las excepciones definidas por el usuario son subclases de Exception.

Las excepciones de las clases Error y RuntimeException se denominan excepciones no comprobadas. Todas las demás excepciones se denominan excepciones comprobadas.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Vale la pena recordar que para las excepciones comprobadas se requiere atrapar la excepción y manejarla, incluso si sólo se imprime que se ha producido un error. El libro de Robert C Martin - Clean Code dice "Las excepciones comprobadas pueden ser útiles a veces si estás construyendo una biblioteca crítica: necesitas atraparlas. Pero en el desarrollo general de aplicaciones, los costes de la dependencia superan a las ventajas."

En general, las excepciones Checked son aquellas en las que estás obligado a tratarla, ya sea con un bloque try-catch o incluso con un throws (relanzándola a otra ubicación). En cambio, cuando tienes excepciones Unchecked no es obligatorio tratarla, puedes tratarla sólo si quieres, si crees que es necesario para el correcto funcionamiento de tu aplicación.

Las excepciones Checked se utilizan para errores recuperables mientras que las Unchecked se utilizan para errores irrecuperables. Esto significa que cuando usted sabe que su error puede ser manejado, usted usa Excepciones Verificadas, de lo contrario use Excepciones No Verificadas.

Hay un tutorial de Oracle sobre el manejo de excepciones en Java aquí.

Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte. ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios.

Hola Edgar, como estas? Te paso la siguiente info para ver si te sirve para entender este tema.

La principal diferencia entre las excepciones tipo Exception (verificadas o checked) y las excepciones tipo RuntimeException (no verificadas o unchecked) radica en cómo son tratadas por el compilador y el programador.

  1. Excepciones tipo Exception (Checked):

    • Estas excepciones son conocidas como "verificadas" o "checked exceptions" en Java.
    • Todas las subclases de Exception que no son subclases de RuntimeException son excepciones verificadas.
    • El compilador obliga al programador a manejar (capturar o declarar) las excepciones verificadas en el código, de lo contrario, el programa no compilará.
    • Esto implica que cuando se utiliza un método que puede lanzar una excepción verificada, el programador debe decidir cómo manejar esa excepción, ya sea capturándola y tomando acciones adecuadas o declarando que el método actual también puede lanzar esa excepción utilizando la palabra clave throws.
  2. Excepciones tipo RuntimeException (Unchecked):

    • Estas excepciones son conocidas como "no verificadas" o "unchecked exceptions" en Java.
    • Todas las subclases de RuntimeException son excepciones no verificadas.
    • El compilador no obliga al programador a manejar las excepciones no verificadas en el código, lo que significa que no es necesario capturarlas ni declararlas con throws.
    • A diferencia de las excepciones verificadas, las excepciones no verificadas generalmente se utilizan para errores o situaciones inesperadas en el código y no es obligatorio manejarlas explícitamente.

Un ejemplo de excepción verificada podría ser IOException, que se lanza cuando ocurre algún problema de entrada/salida. El compilador requeriría que el programador maneje dicha excepción si utiliza métodos que pueden lanzarla, como cuando se trabaja con archivos.

Por otro lado, un ejemplo de excepción no verificada podría ser NullPointerException, que se lanza cuando se intenta acceder a un objeto nulo. En este caso, no es necesario manejar explícitamente la excepción en el código, pero es importante evitar que ocurra este tipo de error mediante una programación cuidadosa.

En resumen, la diferencia clave entre las excepciones tipo Exception (verificadas) y RuntimeException (no verificadas) es cómo se manejan a nivel del compilador y si es necesario capturarlas o declararlas en el código. Ambos tipos de excepciones se utilizan para manejar situaciones excepcionales en un programa, pero las excepciones verificadas tienen una responsabilidad adicional de ser manejadas explícitamente en el código para garantizar un manejo adecuado de errores y excepciones.

Espero que esta info te sirve para aclarar tus dudas. Saludos y a seguir estudiando.

Si este post te ayudó, por favor, marca como solucionado ✓.