📌 En síntesis: Reutilización y extensibilidad: jerarquías de herencia con extends, métodos polimórficos y captura controlada de errores con bloques try-catch-finally.
Guía técnica desarrollada por el equipo de Proyecto Luna para formación profesional y consulta técnica abierta.
📌 Aprendizaje esperado
📌
Aplicar estructuras de control en programas y scripts simples, según requerimientos.
Durante esta semana, profundizarás en el manejo de excepciones, un mecanismo fundamental para garantizar la estabilidad y confiabilidad de los programas en ejecución. Aprenderás cómo se propagan los errores mediante las sentencias throw y throws, y cómo se capturan utilizando bloques try-catch-finally, lo que permite anticipar fallos y mantener la continuidad del sistema (Schildt, 2021; Saini, 2023). Comprenderás, además, la jerarquía de las clases de excepción en Java y la forma de crear excepciones personalizadas para responder a escenarios específicos. Asimismo, analizarás las buenas prácticas en la detección, registro y comunicación de errores, esenciales para construir aplicaciones seguras y eficientes. Aplicarás estrategias de validación de datos, mensajes descriptivos y registro de eventos que faciliten el diagnóstico de problemas y la mejora continua del código (Gaddis, 2022; Horstmann, 2019; Goodrich et al., 2014). Estos contenidos fortalecerán tu capacidad para desarrollar soluciones robustas y confiables, capaces de responder a condiciones imprevistas sin afectar la funcionalidad general del programa, aplicando los principios de la Programación Orientada a Objetos en contextos reales de desarrollo de software.
🚀 Introducción
El manejo de excepciones es un componente esencial para garantizar que un programa pueda continuar ejecutándose incluso cuando se presentan errores en el tiempo de ejecución. En la Programación Orientada a Objetos (POO), las excepciones permiten detectar, interceptar y controlar fallos derivados de operaciones inválidas, como divisiones entre cero, accesos a índices inexistentes o conversiones de tipo incorrectas. Su adecuada implementación evita interrupciones abruptas del programa y mejora la experiencia del usuario (Schildt, 2021; Horstmann, 2019).
🔹 Concepto de excepción y tipos de errores en ejecución
En Java, una excepción es un evento que altera el flujo normal de ejecución de un programa. Clase Throwable Cuando se produce una condición excepcional en el transcurso de la ejecución de un programa, se debería generar, o lanzar, una excepción. Esta excepción es un objeto derivado directa, o indirectamente, de la clase Throwable. Tanto el intérprete Java como muchos métodos de las múltiples clases de Java pueden lanzar excepciones y errores. Según su superclase, hay dos tipos de excepciones: Checked: verificadas , el programa no compila si no existe un manejador de excepciones. Son las subclases de Exception que no son subclases de RuntimeException. Además, deben manejarse explícitamente mediante estructuras de control (Gaddis, 2022). Unchecked: no verificadas, su captura no es obligatoria. Son las subclases de RuntimeException. Son errores en tiempo de ejecución que pueden prevenirse con una codificación adecuada (Gaddis, 2022).
🧩 Manejo de excepciones en la programación orientada a objetos
Todas las excepciones en Java, son clases, a continuación se presenta el árbol de herencia de ellas: Los nombres de las excepciones indican la condición de error que representan. En la tabla siguiente, se presenta una síntesis de las clases de excepciones más frecuentes en la ejecución de programas: Tipo de excepción Descripción Ejemplo común Ocurre cuando se intenta realizar una operación aritmética inválida. División por cero. ArithmeticException Se lanza cuando se intenta acceder a un objeto que no ha sido inicializado. Llamar un método sobre un objeto null. NullPointerException Se genera al acceder a un índice fuera del rango del arreglo miArray[10] cuando el arreglo tiene solo 5 elementos. ArrayIndexOutOfBoundsException
Figura 1. Árbol de herencia de excepciones en Java
🔹 Propagación de errores: el mecanismo throw y throws
Cuando ocurre una excepción, el programa propaga el error hasta encontrar un bloque que pueda manejarlo.
🔹 Lanzamiento de excepciones
Muchas veces quien programa dentro de un determinado método deberá comprobar si alguna condición de excepción se cumple, y si es así lanzarla. Para ello, se utilizan las palabras reservadas throw y throws. Por una parte, la excepción se lanza mediante la sentencia throw. A continuación, se muestra la sintaxis de uso: Tabla 1. Tipos de excepciones comunes en Java Fuente: adaptado de Schildt (2021) y Horstmann (2019) Asociada a fallos en operaciones de entrada/salida. Lectura de un archivo inexistente. IOException El intento de convertir un objeto a otra clase que no es válida. y = (Prueba)x; // donde x no es de tipo Prueba ClassCastException Esta excepción se produce cuando se intenta formatear un literal que no es un número. Ingresa un caracter, por ejemplo ‘C’ y quiero convertirlo a número entero. NumberFormatException
Figura 2. Sintaxis de uso con throw
En el cuadro anterior se ha lanzado una excepción instanciando un objeto de la clase MiExcepcion utilizando la palabra reservada throw antes del new (construye un objeto excepción de la clase MiExcepcion). Aquellos métodos que pueden lanzar excepciones, deben indicar cuáles son esas excepciones en su declaración. Para ello, se utiliza la sentencia throws: Se pueden lanzar en el método más de una excepción y se deben indicar en su declaración separadas por comas.
🔹 Paquete propio
En los proyectos se recomienda que tenga su propio conjunto de excepciones, que permitirán una mejor comunicación con el Cliente. Estas clases deben quedar en un package donde la clase padre tenga el nombre del proyecto: ProyectoException, y de ellas heredar por jerarquía las necesarias:
Figura 3. Sintaxis de uso con throw
Figura 4. Ejemplo de un conjunto de excepciones que heredan
de la clase padre TrabajoConColeccionesException
Ejemplo: En este ejemplo, el método dividir utiliza throw para generar una excepción cuando el divisor es cero, mientras que el método principal la captura y gestiona con un bloque try-catch, evitando que el programa se interrumpa.
🔹 Captura y tratamiento de excepciones con try-catch-finally
El bloque try-catch-finally constituye la estructura básica para controlar errores. En el bloque try se ejecuta el código que podría generar una excepción, en catch se define la respuesta ante el error, y finally se ejecuta siempre, haya ocurrido o no una excepción (Gaddis, 2022). La sintaxis de implementación del bloque try-catch-finally es la siguiente:
Figura 5. Otro ejemplo conjunto de excepciones que heredan de la clase padre
La cláusula try: es el bloque de código donde se coloca todo el código susceptible de lanzar una excepción. El bloque try tiene que ir seguido, al menos, por una cláusula catch o una cláusula finally. La cláusula catch: es el código que se ejecuta cuando se produce la excepción. Esta excepción debe coincidir con alguna de las que pueda lanzar el bloque de código de la sentencia try. En este bloque, tendremos que asegurarnos de colocar código que no genere excepciones. Se pueden colocar sentencias catch sucesivas, cada una controlando una excepción diferente La cláusula finally: la cláusula finally es ejecutada con posterioridad cualquiera sea la condición de término del try (sin o con error). Esta sección, permite dejar las cosas consistentes antes del término del bloque try. Ejemplo:
Figura 6. Modelo de sintaxis de implementación del
bloque anteriormente mencionado
Figura 7. Uso de control y tratamiento de excepciones
En este caso, se produce una excepción al intentar acceder a una posición inexistente del arreglo. El bloque catch gestiona el error mostrando un mensaje descriptivo, y finally garantiza la ejecución del cierre del proceso.
🔹 Jerarquía de clases de excepciones en Java
Las excepciones en Java derivan de la clase base Throwable, que se divide en dos ramas principales: Exception y Error. La primera engloba errores recuperables, mientras que la segunda se asocia a problemas graves del sistema, como falta de memoria o fallos en la JVM. Esta jerarquía permite al programador diseñar estructuras de control más específicas, gestionando cada tipo de error según su impacto.
🔹 Creación de excepciones personalizadas (Custom Exceptions)
En algunos casos, los errores no se limitan a los tipos predefinidos por Java. Para ello, se pueden crear excepciones personalizadas extendiendo la clase Exception. Este enfoque permite representar situaciones propias del dominio del problema, mejorando la legibilidad y mantenimiento del código (Horstmann, 2019).
🔹 Excepciones definidas por los usuarios
Si hacemos métodos propios, podemos lanzar excepciones en caso de que algo vaya mal. Estas excepciones pueden ser las de java o bien unas que creemos. Clase base Subclase Descripción general Exception Representa condiciones que una aplicación puede manejar. Throwable Error Indica fallos graves que no deben manejarse desde el código del usuario. Throwable Tabla 2. Jerarquía principal de excepciones en Java Fuente: adaptado de Gaddis (2022) y Goodrich et al. (2014)
Para crear nuestra excepción, se crea una clase que debe cumplir las siguientes reglas: ● La clase debe heredar de java.lang.Exception ● En el identificador del nombre de la clase se debe agregar como sufijo Exception ● No debe llevar atributos ni métodos. ● Debe llevar un constructor que invoque al super() de la clase padre. Ejemplo: En este caso, el identificador o nombre de la clase: EdadNegativaException está compuesto por los dos elementos que se va a controlar: EdadNegativa y la palabra Exception, así sabremos que esta clase es la definición de una Excepción que vamos a controlar en nuestro proceso. En el método constructor de la clase creada basta invocar al constructor de la clase padre pasándole un mensaje que indique la excepción. Ejemplo:
Figura 8. Declaración de una excepción propia de cliente
Figura 9: Uso de control y tratamiento de excepciones
Este ejemplo demuestra cómo una clase de excepción personalizada permite definir mensajes específicos, haciendo el sistema más descriptivo y fácil de depurar.
🔹 Mejores prácticas en el manejo de errores
El uso adecuado de excepciones mejora la robustez del software. Algunas recomendaciones incluyen: ● Lanzar excepciones sólo cuando sea necesario. ● Evitar capturar excepciones genéricas sin procesarlas. ● Ofrecer mensajes claros que orienten al usuario sobre el error. ● Registrar los fallos críticos mediante herramientas de logging (Saini, 2023; Schildt, 2021). La siguiente tabla resume estas recomendaciones clave: Práctica recomendada Beneficio Mejora la precisión del manejo de errores. Capturar excepciones específicas Facilita la comprensión del problema. Utilizar mensajes claros Permite rastrear y analizar fallos posteriores. Emplear logging Tabla 3. Buenas prácticas para manejar excepciones Fuente: adaptado de Saini (2023) y Schildt (2021)
🔹 Ejemplo práctico: control de división por cero mediante excepciones
Este programa demuestra cómo la gestión de excepciones permite evitar que el sistema colapse ante un error lógico, brindando una respuesta controlada y segura al usuario. En síntesis, el manejo de excepciones representa una herramienta indispensable en la Programación Orientada a Objetos. Su correcta aplicación no solo evita interrupciones en el flujo del programa, sino que también promueve la fiabilidad, claridad y mantenibilidad del código. El dominio de estas técnicas prepara al programador para construir aplicaciones sólidas capaces de responder ante fallos sin comprometer su funcionamiento general (Gaddis, 2022; Horstmann, 2019; Saini, 2023).
Figura 10. Ejemplo de script con tratamiento y control de excepciones
📌 Instrucciones para el manejo de errores en ejecución
Una vez comprendido el funcionamiento general de las excepciones, es necesario conocer las instrucciones y estrategias prácticas que permiten manejar los errores en tiempo de ejecución de manera efectiva. Estas acciones garantizan que el programa responda adecuadamente a condiciones imprevistas, comunique mensajes claros al usuario y mantenga la integridad de los datos. El uso de validaciones, mensajes descriptivos y registros de errores contribuye a la construcción de aplicaciones robustas y seguras (Horstmann, 2019; Saini, 2023).
🔹 Validación de datos de entrada
La validación es el primer paso para prevenir errores. Antes de ejecutar operaciones, el sistema debe comprobar que los datos introducidos sean correctos en tipo, rango y formato. Esta práctica minimiza las excepciones innecesarias y evita el colapso del programa (Gaddis, 2022). Ejemplo:
Figura 11. Flujo de validación de entrada de datos con sentencia de decisión
En este ejemplo, el programa valida tanto el tipo de dato como el rango de valores, evitando excepciones antes de que se ejecuten.
🔹 Mensajes descriptivos para el usuario
Cuando ocurre un error, el sistema debe comunicarlo de forma clara y comprensible. Los mensajes genéricos como “Error en el sistema” generan confusión; en cambio, las notificaciones descriptivas orientan al usuario para corregir la situación. Es recomendable indicar la causa del error y, cuando sea posible, sugerir una acción correctiva (Horstmann, 2019; Schildt, 2021). Un mensaje bien estructurado mejora la experiencia del usuario y facilita el mantenimiento del software durante el proceso de depuración.
🔹 Recuperación ante fallos: uso de bloques condicionales y valores por
defecto En determinadas situaciones, es preferible que el programa recupere su ejecución utilizando valores alternativos en lugar de detenerse. Esto se logra mediante estructuras condicionales que definen rutas seguras ante fallos o datos inválidos (Saini, 2023). Tipo de mensaje Ejemplo de salida Propósito “Se produjo un error”. Informa un fallo sin detalles. General “No se puede dividir entre cero. Ingrese otro valor”. Indica la causa y propone una acción. Descriptivo “java.lang.ArithmeticException: / by zero”. Útil para depuración interna. Técnico Tabla 4. Tipos de mensajes de error y su propósito Fuente: adaptado de Horstmann (2019) y Schildt (2021)
Ejemplo: Aquí, se utiliza una condición ternaria ( símbolo ?) para evitar una NullPointerException, mostrando un mensaje alternativo cuando el objeto es nulo. Esta técnica previene interrupciones y mantiene la continuidad de la ejecución.
🔹 Ejemplo aplicado: validación y manejo de errores en un programa de
cálculo
Figura 12. Ejemplo de Control de valor de entrada con operador ternario
Figura 13. Ejemplo aplicado de validación y manejo de errores
en un programa de cálculo
Este ejemplo integra validación de entrada, control de flujo y manejo de excepciones, garantizando que el programa responda adecuadamente ante errores del usuario o del sistema. En síntesis, las instrucciones para el manejo de errores en ejecución permiten diseñar programas capaces de anticipar, registrar y resolver fallos sin comprometer su estabilidad. Al implementar validaciones, mensajes descriptivos y mecanismos de registro, el programador contribuye a la confiabilidad, trazabilidad y usabilidad del sistema. Dominar estas prácticas consolida un enfoque profesional orientado a la prevención más que a la corrección, fortaleciendo la calidad global del desarrollo de software (Saini, 2023; Horstmann, 2019; Gaddis, 2022).
Durante esta tercera semana, fortaleciste tu comprensión sobre el manejo de excepciones y las estrategias para gestionar errores en ejecución, aspectos esenciales en la construcción de programas estables y confiables. Aprendiste a identificar los tipos de excepciones más comunes, propagar y capturar errores mediante las estructuras try-catch-finally, y diseñar excepciones personalizadas que responden a escenarios específicos de programación (Schildt, 2021; Horstmann, 2019). Asimismo, profundizaste en las instrucciones prácticas para el manejo de errores, aplicando validaciones y mensajes descriptivos que aseguran la continuidad del programa y mejoran la experiencia del usuario. Estas técnicas, acompañadas del uso de valores por defecto y rutas de recuperación, fortalecen la robustez del código y promueven la prevención de fallos antes de su ejecución (Gaddis, 2022; Saini, 2023).
💡 Conclusión
-
Gaddis, T. (2022). Starting Out with Java: From Control Structures through Objects (9.ª ed.). Pearson Education.
-
Goodrich, M. T., Tamassia, R., & Goldwasser, M. H. (2014). Data Structures and Algorithms in Java (6.ª ed.). Wiley.
-
Horstmann, C. S. (2019). Core Java Volume I – Fundamentals (12.ª ed.). Pearson Education.
-
Saini, S. K. (2023). Mastering Control Structures, Conditional Statements and Loops. Independently Published.
-
Schildt, H. (2021). Java: The Complete Reference (12.ª ed.). McGraw-Hill Education.
🚀 Potencia tus proyectos tecnológicos con Proyecto Luna
En Proyecto Luna desarrollamos arquitectura de software de alto rendimiento, optimización de bases de datos críticas y soluciones aplicadas de inteligencia artificial y automatización para empresas y profesionales.
- 💼 Soluciones de ingeniería: Conoce nuestras capacidades y casos de estudio en proyectoluna.com/work/.
- 🛡️ Seguridad y auditoría: Orientación técnica y respuesta ante incidentes en ¿Te han hackeado?.
- 📩 Contacto directo: Escríbenos a través de nuestro formulario de contacto o a
contacto@proyectoluna.com.





