El programa consiste de cuatro métodos:
main
(líneas 6 a 16),
metodo1
(líneas 19 a 29),
metodo2
(líneas 32
a 42) y
metodo3
(líneas 45 a 48). La línea 10 en el bloque
try
de
main
llama a
metodo1
. La línea 23 en el blo-
que
try
de
metodo1
llama a
metodo2
. La línea 36 en el bloque
try
de
metodo2
llama a
metodo3
. En
metodo3
, la
línea 47 lanza una nueva excepción
Exception
. Como esta instrucción no se encuentra dentro de un bloque
try
,
el
metodo3
termina y la excepción se devuelve al método que hace la llamada (
metodo2
), en la línea 36. Esta ins-
trucción
se encuentra dentro de un bloque
try
; por lo tanto, el bloque
try
termina y la excepción es atrapada en las
líneas 38 a 41. En la línea 40, en el bloque
catch
, se lanza una nueva excepción. En este caso, se hace una llama-
da al constructor
Exception
con dos argumentos). El segundo argumento representa a la excepción que era la
causa original del problema. En este programa, la excepción ocurrió en la línea 47. Como se lanza una excepción
desde el bloque
catch
, el
metodo2
termina y devuelve la nueva excepción al método que hace la llamada (
meto-
do1
), en la línea 23. Una vez más, esta instrucción se encuentra dentro de un bloque
try
, por lo tanto, este bloque
termina y la excepción es atrapada en las líneas 25 a 28. En la línea 27, en el bloque
catch
se lanza una nueva
excepción y se utiliza la excepción que se atrapó como el segundo argumento para el constructor de
Exception
.
Como se lanza una excepción desde el bloque
catch
, el
metodo1
termina y devuelve la nueva excepción al méto-
do que hace la llamada (
main
), en la línea 10. El bloque
try
en
main
termina y la excepción es atrapada en las
líneas 12 a 15. En la línea 14 se imprime un rastreo de la pila.
Observe en la salida del programa que las primeras tres líneas muestran la excepción más reciente que fue
lanzada (es decir, la del
metodo1
en la línea 23). Las siguientes cuatro líneas indican la excepción que se lanzó des-
de el
metodo2
, en la línea 40. Por último, las siguientes cuatro líneas representan la excepción que se lanzó desde
el
metodo3
, en la línea 47. Además observe que, si lee la salida en forma inversa, muestra cuántas excepciones
encadenadas más quedan pendientes.
13.11 Declaración de nuevos tipos de excepciones
La mayoría de los programadores de Java utilizan las clases existentes de la API de Java, de distribuidores inde-
pendientes y de bibliotecas de clases gratuitas (que, por lo general, se pueden descargar de Internet) para crear
aplicaciones de Java. Los métodos de esas clases por lo general se declaran para lanzar las excepciones apropiadas
cuando ocurren problemas. Los programadores escriben código para procesar esas excepciones existentes, para
que sus programas sean más robustos.
Si usted crea clases que otros programadores utilizarán en sus programas, tal vez le sea conveniente declarar
sus propias clases de excepciones que sean específi cas para los problemas que pueden ocurrir cuando otro progra-
mador utilice sus clases reutilizables.
Observación de ingeniería de software 13.13
De ser posible, indique las excepciones de sus métodos mediante el uso de las clases de excepciones existentes, en vez de
crear nuevas clases de excepciones. La API de Java contiene muchas clases de excepciones que podrían ser adecuadas
para el tipo de problema que su método necesite indicar.
java.lang.Exception: La excepcion se lanzo en metodo1
at UsoDeExcepcionesEncadenadas.metodo1(UsoDeExcepcionesEncadenadas.java:27)
at UsoDeExcepcionesEncadenadas.main(UsoDeExcepcionesEncadenadas.java:10)
Caused by: java.lang.Exception: La excepcion se lanzo en metodo2
at UsoDeExcepcionesEncadenadas.metodo2(UsoDeExcepcionesEncadenadas.java:40)
at UsoDeExcepcionesEncadenadas.metodo1(UsoDeExcepcionesEncadenadas.java:23)
... 1 more
Caused by: java.lang.Exception: La excepcion se lanzo en metodo3
at UsoDeExcepcionesEncadenadas.metodo3(UsoDeExcepcionesEncadenadas.java:47)
at UsoDeExcepcionesEncadenadas.metodo2(UsoDeExcepcionesEncadenadas.java:36)
... 2 more
Figura 13.8
| Excepciones encadenadas. (Parte 2 de 2).
13.11 Declaración de nuevos tipos de excepciones
599
13_MAQ_CAP_13_DEITEL.indd599
4/19/081:27:42AM