[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
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
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
8 Comentarios | deja el tuyo





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”
estaria bueno que subieras programas de aplicaciones web en xml
orale esta chicho espero y sigas, asi tus codigos me an serbido de mucho, gracias carnal, saludos bye
lo necesito es muy bueno
ESTAN BUENOS TUS CODIJOS PERO NO ME SIENTO AGUSTO DESCARGANDOLOS APARTE DE QUE MA AN SERVIDO NESESITO SABER PARA QUE SIRVE CADA PALABRA RESERVADA
BYE
Me ayudo mucho, gracias por publicar y dar un poco de tu tiempo en compartir
muchas gracias!!!!!!!!!!!!!!!!!
la página esta buenisima
exelente ejemplo y los esplica muy bien
hojala siga dando ejemplos
gracias