Ir al contenido principal

Java en ejemplos: creando nuestras propias excepciones


De errores y excepciones

Una excepción en programación es una anomalía en el flujo de un programa. El programador puede anticiparse a ésta haciendo que su código pueda librarla y que el programa no termine abruptamente.

Ejemplo. Una excepción podría ocurrir en un programa que lee archivos de texto, el programa es incapaz de leer líneas con acentos, apóstrofes, letras Ñ o símbolos raros. El programador tendría que saber manejar esas excepciones y mitigarlas.

Un error es un problema en el programa que hará que éste termine abruptamente; el programador queda indefenso, no puede hacer nada al respecto para remediarlo. Este error puede ser falta de memoria o recursos del sistema, entre otros más.

Ejemplo. Un programa pude cerrarse abruptamente al quedarse sin memoria el sistema operativo.

En Java cada clase (propia o definida por el programador) es hija de la clase padre ``Object``. La clase ``Throwable`` es padre de la clase ``Exception`` y así sucesivamente.

Como se puede ver en la relación ``is-a``

Throwable is-a Object
Exception is-a Throwable
RuntimeException is-a Exception
MyCustomeException is-a Object
MyCustomerException is-a Exception

Nosotros podemos definir nuestra propia excepción.

MyCustomerException.java

/**
*  @author Comunidad City Java Mex
*  @date 06/01/2024
*/

public class MyCustomerException extends RuntimeException{

    public MyCustomerException(String message){
            super(message);
    }

}
Imaginemos que tenemos una clase ``Datos`` con las siguientes propiedades:
  • description de tipo String.
  • author de tipo String.
  • date de tipo Date.
  • value de tipo Integer.
Se podría implementar nuestra excepción a la hora de obtener la descripción (description). La excepción ``MyCustomerException`` será lanzada cuando la description sea igual a null.
/**
* La descripción es nula.
*/
if(datos.getDescription() == null){
  throw new MyCustomerException(" Excepcion: "+ DATA_NULL);
}

La constante ``DATA_NULL`` mostraría un mensaje indicando el error.

public static final String DATA_NULL = "Alguno de los datos es nulo.\n Favor de revisar los datos.";

Podríamos modificar esa pieza de código para validar los campos de la clase ``Datos``.

/**
*
* Algunos de los datos son nulos o igual o menor a cero.
*
*/
if(datos.getDescription() == null || datos.getAuthor() == null || datos.getDate()==null || datos.getValue() <= 0){
  throw new MyCustomerException(" Excepcion: "+ DATA_NULL);
}

Datos.java

import java.util.Date;

public class Datos{
     private Integer value;
     private String author;
     private String description;
     private Date date;

     public Datos(){
        super();
     }

    // Métodos getter & setter

}

Código completo (la clase ``MyCustomerException.java`` esta arriba)

Datos.java

import java.util.Date;

public class Datos{
    private Integer value;
    private String author;
    private String description;
    private Date date;

    public Datos(){
       super();
    }

    public Integer getValue(){
       return value;
    }

    public void setValue(Integer value){
       this.value = value;
    }

    public String getAuthor(){
       return author;
    }

    public void setAuthor(String author){
       this.author = author;
    }

    public String getDescription(){
       return description;
    }

    public void setDescription(String description){
        this.description = description;
    }

    public Date getDate(){
       return date;
    }

    public void setDate(Date date){
        this.date = date;
    }

}

TestMain.java

public class TestMain{

    public static final String DATA_NULL = "Alguno de los datos es nulo.\n Favor de revisar los datos.";

    public static void main(String... args)throws MyCustomerException{
          invocarDatos();
    }

    static void invocarDatos(){
       Datos datos = new Datos();
       datos.setAuthor(null);
       datos.setDescription("A simple picture about misery.");
       datos.setValue(1);
       datos.setDate(new java.util.Date());
       validarDatos(datos);
       System.out.println("Todo bien. La clase tiene datos.");
    }

    /**
    *
    * Algunos de los datos son nulos o igual o menor a cero.
    *
    */
    static void validarDatos(Datos datos){
       if(datos.getDescription() == null || datos.getAuthor() == null || datos.getDate()==null || datos.getValue() <= 0){
         throw new MyCustomerException(" Excepcion: "+ DATA_NULL);
       }
    }

}

Compilamos y ejecutamos:

javac TestMain.java
java TestMain

Salida:

Exception in thread "main" MyCustomerException:  Excepcion: Alguno de los datos es nulo.
 Favor de revisar los datos.
        at TestMain.validarDatos(TestMain.java:28)
        at TestMain.invocarDatos(TestMain.java:17)
        at TestMain.main(TestMain.java:8)

Más ejemplos en próximos posts.

Comentarios

Entradas populares de este blog

¿Cómo diseñar una API REST? (Youtube)

Lo nuevo de Java desde la versión 12 hasta la 22

Aquí unos enlaces a varias publicaciones sobre algunos nuevos aspectos del lenguaje Java, desde la versión 12 a la 22. Expresiones Switch en Java Una nueva funcionalidad en el lenguaje: las expresiones switch. https://emanuelpeg.blogspot.com/2025/01/expresiones-switch-en-java.html API de Servidor Web Simple en Java Una API de Servidor Web Simple que permite crear servidores HTTP ligeros sin necesidad de dependencias externas. https://emanuelpeg.blogspot.com/2025/02/api-de-servidor-web-simple-en-java.html Clases Record Una implementación de las data-clases o del patrón Data Transfer Object, un tipo de clase cuyo único propósito es impulsar la programación con datos inmutables. https://alquimistadecodigo.blogspot.com/2025/02/java-clases-record.html https://emanuelpeg.blogspot.com/2025/02/record-en-java.html Clases Selladas y coincidencia de patrones en Java https://emanuelpeg.blogspot.com/2025/03/clases-selladas-y-coincidencia-de.html https://emanuelpeg.blogspo...