584
Capítulo 13 Manejo de excepciones
Figura 13.2
| Manejo de excepciones
ArithmeticException
e
InputMismatchException.
(Parte 3 de 3).
Introduzca un numerador entero:
100
Introduzca un denominador entero:
hola
Excepcion: java.util.InputMismatchException
Debe introducir enteros. Intente de nuevo.
Introduzca un numerador entero:
100
Introduzca un denominador entero:
7
Resultado: 100 / 7 = 14
La primera ejecución de ejemplo de la fi gura 13.2 muestra una ejecución exitosa que no se encuentra con
ningún problema. En la segunda ejecución, el usuario introduce un denominador cero y ocurre una excepción
ArithmeticException
. En la tercera ejecución, el usuario introduce la cadena
"hola"
como el denominador, y
ocurre una excepción
InputMismatchException
. Para cada excepción, se informa al usuario sobre el error y se
le pide que intente de nuevo; después el programa le pide dos nuevos enteros. En cada ejecución de ejemplo, el
programa se ejecuta hasta terminar sin problemas.
La clase
InputMismatchException
se importa en la línea 3. La clase
ArithmeticException
no necesita
importarse, ya que se encuentra en el paquete
java.lang
. El método
main
(líneas 15 a 49) crea un objeto
Scan-
ner
en la línea 17. En la línea 18 se crea la variable
bolean
llamada
continuarCiclo
, la cual es verdadera si el
usuario no ha introducido aún datos de entrada válidos. En las líneas 20 a 48 se pide repetidas veces a los usuarios
que introduzcan datos, hasta recibir una entrada válida.
Encerrar código en un bloque
try
Las líneas 22 a 33 contienen un
bloque
try
, que encierra el código que podría lanzar (
throw
) una excepción
y el código que no debería ejecutarse en caso de que ocurra una excepción (es decir, si ocurre una excepción, se
omitirá el resto del código en el bloque
try
). Un bloque
try
consiste en la palabra clave
try
seguida de un
bloque de código, encerrado entre llaves (
{}
). [
Nota: el término “bloque
try
” se refi ere algunas veces sólo
al bloque de código que va después de la palabra clave
try
(sin incluir a la palabra
try
). Para simplifi car,
usaremos el término “bloque
try
” para referirnos al bloque de código que va después de la palabra clave
try
, incluyendo esta palabra]. Las instrucciones que leen los enteros del teclado (líneas 25 y 27) utilizan el
método
nextInt
para leer un valor
int
. El método
nextInt
lanza una excepción
InputMismatchExcep-
tion
si el valor leído no es un entero válido.
La división que puede provocar una excepción
ArithmeticException
no se ejecuta en el bloque
try
. En
vez de ello, la llamada al método
cociente
(línea 29) invoca al código que intenta realizar la división (línea 12);
la JVM lanza un objeto
ArithmeticException
cuando el denominador es cero.
Observación de ingeniería de software 13.1
Las excepciones pueden surgir a través de código mencionado en forma explícita en un bloque
try
, a través de llama-
das a otros métodos, de llamadas a métodos con muchos niveles de anidamiento, iniciadas por código en un bloque
try
o desde la Máquina Virtual de Java, al momento en que ejecute códigos de byte de Java.
Atrapar excepciones
El bloque
try
en este ejemplo va seguido de dos bloques
catch
: uno que maneja una excepción
InputMisma-
tchException
(líneas 34 a 41) y uno que maneja una excepción
ArithmeticException
(líneas 42 a 47). Un
bloque
catch
(también conocido como
cláusula
catch
o
manejador de excepciones
) atrapa (es decir, recibe) y
maneja una excepción. Un bloque
catch
empieza con la palabra clave
catch
y va seguido por un parámetro entre
paréntesis (conocido como el parámetro de excepción, que veremos en breve) y un bloque de código encerrado
entre llaves. [
Nota: el término “cláusula
catch
” se utiliza algunas veces para hacer referencia a la palabra clave
catch
, seguida de un bloque de código, en donde el término “bloque
catch
” se refi ere sólo al bloque de código
que va después de la palabra clave
catch
, sin incluirla. Para simplifi car, usaremos el término “bloque
catch
” para
referirnos al bloque de código que va después de la palabra clave
catch
, incluyendo esta palabra].
13_MAQ_CAP_13_DEITEL.indd584
4/19/081:27:33AM