Inicio > Cursos > Java > Excepciones y Manejo de Errores
JavaJava ModernoLección 13 de 15

Excepciones y Manejo de Errores

Java divide las excepciones en dos categorías. Las checked exceptions (como IOException) representan errores que cualquier código razonable debería anticipar y manejar: archivo no encontrado, conexión rechazada. El compilador te obliga a manejarlas con try/catch o declararlas en la firma del método con throws. Las unchecked exceptions (subclases de RuntimeException, como NullPointerException, ArrayIndexOutOfBoundsException) representan bugs de programación que no deberían ocurrir en código correcto.

Try-with-resources (Java 7+) es la forma correcta de manejar recursos que deben cerrarse: archivos, conexiones a base de datos, sockets. Sin este patrón, necesitabas un bloque finally para cerrar el recurso, y si el cierre también lanzaba excepción, el código se complicaba mucho.

Con try (FileReader r = new FileReader(path)) {}, Java cierra automáticamente el recurso al salir del bloque, incluso si ocurrió una excepción. Las excepciones personalizadas te permiten comunicar errores específicos del negocio con información relevante.

// Jerarquía: Throwable → Error / Exception
// Exception → CheckedException / RuntimeException

// Excepciones checked (obligatorio try/catch o throws)
public void leerArchivo(String ruta) throws IOException {
    FileReader reader = new FileReader(ruta);
    // ... leer archivo
}

// Try-catch-finally
public int dividir(int a, int b) {
    try {
        return a / b;
    } catch (ArithmeticException e) {
        System.out.println("Error: " + e.getMessage());
        return 0;
    } finally {
        System.out.println("Operación completada");
    }
}

// Multi-catch (Java 7+)
try {
    // código peligroso
} catch (NullPointerException | IllegalArgumentException e) {
    System.out.println("Error: " + e.getMessage());
}

// Excepción personalizada
public class SaldoInsuficienteException extends RuntimeException {
    private final double saldoActual;
    
    public SaldoInsuficienteException(double saldo, double intento) {
        super(String.format("Saldo %.2f insuficiente para %.2f", saldo, intento));
        this.saldoActual = saldo;
    }
    
    public double getSaldoActual() { return saldoActual; }
}

// Try-with-resources (Java 7+) - cierra automáticamente
try (FileReader reader = new FileReader("archivo.txt");
     BufferedReader br = new BufferedReader(reader)) {
    String linea;
    while ((linea = br.readLine()) != null) {
        System.out.println(linea);
    }
} // Se cierra automáticamente aunque haya excepción
Consejo📁 Try-with-resources es la forma moderna de manejar recursos (archivos, conexiones). Garantiza que se cierren, incluso con excepciones.
← Streams y Lambdas (Java 8+)Proyecto: Sistema Bancario →

Practica esta lección

Resuelve los ejercicios del curso de Java en la app, gratis y con corrección automática.

Empezar a practicar