En este tema, aprenderemos cómo crear nuestras propias excepciones personalizadas en Java. Las excepciones personalizadas son útiles cuando necesitamos manejar situaciones específicas de nuestra aplicación que no están cubiertas por las excepciones estándar de Java.
Conceptos Clave
- Excepciones en Java: Las excepciones son eventos que ocurren durante la ejecución de un programa y que interrumpen el flujo normal de las instrucciones.
- Jerarquía de Excepciones: Todas las excepciones en Java son subclases de
Throwable
. Las dos subclases principales sonException
yError
. - Excepciones Personalizadas: Son subclases de
Exception
oRuntimeException
que creamos para manejar situaciones específicas de nuestra aplicación.
Creación de Excepciones Personalizadas
Paso 1: Definir la Clase de Excepción
Para crear una excepción personalizada, necesitamos definir una clase que extienda Exception
o RuntimeException
.
public class MiExcepcionPersonalizada extends Exception { public MiExcepcionPersonalizada(String mensaje) { super(mensaje); } }
Paso 2: Lanzar la Excepción
Podemos lanzar nuestra excepción personalizada usando la palabra clave throw
.
public class EjemploExcepcionPersonalizada { public void metodoQueLanzaExcepcion() throws MiExcepcionPersonalizada { throw new MiExcepcionPersonalizada("Este es un mensaje de excepción personalizada"); } }
Paso 3: Capturar la Excepción
Para manejar la excepción, utilizamos un bloque try-catch
.
public class ManejoExcepcionPersonalizada { public static void main(String[] args) { EjemploExcepcionPersonalizada ejemplo = new EjemploExcepcionPersonalizada(); try { ejemplo.metodoQueLanzaExcepcion(); } catch (MiExcepcionPersonalizada e) { System.out.println("Capturada: " + e.getMessage()); } } }
Ejemplo Completo
A continuación, se muestra un ejemplo completo que incluye la definición, lanzamiento y manejo de una excepción personalizada.
// Definición de la excepción personalizada public class MiExcepcionPersonalizada extends Exception { public MiExcepcionPersonalizada(String mensaje) { super(mensaje); } } // Clase que lanza la excepción personalizada public class EjemploExcepcionPersonalizada { public void metodoQueLanzaExcepcion() throws MiExcepcionPersonalizada { throw new MiExcepcionPersonalizada("Este es un mensaje de excepción personalizada"); } } // Clase que maneja la excepción personalizada public class ManejoExcepcionPersonalizada { public static void main(String[] args) { EjemploExcepcionPersonalizada ejemplo = new EjemploExcepcionPersonalizada(); try { ejemplo.metodoQueLanzaExcepcion(); } catch (MiExcepcionPersonalizada e) { System.out.println("Capturada: " + e.getMessage()); } } }
Ejercicio Práctico
Ejercicio 1: Crear y Manejar una Excepción Personalizada
- Definir una Excepción Personalizada: Crea una clase
SaldoInsuficienteException
que extiendaException
. - Lanzar la Excepción: En una clase
CuentaBancaria
, crea un métodoretirar
que lanceSaldoInsuficienteException
si el saldo es insuficiente. - Manejar la Excepción: En una clase
Banco
, maneja la excepción usando un bloquetry-catch
.
Solución
// Definición de la excepción personalizada public class SaldoInsuficienteException extends Exception { public SaldoInsuficienteException(String mensaje) { super(mensaje); } } // Clase que lanza la excepción personalizada public class CuentaBancaria { private double saldo; public CuentaBancaria(double saldoInicial) { this.saldo = saldoInicial; } public void retirar(double cantidad) throws SaldoInsuficienteException { if (cantidad > saldo) { throw new SaldoInsuficienteException("Saldo insuficiente para retirar " + cantidad); } saldo -= cantidad; } public double getSaldo() { return saldo; } } // Clase que maneja la excepción personalizada public class Banco { public static void main(String[] args) { CuentaBancaria cuenta = new CuentaBancaria(1000.0); try { cuenta.retirar(1500.0); } catch (SaldoInsuficienteException e) { System.out.println("Error: " + e.getMessage()); } } }
Resumen
En esta sección, hemos aprendido cómo crear y manejar excepciones personalizadas en Java. Las excepciones personalizadas nos permiten manejar situaciones específicas de nuestra aplicación de manera más clara y estructurada. Hemos cubierto los pasos para definir, lanzar y capturar excepciones personalizadas, y hemos practicado con un ejercicio práctico.
En el siguiente tema, exploraremos el bloque finally
y cómo se utiliza para ejecutar código que debe ejecutarse sin importar si se lanza una excepción o no.
Curso de Programación en Java
Módulo 1: Introducción a Java
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection