Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada
¿Qué es una Excepción en Java?
Excepción en Java es un evento que interrumpe la ejecución de las instrucciones del programa, alterando el flujo normal de control. Es un objeto que encapsula información de error que surge dentro de un método y se pasa al sistema de runtime. En Java, las excepciones señalan principalmente diferentes condiciones de error que no pueden manejarse mediante el flujo de control estándar.
En este tutorial aprenderás:
- Qué es una excepción
- Por qué importan las excepciones
- Cómo manejarlas eficazmente
- La construcción try-catch
- La jerarquía de clases de excepciones en Java
- El papel del bloque finally
Los errores en Java se dividen en dos categorías amplias:
- Errores en tiempo de compilación
- Errores en tiempo de ejecución
Los errores en tiempo de compilación se subdividen en:
- Errores de sintaxis
- Errores semánticos
Ejemplo de error de sintaxis:
Declarar int a; es correcto, pero escribir in a; hará que el compilador reporte un error.
Por ejemplo, declarar int a; una vez e intentar redeclarar int a; más tarde en el mismo ámbito provocará un error del compilador, que se resalta durante la compilación.
Ejemplo de error en tiempo de ejecución
Los errores en tiempo de ejecución se manifiestan como excepciones, eventos que interrumpen el flujo normal de ejecución. Ejemplos típicos incluyen ArithmeticException, NullPointerException y división por cero.
Estas excepciones surgen de condiciones fuera del control directo del desarrollador.

¿Por qué necesitamos manejo de excepciones?
Considera un programa que accede a un servidor remoto. Durante el desarrollo, el servidor es accesible y el código funciona sin problemas. En producción, el servidor puede estar caído, causando una excepción cuando el programa intenta conectar.

Confiar solo en el flujo natural del código es insuficiente. Los programas robustos anticipan condiciones excepcionales y se recuperan con elegancia.
Cómo manejar excepciones
El manejo de excepciones es la práctica de anticipar condiciones excepcionales y proporcionar lógica de respaldo. Una estrategia común es intentar una operación principal y, ante fallo, redirigir a una alternativa.

Usar construcciones tradicionales if-else para manejar múltiples tipos de excepción rápidamente se vuelve inmanejable:
class Conectar {
if (servidorActivo()) {
// conectar al servidor principal
} else {
// conectar al servidor de respaldo
}
}
El bloque Try-Catch
Java proporciona mecanismos integrados para el manejo de excepciones. El código que puede lanzar una excepción se coloca dentro de un bloque try, y el código de recuperación correspondiente se coloca dentro de uno o más bloques catch.

Por ejemplo, el bloque try puede intentar conectar al servidor principal, mientras que el bloque catch maneja la lógica de respaldo.
Cuando el servidor está activo, el bloque catch se omite; cuando el servidor está caído, se lanza una excepción y se ejecuta el bloque catch.

La sintaxis para un par try-catch es:
try {
// sentencias que podrían lanzar
} catch (TipoExcepcion nombre) {
// sentencias de recuperación
}
Ejemplo práctico
Paso 1: Copia el siguiente código en tu IDE.
class ExcepcionJava {
public static void main(String args[]) {
int d = 0;
int n = 20;
int fraccion = n / d; // lanzará ArithmeticException
System.out.println("Fin del Main");
}
}
Paso 2: Compila y ejecuta. El programa lanza una ArithmeticException y termina en la línea 5.
Paso 3: Modifica el código para usar try-catch:
class ExcepcionJava {
public static void main(String args[]) {
int d = 0;
int n = 20;
try {
int fraccion = n / d;
System.out.println("Esta línea no se ejecutará");
} catch (ArithmeticException e) {
System.out.println("Excepción capturada: " + e);
}
System.out.println("Fin del Main");
}
}
Paso 4: Compila y ejecuta de nuevo. La salida muestra que la excepción se maneja con elegancia y el programa continúa hasta la última sentencia de impresión.

El objeto ArithmeticException capturado e contiene información detallada que puede usarse para logging o recuperación.
Jerarquía de clases de excepciones
La jerarquía de excepciones de Java proviene de la clase Throwable, que tiene dos subclases directas: Error y Exception. Error representa condiciones irrecuperables (ej. OutOfMemoryError), mientras que Exception cubre condiciones que pueden manejarse programáticamente.

- RuntimeException (ej. NullPointerException, ArithmeticException) – excepciones no comprobadas (unchecked) que no se detectan en tiempo de compilación.
- IOException – problemas que ocurren durante operaciones de entrada/salida.
- InterruptedException – lanzada cuando un hilo es interrumpido.
Ejemplo de Try-Catch anidado
Copia el siguiente código:
class ExcepcionJava {
public static void main(String args[]) {
try {
int d = 1;
int n = 20;
int fraccion = n / d;
int g[] = {1};
g[20] = 100; // ArrayIndexOutOfBoundsException
} catch (ArithmeticException e) {
System.out.println("ArithmeticException capturada: " + e);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException capturada: " + e);
}
System.out.println("Fin del Main");
}
}
Cuando d es 1, el código lanza ArrayIndexOutOfBoundsException. Cambiando d a 0 se desencadena ArithmeticException. Descomentando un catch (Exception e) amplio causaría error de compilación porque sombrearía manejadores más específicos.
El bloque Finally
El bloque finally se ejecuta independientemente de si ocurre una excepción, lo que lo hace ideal para tareas de limpieza.
try {
// operaciones riesgosas
} catch (TipoExcepcion e) {
// manejo de error
} finally {
// acciones de limpieza
}
Ejemplo:
class ExcepcionJava {
public static void main(String args[]) {
try {
int d = 0;
int n = 20;
int fraccion = n / d;
} catch (ArithmeticException e) {
System.out.println("Excepción capturada: " + e);
} finally {
System.out.println("Dentro del bloque finally");
}
}
}
Ejecutar este programa muestra el mensaje del bloque finally aunque se lance una excepción. Cambiando d a 1 se elimina la excepción; el bloque finally sigue ejecutándose.
Resumen:
- Una excepción es un error en tiempo de ejecución que interrumpe el flujo normal del programa.
- Los errores se dividen en tiempo de compilación (sintaxis, semánticos) y tiempo de ejecución (excepciones).
- Las aplicaciones robustas deben manejar todas las excepciones anticipadas para mantener la estabilidad.
- El mecanismo try-catch de Java es la forma estándar de interceptar y recuperarse de errores.
- El bloque
trycontiene el código que puede lanzar;catchmaneja el error;finallygarantiza la limpieza.
Java
- Manejo de excepciones en C++: Guía práctica con try, catch, throw
- Dominando el Manejo de Excepciones en Python: try, except, else y finally Explicados
- Dominando el manejo de excepciones en Python: try, except, finally y raise efectivamente
- Dominando el manejo de excepciones en Java: Try, Catch, Finally, Throw y Throws explicados
- Dominando el manejo de excepciones en Java: Try, Catch, Finally y Recursos
- Dominando el manejo multi‑excepción en Java
- Entendiendo Java String.charAt(): Sintaxis, tipo de retorno, excepciones y ejemplo práctico
- Dominando Java String.endsWith(): Cómo comprobar sufijos de cadena con ejemplos
- Lectura de archivos en Java con BufferedReader – Guía práctica con ejemplos
- Algoritmo Insertion Sort en Java: Ejemplo Claro y Guía Paso a Paso
- Java 9: Try-With-Resources Mejorado para Código Más Limpio