Las excepciones (exceptions) son un mecanismo de manejo de errores en Java. Cada objeto lanzado es una clase derivada de Throwable. Hay dos categorías principales:
Exception, excepto RuntimeException): deben ser manejadas explícitamente o declaradas en la firma del método a través de throws.RuntimeException): no requieren manejo explícito, pueden ocurrir en cualquier lugar (por ejemplo, NullPointerException).¿Cuándo usar?
public void readFile(String path) throws IOException { // Excepción verificada — requiere manejo Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // No verificada — ArithmeticException }
¿Puede un método que no declara throws lanzar una excepción verificada?
Respuesta: No, el compilador no permitirá lanzar una excepción verificada sin declararla en la firma del método (throws). Pero una excepción no verificada puede ser lanzada sin ninguna advertencia.
void foo() { throw new IOException(); // Error de compilación }
Historia
En un banco en línea, el cliente decidió ignorar el manejo de
SQLExceptions, usando envolturas no verificadas. Debido a esto, al actualizar el controlador, errores invisibles llevaron a la desincronización de datos.
Historia
En una aplicación de registro, el archivo de registro permanecía bloqueado debido a una excepción verificada no manejada (
FileNotFoundException), que se "perdió" en la cadena de llamadas, el error no se manejó a tiempo, y la aplicación no pudo seguir escribiendo en los registros.
Historia
En una plataforma comercial, el equipo implementó un catch global (Throwable) para "nunca caer". Como resultado, las excepciones críticas no verificadas se enmascararon — la aplicación continuó funcionando en un estado inconsistente, lo que llevó a errores complejos y pérdida de datos.