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

Clojure para programadores Java (1)

Clojure es un lenguaje de programación similar a Lisp. Corre bajo la JVM (Java Virtual Machine) y emplea la programación funcional y orientada a objetos. El sitio oficial dice: Clojure es un lenguaje de programación robusto, práctico y rápido con un conjunto de características útiles que juntas forman una herramienta simple, coherente y poderosa. Creando el Hola,mundo en Clojure. holamundo.clj (println "Hola, mundo en Clojure!!" ) La extensión de un programa en este lenguaje es .clj Como se puede notar la base es colocar las sentencias entre parentesis. ( operador/funcion var1 var2 varN) Deberás descargar Clojure, tener instalado Maven y Java. A continuación se muestra una forma de obtener el JAR de Clojure para ejecutar nuestros programas. En la Línea final podemos acceder al shel o REPL del lenguaje. $ git clone https ://github.com/clojure/clojure.git $ cd clojure $ mvn -Plocal -Dmaven.test.skip=true package $ java -jar clojure.jar E

Java Tip 3: Clases y objetos

Como lo vimos en el post anterior en Java todo es un objeto y cada clase por defecto pertenece a la clase padre Object . No importa que sea una clase String , Integer , Character , StringBuilder , etc. o una definida por el usuario, ninguna es excepción. class Ticket extends Object {} class Animal extends Object {} class Persona extends Object {} ¿Qué es una clase? Existen muchas definiciones, algunas de ellas son: Plantillas para crear objetos. Conjunto de objetos que comparten una estructura y comportamiento comunes. Tipo definido por el usuario. Combinación de unos datos específicos y de las rutinas que pueden operar con esos datos. Síntaxis de una clase: [ modificador ] class Clase { //Campos o atributos (datos o estado) //Métodos (subrutinas) }   Donde el modificador puede ser public (si es así, la clase debe llamarse de igual forma que el archivo) o default , pero nunca private o protected . Nota: Para que exista un objeto prime

Explorando la Programación Orientada a Aspectos (AOP), con @domix