Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

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:

Los errores en Java se dividen en dos categorías amplias:

  1. Errores en tiempo de compilación
  2. Errores en tiempo de ejecución

Los errores en tiempo de compilación se subdividen en:

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

¿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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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.

Manejo de excepciones en Java: Try-Catch, Finally y jerarquía de clases explicada

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:

Java

  1. Manejo de excepciones en C++: Guía práctica con try, catch, throw
  2. Dominando el Manejo de Excepciones en Python: try, except, else y finally Explicados
  3. Dominando el manejo de excepciones en Python: try, except, finally y raise efectivamente
  4. Dominando el manejo de excepciones en Java: Try, Catch, Finally, Throw y Throws explicados
  5. Dominando el manejo de excepciones en Java: Try, Catch, Finally y Recursos
  6. Dominando el manejo multi‑excepción en Java
  7. Entendiendo Java String.charAt(): Sintaxis, tipo de retorno, excepciones y ejemplo práctico
  8. Dominando Java String.endsWith(): Cómo comprobar sufijos de cadena con ejemplos
  9. Lectura de archivos en Java con BufferedReader – Guía práctica con ejemplos
  10. Algoritmo Insertion Sort en Java: Ejemplo Claro y Guía Paso a Paso
  11. Java 9: Try-With-Resources Mejorado para Código Más Limpio