Suscribirse al Feed
17Dic

[código] Manejo de Excepciones en Java (2)

(anterior) En esta sección se exponen ejemplos en Java acerca del manejo de excepciones, un tema importante en la construcción de aplicaciones de "misión crítica" o de "comercio crítico". Para utilizar un componente de Java, es necesario saber no sólo la manera como se comporta ese componente cuando "las cosas salen bien", sino también cuando "las cosas salen mal". En esta sección se introducen instrucciones imprescindibles en el manejo de excepciones (try, catch, finally).

Demostración de la limpieza de la pila


public class UsoExcepciones {

   public static void main( String args[] )
   {
      // llamar a lanzaExcepcion para demostrar la limpieza de la pila
      try {
         lanzaExcepcion();
      }

      // atrapar excepción lanzada en lanzaExcepcion
      catch ( Exception excepcion ) {
         System.err.println( "La excepcion se manejo en main" );
      }
   }

   // lanzaExcepcion lanza la excepción que no es atrapada en este método
   public static void lanzaExcepcion() throws Exception
   {
      // lanzar una excepción y atraparla en main
      try {
         System.out.println( "El metodo lanzaExcepcion" );
         throw new Exception();      // generar excepción
      }

      // catch es del tipo incorrecto, por lo que la excepción no es atrapada
      catch( RuntimeException excepcionTiempoEjecucion ) {
         System.err.println(
            "La excepcion se manejo en el metodo lanzaExcepcion" );
      }

      // la cláusula finally siempre se ejecuta
      finally {
         System.err.println( "Finally siempre se ejecuta" );
      }

   } // fin del método lanzaExcepcion

}

#java UsoExcepciones
El metodo lanzaExcepcion
Finally siempre se ejecuta
La excepcion se manejo en main

Descargar código fuente

Demostración de getMessage y printStackTrace de la clase Exception


public class UsoExcepciones {

   public static void main( String args[] )
   {
      try {
         metodo1(); // llamar a metodo1
      }

      // atrapar las excepciones lanzadas desde metodo1
      catch ( Exception excepcion ) {
         System.err.println( excepcion.getMessage() + "\n" );
         excepcion.printStackTrace();

         // obtener la información de rastreo de la pila
         StackTraceElement[] elementosRastreo = excepcion.getStackTrace();

         System.out.println(  "\nRastreo de pila proveniente de getStackTrace:" );
         System.out.println( "Clase\t\tArchivo\t\t\tLinea\tMetodo" );

         // iterar a través de elementosRastreo para obtener descripción de las excepciones
         for ( int i = 0; i < elementosRastreo.length; i++ ) {
            StackTraceElement elementoActual = elementosRastreo[ i ];
            System.out.print( elementoActual.getClassName() + "\t" );
            System.out.print( elementoActual.getFileName() + "\t" );
            System.out.print( elementoActual.getLineNumber() + "\t" );
            System.out.print( elementoActual.getMethodName() + "\n" );

         } // fin de la instrucción for

      } // fin de la instrucción catch

   } // fin del método main

   // llamar a metodo2; lanzar excepciones de vuelta hacia main
   public static void metodo1() throws Exception
   {
      metodo2();
   }

   // llamar al método3; lanzar excepciones de vuelta hacia metodo1
   public static void metodo2() throws Exception
   {
      metodo3();
   }

   // lanzar excepción de vuelta a metodo2
   public static void metodo3() throws Exception
   {
      throw new Exception( "La excepcion se lanzo en metodo3" );
   }

} // fin de la clase UsoExcepciones

#java UsoExcepciones
La excepcion se lanzo en metodo3

java.lang.Exception: La excepcion se lanzo en metodo3
at UsoExcepciones.metodo3(UsoExcepciones.java:50)
at UsoExcepciones.metodo2(UsoExcepciones.java:44)
at UsoExcepciones.metodo1(UsoExcepciones.java:38)
at UsoExcepciones.main(UsoExcepciones.java:7)

Rastreo de pila proveniente de getStackTrace:
Clase Archivo Linea Metodo
UsoExcepciones UsoExcepciones.java 50 metodo3
UsoExcepciones UsoExcepciones.java 44 metodo2
UsoExcepciones UsoExcepciones.java 38 metodo1
UsoExcepciones UsoExcepciones.java 7 main

Descargar código fuente

Demostración de las excepciones encadenadas

public class UsoExcepcionesEncadenadas {

   public static void main( String args[] )
   {
      try {
         metodo1(); // llamar a metodo1
      }

      // atrapar las excepciones lanzadas desde metodo1
      catch ( Exception excepcion ) {
         excepcion.printStackTrace();
      }
   }

   // llamar al metodo2; lanzar excepciones de vuelta a main
   public static void metodo1() throws Exception
   {
      try {
         metodo2(); // llamar a metodo2
      }

      // atrapar la excepción lanzada desde metodo2
      catch ( Exception excepcion ) {
         throw new Exception( "Excepcion lanzada en metodo1", excepcion );
      }
   }

   // llamar a metodo3; lanzar excepciones de vuelta a metodo1
   public static void metodo2() throws Exception
   {
      try {
         metodo3(); // llamar a metodo3
      }

      // atrapar la excepción lanzada desde metodo3
      catch ( Exception excepcion ) {
         throw new Exception( "Excepcion lanzada en metodo2", excepcion );
      }
   }

   // lanzar excepción de vuelta a metodo2
   public static void metodo3() throws Exception
   {
      throw new Exception( "Excepcion lanzada en metodo3" );
   }

} // fin de la clase UsoExcepcionesEncadenadas

#java UsoExcepcionesEncadenadas
java.lang.Exception: Excepcion lanzada en metodo1
at UsoExcepcionesEncadenadas.metodo1(UsoExcepcionesEncadenadas.java:25)
at UsoExcepcionesEncadenadas.main(UsoExcepcionesEncadenadas.java:7)
Caused by: java.lang.Exception: Excepcion lanzada en metodo2
at UsoExcepcionesEncadenadas.metodo2(UsoExcepcionesEncadenadas.java:38)
at UsoExcepcionesEncadenadas.metodo1(UsoExcepcionesEncadenadas.java:20)
... 1 more
Caused by: java.lang.Exception: Excepcion lanzada en metodo3
at UsoExcepcionesEncadenadas.metodo3(UsoExcepcionesEncadenadas.java:45)
at UsoExcepcionesEncadenadas.metodo2(UsoExcepcionesEncadenadas.java:33)
... 2 more

Descargar código fuente

Etiquetas: ,
Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

1 Comentario para “[código] Manejo de Excepciones en Java (2)”

  1. a gravatar

    PICCORO dice:  


    en cierto codigo manejo TODAS las execpiones generadas y las lanzo hasta el padre, pero solo obtengo informacion de la clase y linea, pero no que fue lo que paso como el stacktrace de println, este es el codigo:

    StackTraceElement[] stacktrace = e.getStackTrace();
    errorLog(” executor has failed..”, stacktrace[0].toString() + ” and “+ stacktrace[0].getClassName() );

    y trae la nombre de mi clase que genero el error y en que liea y desde donde ya que tomo el origen en el array que es “0″

    como hago para obtener algo asi :
    “PostgreSQLException: userdb password failed”

 

 

Antes de comentar... recuerda que no hago tareas

Te invito a subscribirte al feed RSS. ¿No sabes que es un lector de Feeds?

© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS