606
Capítulo 13 Manejo de excepciones
13.3
¿Por qué son las excepciones particularmente apropiadas para tratar con los errores producidos por los métodos
de las clases en la API de Java?
13.4
¿Qué es una “fuga de recursos”?
13.5
Si no se lanzan excepciones en un bloque
try
, ¿hacia dónde procede el control cuando el bloque
try
completa
su ejecución?
13.6
Mencione una ventaja clave del uso de
catch(Exception
nombreExcepción
)
.
13.7
¿Debe una aplicación convencional atrapar los objetos
Error
? Explique.
13.8
¿Qué ocurre si ningún manejador
catch
coincide con el tipo de un objeto lanzado?
13.9
¿Qué ocurre si varios bloques
catch
coinciden con el tipo del objeto lanzado?
13.10
¿Por qué debería un programador especifi car un tipo de superclase como el tipo en un bloque
catch
?
13.11
¿Cuál es la razón clave de utilizar bloques
finally
?
13.12
¿Qué ocurre cuando un bloque
catch
lanza una excepción
Exception
?
13.13
¿Qué hace la instrucción
throw
referenciaExcepción?
13.14
¿Qué ocurre a una referencia local en un bloque
try
, cuando ese bloque lanza una excepción
Exception
?
Respuestas a los ejercicios de autoevaluación
13.1
Agotamiento de memoria, índice de arreglo fuera de límites, desbordamiento aritmético, división entre cero,
parámetros inválidos de método.
13.2
a) El manejo de excepciones está diseñado para manejar las situaciones que ocurren con poca frecuencia y que
a menudo provocan la terminación del programa, no situaciones que surjan todo el tiempo. b) Por lo general, el fl ujo
de control con estructuras de control convencionales es más claro y efi ciente que con las excepciones. c) Las excepciones
“adicionales” pueden interponerse en el camino de las excepciones de tipos de errores genuinos. Es más difícil para el
programador llevar el registro de un número más extenso de casos de excepciones.
13.3
Es muy poco probable que los métodos de clases en la API de Java puedan realizar un procesamiento de errores
que cumpla con las necesidades únicas de todos los usuarios.
13.4
Una “fuga de recursos” ocurre cuando un programa en ejecución no libera apropiadamente un recurso cuando
éste ya no es necesario.
13.5
Los bloques
catch
para esa instrucción
try
se ignoran y el programa reanuda su ejecución después del últi-
mo bloque
catch
. Si hay bloque
finally
, se ejecuta primero y luego el programa reanuda su ejecución después del
bloque
finally
.
13.6
La forma
catch(Exception
nombreExcepción
)
atrapa cualquier tipo de excepción lanzada en un bloque
try
.
Una ventaja es que ninguna excepción
Exception
lanzada puede escabullirse sin ser atrapada. El programador puede
entonces decidir si manejará la excepción o si posiblemente vuelva a lanzarla.
13.7
Las excepciones
Error
son generalmente problemas graves con el sistema de Java subyacente; en la mayoría
de los programas no es conveniente atrapar excepciones
Error
, ya que el programa no podrá recuperarse de dichos
problemas.
13.8
Esto hace que la búsqueda de una coincidencia continúe en la siguiente instrucción
try
circundante. Si hay
un bloque
finally
, éste se ejecutará antes de que la excepción pase a la siguiente instrucción
try
circundante. Si
no hay instrucciones
try
circundantes para las cuales haya bloques
catch
que coincidan, y la excepción es
verifi cada,
se produce un error de compilación. Si no hay instrucciones
try
circundantes para las cuales haya bloques
catch
que coincidan y la excepción es
no verifi cada, se imprime un rastreo de la pila y el subproceso actual termina antes
de tiempo.
13.9
Se ejecuta el primer bloque
catch
que coincida después del bloque
try
.
13.10
Esto permite a un programa atrapar tipos relacionados de excepciones, y procesarlos en una manera uniforme.
Sin embargo, a menudo es conveniente procesar los tipos de subclases en forma individual, para un manejo de excep-
ciones más preciso.
13.11
La cláusula
finally
es el medio preferido para liberar recursos y evitar las fugas de éstos.
13.12
Primero, el control pasa al bloque
finally
, si existe uno. Después, la excepción se procesará mediante un bloque
catch
(si existe uno) asociado con un bloque
try
circundante (si existe uno).
13_MAQ_CAP_13_DEITEL.indd606
4/19/081:27:45AM