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