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); } }
- description de tipo String.
- author de tipo String.
- date de tipo Date.
- value de tipo Integer.
/** * 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
Publicar un comentario