## Requerimientos de Java para Capturar o Especificar Excepciones

Como se mencionó anteriomente, Java requiere que un método o capture o especifique todas las excepciones chequeadas que se pueden lanzar dentro de su ámbito. Este requerimiento tiene varios componentes que necesitan una mayor descripción:

### Capturar

> Un método puede capturar una excepción proporcionando un manejador para ese tipo de excepción. La página siguiente, Tratar con Excepciones, introduce un programa de ejemplo, le explica cómo capturar excepciones, y le muestra cómo escribir un manejador de excepciones para el programa de ejemplo.

### Especificar

> Si un método decide no capturar una excepción, debe especificar que puede lanzar esa excepción. ¿Por queé hicieron este requermiento los diseñadores de Java? Porque una excepción que puede ser lanzada por un método es realmente una parte del interface de programación público del método: los llamadores de un método deben conocer las excepciones que ese método puede lanzar para poder decidir inteligente y concienzudamente qué hacer son esas excepciones. Así, en la firma del método debe especificar las excepciones que el método puede lanzar.

> La siguiente página, Tratar con Excepciones, le explica la especificación de excepciones que un método puede lanzar y le muestra cómo hacerlo.

### Excepciones Chequeadas

> Java tiene diferentes tipos de excepciones, inlcuyendo las excepciones de I/O, las excepciones en tiempo de ejecución, y las de su propia creación. Las que nos interesan a nosotros para esta explicación son las excepciones en tiempo de ejecución, Estas excepciones son aquellas que ocurren dentro del sistema de ejecución de Java. Esto incluye las excepciones aritméticas (como dividir por cero), excepciones de puntero (como intentar acceder a un objeto con una referencia nula), y excepciones de indexación (como intentar acceder a un elemento de un array con un índice que es muy grande o muy pequeño).

> Las excepciones en tiempo de ejecución pueden ocurrir en cualquier parte de un programa y en un programa típico pueden ser muy numerosas. Muchas veces, el costo de chequear todas las excepciones en tiempo de ejecución excede de los beneficios de capturarlas o especificarlas. Así el compilador no requiere que se capturen o especifiquen estas excepciones, pero se puede hacer.

> Las excepciones chequeadas son excepciones que no son excepciones en tiempo de ejecución y que son chequeadas por el compilador (esto es, el compilador comprueba que esas excepciones son capturadas o especificadas).

> Algunas veces esto se considera como un bucle cerrado en el mecanismo de manejo de excepciones de Java y los programadores se ven tentados a convertir todas las excepciones en excepciones en tiempo de ejecución. En general, esto no está recomendado. La controversia -- Excepciones en Tiempo de Ejecución contiene una explicación detallada sobre cómo utilizar las excepciones en tiempo de ejecución.

### Excepciones que pueden ser lanzadas desde el ámbito de un método

> Esta sentencia podría parecer obvia a primera vista: sólo hay que fijarse en la sentencia throw. Sin embargo, esta sentencia incluye algo más no sólo las excepciones que pueden ser lanzadas directamente por el método: la clave esta en la frase dentro del ámbito de. Esta frase incluye cualquier excepción que pueda ser lanzada mientras el flujo de control permanezca dentro del método. Así, esta sentencia incluye:
> - excepciones que son lanzadas directamente por el método con la sentencia throw de Java, y
> - las excepciones que son lanzadas por el método indirectamente a través de llamadas a otros métodos.

Ozito