¿Qué es una excepción en Java?
En Java, una excepción es un evento que interrumpe el flujo normal de ejecución de un programa cuando ocurre un error inesperado. Cuando se produce una excepción, el sistema crea un objeto que contiene información sobre el error, como su tipo y el estado del programa en ese momento.
Las excepciones permiten manejar errores de forma controlada, evitando que el programa termine abruptamente. Java organiza las excepciones en una jerarquía basada en la clase Throwable
, que se divide en:
- Checked Exceptions: Son verificadas en tiempo de compilación. Ejemplo:
IOException
,SQLException
. - Unchecked Exceptions: Se detectan en tiempo de ejecución. Ejemplo:
NullPointerException
,ArithmeticException
. - Errors: Representan fallos graves del sistema. Ejemplo:
OutOfMemoryError
,StackOverflowError
.
Para manejar excepciones, Java ofrece estructuras como try-catch-finally
y palabras clave como throw
y throws
, que permiten capturar, lanzar o propagar errores según sea necesario.
ArithmeticException
, que puede ser capturada para evitar que el programa se detenga.
Excepciones más comunes en Java
Tipo de Excepción | Clase Base | ¿Cuándo ocurre? | Ejemplo típico |
---|---|---|---|
NullPointerException | RuntimeException | Accedés a un objeto que es null |
obj.getNombre() si obj == null |
SQLException | Exception | Error al ejecutar una consulta SQL o conectar con la base de datos | Error de sintaxis SQL, conexión fallida |
IOException | Exception | Problemas al leer/escribir archivos o streams | Leer archivo que no existe |
ClassNotFoundException | Exception | Clase no encontrada al cargar dinámicamente | Class.forName("com.mysql.Driver") |
NumberFormatException | RuntimeException | Conversión fallida de texto a número | Integer.parseInt("abc") |
ArrayIndexOutOfBoundsException | RuntimeException | Acceso fuera de los límites de un array | array[10] cuando el tamaño es 5 |
IllegalArgumentException | RuntimeException | Argumento inválido pasado a un método | Thread.sleep(-100) |
ArithmeticException | RuntimeException | Operación matemática inválida | División por cero |
FileNotFoundException | IOException | Archivo no encontrado | new FileInputStream("noExiste.txt") |
IllegalStateException | RuntimeException | Estado ilegal del objeto para la operación actual | Usar un Scanner cerrado |