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