Definición

Las excepciones en Java son eventos imprevistos que pueden ocurrir durante la ejecución de un programa, el cual termina de forma abrupta.

Tipos

Se pueden clasificar en dos categorías principales:

Bloque try-catch

La estructura básica involucra un bloque try que rodea el código propenso a excepciones y uno o varios bloques catch para manejar excepciones específicas.

Esto permite a los programadores capturar y gestionar las excepciones de manera controlada.

Bloque finally

El bloque finally es esencial para liberar recursos o realizar tareas de limpieza necesarias, como cierre de archivos o conexiones a bases de datos. Este bloque se ejecuta siempre, incluso si no se produce ninguna excepción.

Ahora tenemos un ejemplo que conforma todos los bloques.

import java.util.Scanner;
import java.util.InputMismatchException;

public class EjemploTryCatchFinallyScanner {
    public static void main(String[] args) {
        Scanner scanner = null;

        try {
            scanner = new Scanner(System.in);
            System.out.print("Por favor, ingresa un número entero: ");
            int primero = scanner.nextInt();
            int segundo = scanner.nextInt();
            System.out.println("Division: " + (primero / segundo));
        } catch (InputMismatchException e) {
            System.out.println("Error: No ingresaste un número entero válido.");
        } catch (ArithmeticException e) {
            System.out.println("Error: Se produjo una excepción aritmética.");
        } catch (Exception e) {
            System.out.println("Error general: " + e.getMessage());
        } finally {
            if (scanner != null) {
                scanner.close();
            }
        }
    }
}

Cabe señalar que se tienen varios bloques de catch en donde se establece cada posible excepción que esté involucrada.

Sin embargo, el orden es importante. Se deja justo al final el bloque Exception, esto debido a que al ser una excepción base, absorbe todas las excepciones que no estén definidas en los bloques previos. Por ello se deja al final.

Throw

En Java, es posible lanzar excepciones manualmente empleando la palabra clave throw. Esto es útil cuando se desea señalar un problema específico en el código.

public class Cuenta {
    private double saldo;

    public Cuenta(double saldoInicial) {
        if (saldoInicial < 0) {
            throw new IllegalArgumentException("El saldo inicial no puede ser negativo");
        }
        this.saldo = saldoInicial;
    }

    public void depositar(double monto) {
        if (monto < 0) {
            throw new IllegalArgumentException("No se puede depositar un monto negativo");
        }
        saldo += monto;
    }

    public static void main(String[] args) {
        Cuenta miCuenta = new Cuenta(100.0);

        try {
            miCuenta.depositar(50.0);
            miCuenta.depositar(-10.0); // Intento de depósito negativo
        } catch (IllegalArgumentException e) {
            System.out.println("Excepción atrapada: " + e.getMessage());
        }

        System.out.println("Saldo actual: " + miCuenta.saldo);
    }
}

En el ejemplo anterior, se usa throw para lanzar excepciones que normalmente no lo serían, pero se vinculan a las reglas de negocio de cómo funciona una cuenta: evitar depósitos negativos.

Ejemplos

En el siguiente ejemplo usamos el manejo de excepciones para evitar que el menú genere una excepción.

import java.util.InputMismatchException;
import java.util.Scanner;

public class MenuConsola {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean continuar = true;

        while (continuar) {
            System.out.println("Menú:");
            System.out.println("1. Opción 1");
            System.out.println("2. Opción 2");
            System.out.println("3. Salir");

            try {
                System.out.print("Elige una opción: ");
                int opcion = scanner.nextInt();

                switch (opcion) {
                    case 1:
                        System.out.println("Seleccionaste la Opción 1");
                        break;
                    case 2:
                        System.out.println("Seleccionaste la Opción 2");
                        break;
                    case 3:
                        continuar = false;
                        System.out.println("Saliendo del programa.");
                        break;
                    default:
                        System.out.println("Opción no válida. Por favor, elige una opción válida (1, 2 o 3).");
                }
            } catch (InputMismatchException e) {
                System.out.println("Error: Debes ingresar un número entero válido.");
                scanner.next(); // Limpiar el búfer del scanner
            }
        }

        scanner.close();
    }
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *