El manejo de errores es una parte importante cuando estamos creando programas de cualquier tipo y en cualquier lenguaje. Java tiene una gran variedad de opciones para manejar errores, pero a veces es necesario crear nuestras propias excepciones para manejar errores que son propios de nuestra aplicación y que por ende, nadie más ha implementado.

En este post tomamos como ejemplo una clase que hace varias operaciones aritméticas, pero tenemos las siguientes reglas del negocio:

  • Solo se pueden sumar y multiplicar números positivos
  • No se puede dividir dentro de 0

Entonces vamos a crear 2 excepciones “personalizadas” para cumplir con esta lógica. Digamos que tenemos la implementación básica de la clase Aritmética.

package com.ricardogeek;

public class Aritmetica {

	public int suma(int x, int y) {
		return x + y;
	}

	public int multiplica(int x, int y) {
		return x * y;
	}

	public int divide(int x, int y) {
		return x / y;
	}
}

Esta clase no es exactamente lo que buscamos, vamos a crear 2 clases de excepción muy sencillas que se van a llamar:

  • ExcepcionNumeroNegativo
  • ExcepcionDivisionPorCero

Los pongo en español para mayor entendimiento, pero la convención de la industria sería que estuvieran en ingles (NegativeNumberException, DivideByZeroException).

package com.ricardogeek;

import java.lang.Exception;

public class ExcepcionNumeroNegativo extends Exception {

	public ExcepcionNumeroNegativo() {
		super("No se permiten numeros negativos.");
	}

}

 

package com.ricardogeek;

import java.lang.Exception;

public class ExcepcionDivisionPorCero extends Exception {

	public ExcepcionDivisionPorCero() {
		super("No se permiten Dividir por cero.");
	}

}

Estas son excepciones custom que heredan todo de la excepción básica Exception por defecto que viene en java, que a su vez hereda cosas de la clase Throwable por lo tanto nuestras excepciones ya son del tipo base Excepción y tienen la capacidad de ser “arrojadas”.

Con esto vamos a modificar un poco nuestra primera clase Aritmética y le vamos a agregar el manejo de errores de acuerdo a las reglas del negocio que interesan únicamente a ella.

La clase queda asi:

package com.ricardogeek;

import com.ricardogeek.ExcepcionNumeroNegativo;
import com.ricardogeek.ExcepcionDivisionPorCero;

public class ExcepcionNumeroNegativo {

	public int suma(int x, int y) throws ExcepcionNumeroNegativo {
		if(x < 0 || y < 0) {
			throw new ExcepcionNumeroNegativo();
		}

		return x + y;
	}

	public int multiplica(int x, int y) throws ExcepcionNumeroNegativo {
		if(x < 0 || y < 0) {
			throw new ExcepcionNumeroNegativo();
		}

		return x * y;
	}

	public int divide(int x, int y) throws ExcepcionDivisionPorCero {
		if(y == 0) {
			throw new ExcepcionDivisionPorCero();
		}
		return x / y;
	}
}

Entonces para comprobar que todo funciona bien, agregamos una clase Main al proyecto que luce así:

package com.ricardogeek;

import com.ricardogeek.Aritmetica;

public class Main {

	public static void main(String args []) {
		final Aritmetica aritmetica = new Aritmetica();
		
		try {
			aritmetica.suma(-1, -2);
		} catch(ExcepcionNumeroNegativo excepcionNumeroNegativo) {
			System.out.println(excepcionNumeroNegativo.getMessage());
		}

		try {
			aritmetica.multiplica(-1, -2);
		} catch(ExcepcionNumeroNegativo excepcionNumeroNegativo) {
			System.out.println(excepcionNumeroNegativo.getMessage());
		}
		
		try {
			aritmetica.divide(1, 0);
		} catch(ExcepcionDivisionPorCero excepcionDivisionPorCero) {
			System.out.println(excepcionDivisionPorCero.getMessage());
		}
		
		
	}

}

Compilamos corriendo el siguiente comando:

javac com/ricardogeek/Main.java

Se generan los binarios y corremos el programa:

java com/ricardogeek/Main

Si todo se logró perfectamente, obtendremos el siguiente output en la terminal:

No se permiten numeros negativos.
No se permiten numeros negativos.
No se permiten Dividir por cero.

Y ahí lo tienen! un manejo de errores de calidad mundial!

Si gustan descargar el código del ejercicio está disponible a través de este enlace

Y ahora… manos al código, recuerden que una aplicación con errores bien manejados es una aplicación de clase mundial.

Categorized in:

Tagged in:

, ,