Noticias

* Completa este formulario para conocer los temas de tu interes, te tomará unos segundos.
* Nuevos temas en CAKEPHP
* Ahora puedes bajar los proyectos finalizados!
* Sigue a la página para seguir creciendo!!

viernes, 19 de abril de 2013

Java: Manejo de excepciones con Try/Catch/Finally.

3 comentarios :
Introducción

Las excepciones vienen siendo fallos que se pueden controlar, por ejemplo la división por cero, esto no es un error, sino simplemente es algo que matemáticamente no está definido. En java existen formas de controlar estas excepciones usando los try/catch, en esta entrada se va a explicar como funcionan y como se programan estos try/catch. Además de algunos ejemplo en los cuales nos vendrían a ayudar, a que nuestro programa no se venga abajo por pequeños inconvenientes a la hora de no validar en nuestro código.

Desarrollo

Antes que todo en Java existen errores y excepciones acá les dejo una imagen con algunos (no son todos debido a que hay clases específicas que traen sus propios manejos de excepciones como java.text) errores y excepciones tomada de : http://leo.ugr.es/J2ME/CLDC/transjava/node10.html

Los componentes del try/catch/finally se explican a continuación, dentro del bloque de try se escribe el código inconsistente, en otras palabra, el código que puede llevarnos a tener una excepción, luego viene el bloque catch, la función de este es capturar las excepciones de nuestro código en el try, pueden existir más de una sentencia catch en el conjunto, por ejemplo una para errores aritméticos y otra para un puntero nulo , por último pero no menos importante el finally, el código de este bloque se ejecutará sin importar que haya sucedido en los bloques try y catch.

Para programar esto en Java, se sigue esta estructura base:
  try {
   //Código inconsistente
  } catch (Exception e) {
   //En caso de una excepción
  }
  finally{
   //Código que siempre se ejecutará
  } 


Ahora realizaremos unos ejemplo para entender un poco mejor como funciona este manejo de excepciones.

Ejemplo #1: Crear una Mascara que aprendimos en : maskformatter y jformattedtextfield

MaskFormatter mascara = new MaskFormatter();
  try {
   mascara = new MaskFormatter("?#####");
  } catch (ParseException e) {
    //Por lo general uno coloca esto, lo que
    //hace es mostrar el mensaje de error    
   e.printStackTrace();
  }

Ejemplo #2: La validación de una cadena para saber si es un número:
//Variable que nos dirá si es un número o no
  boolean entero = true;
  //Cadena que evaluaremos
  String cadena = "ABC";
  try{
   //Parseo de String a Integer
   Integer.parseInt(cadena);
  }catch(NumberFormatException nfe){
   //En caso de excepción
   JOptionPane.showMessageDialog(null, "Error " + nfe.getLocalizedMessage());
   entero = false;
  }
  finally{
   //Mostramos el resultado de la evaluación
   JOptionPane.showMessageDialog(null, entero);
  }

Ejemplo #3: Este ejemplo podría parecerles algo tonto pero bueno:
//Declaramos un vector String
  String[] vector = {"1","2"};
  //Recorremos ese vector, pero ATENCIÓN, lo recorremos
  //hasta una posición más de la total (vector.length + 1) 
  for (int i = 0; i < vector.length + 1; i++) {
   try {
    //Codigo inconsistente
    System.out.println(vector[i]);
   } catch (ArrayIndexOutOfBoundsException e) {
    //Mensaje de excepción
    JOptionPane.showMessageDialog(null, "Se salió del vector");
   } 
  }


Conclusiones

El manejo de excepciones es una parte muy importante al momento de realizar aplicaciones, sin importar el lenguaje.
Java brinda esta estructura para un manejo adecuado y ordenado de las excepciones.
Existen muchas clases que tienen excepciones propias por lo cual es nada más investigar cuales son y cuando se producen.

3 comentarios :

  1. he vale francisco muy bueno... pero tengo una duda como aria para la excepcion de una letra es decir en el switc siempre lo manejo con le tras pero si la opcion que el usuario igresara no es una letra como ao esa excepcion:?

    ResponderEliminar
    Respuestas
    1. por ejemplo digamos yo creo este switch

      switch (key) {
      case a:
      // hago algo
      break;

      // casos de b a y
      case z
      break
      default:
      // si no era ninguno de los anteriores hago algo por ejemplo un mensaje de error
      break;
      }

      Eliminar
    2. Otra posibilidad es decir
      miChar es una letra minuscula que digita el usuario

      if (miChar >= 'a' && miChar <= 'z'){
      System.out.println('a' + 0 + " " + ('z' + 0));
      } else {
      System.out.println("No es una letra entre a - z")
      }

      Eliminar