602

Capítulo 13 Manejo de excepciones

El programador utiliza las aserciones principalmente para depurar e identifi car errores lógicos en una aplica-

ción. De manera predeterminada, las aserciones están deshabilitadas al ejecutar un programa, ya que reducen el 
rendimiento y son innecesarias para el usuario del programa. Para habilitar las aserciones en tiempo de ejecución, 
use la opción de línea de comandos 

–ea

 del comando 

java

. Para ejecutar el programa de la fi gura 13.9 con las 

aserciones habilitadas, escriba

java –ea PruebaAssert

No debe encontrar ningún error tipo 

AssertionError

 durante la ejecución normal de un programa escrito 

en forma apropiada. Dichos errores sólo deben indicar errores en la implementación. Como resultado, nunca se 
debe atrapar una excepción tipo 

AssertionError

. En vez de ello, debemos permitir que el programa termine al 

ocurrir el error, para poder ver el mensaje de error; después hay que localizar y corregir el origen del problema. 
Como los usuarios de las aplicaciones pueden elegir no habilitar las aserciones en tiempo de ejecución, no debe-
mos usar la instrucción 

assert

 para indicar problemas en tiempo de ejecución en el código de producción. En 

vez de ello, debemos usar el mecanismo de las excepciones para este fi n.

13.14 Conclusión

En este capítulo aprendió a utilizar el manejo de excepciones para lidiar con los errores en una aplicación. Apren-
dió que el manejo de excepciones permite a los programadores eliminar el código para manejar errores de la “línea 
principal” de ejecución del programa. Vio el manejo de errores en el contexto de un ejemplo de división entre 
cero. Aprendió a utilizar los bloques

try

 para encerrar código que puede lanzar una excepción, y cómo utilizar 

los bloques 

catch

 para lidiar con las excepciones que puedan surgir. Aprendió acerca del modelo de terminación 

del manejo de excepciones, que indica que una vez que se maneja una excepción, el control del programa no 
regresa al punto de lanzamiento. Conoció la diferencia entre las excepciones verifi cadas y no verifi cadas, y cómo 
especifi car mediante la cláusula 

throws

 que las excepciones específi cas que ocurran en un método serán lanzadas 

por ese método al método que lo llamó. Aprendió a utilizar el bloque 

finally

 para liberar recursos, ya sea que 

ocurra o no una excepción. También aprendió a lanzar y volver a lanzar excepciones. Después, aprendió a obtener 
información acerca de una excepción, mediante el uso de los métodos 

printStackTrace

,

getStackTrace

 y 

getMessage

. El capítulo continuó con una discusión sobre las excepciones encadenadas, que permiten a los pro-

gramadores envolver la información de la excepción original con la información de la nueva excepción. Después, 
vimos las generalidades acerca de cómo crear sus propias clases de excepciones. Presentamos las precondiciones 
y poscondiciones para ayudar a los programadores que utilizan sus métodos a comprender las condiciones que 
deben ser verdaderas cuando se hace la llamada al método, y cuando éste regresa. Cuando no se cumplen las 
precondiciones y poscondiciones, los métodos generalmente lanzan excepciones. Por último, hablamos sobre la 
instrucción 

assert

 y cómo puede utilizarse para ayudarnos a depurar los programas. En especial, esta instrucción 

se puede utilizar para asegurar que se cumplan las precondiciones y poscondiciones. En el siguiente capítulo 
aprenderá acerca del procesamiento de archivos, incluyendo la forma en que se almacenan los datos persistentes 
y cómo se manipulan.

 16 
 17  

 

System.out.printf(

"Usted escribio %d\n"

, numero );

 18  

}

// fin de main

19

}

// fin de la clase PruebaAssert

Escriba un numero entre 0 y 10: 

5

Usted escribio 5

Figura 13.9

  |  Verifi car con 

assert

 que un valor se encuentre dentro del rango. (Parte 2 de 2).

Escriba un numero entre 0 y 10: 

50

Exception in thread "main" java.lang.AssertionError: numero incorrecto: 50

at PruebaAssert.main(PruebaAssert.java:15)

13_MAQ_CAP_13_DEITEL.indd602

4/19/081:27:43AM