lanza palabra clave se utiliza sólo para excepción comprobada. Se instruye a la persona que llama al bloque catch try de uso para todos excepto las excepciones enumeradas por los tiros de palabras clave.
Puesto que sabemos qué tipo de excepción comprobada podría ocurrir en nuestro módulo, a continuación:
- ¿Por qué no usamos bloque intento de captura dentro del módulo para manejar las excepciones controladas?
- Podemos controlar las excepciones controladas dentro del módulo usando el bloque try-catch?
- Si la respuesta de (2) es sí, entonces ¿Por qué nos están obligando a la persona que llama excepto aquellas excepciones que utilizan los tiros de palabras clave, cuando podríamos excepto el mismo dentro del propio módulo?
De esa manera no se debe quizás de forma manual, salvo las excepciones cada vez que se llama al método.
Permítanme utilizar FileInputStream::new
tirar FileNotFoundException
como un ejemplo para aclarar su confusión.
Así, por ejemplo, tenemos un poco de código como este:
FileInputStream fis = new FileInputStream("/some/path/to/file.txt");
Eso podría lanzar una FileNotFoundException
, y usted está diciendo que,
FileInputStream
obviamente sabe que va a lanzar unaFileNotFoundException
, así que ¿por qué no maneja ella misma?
Debido a que FileInputStream
no sabe cómo manejar la excepción!
Dependiendo de la situación, hay un montón de maneras de manejar una FileNotFoundException
:
- Si la ruta del archivo proviene de la entrada del usuario, es posible pedir al usuario que introduzca otra ruta de archivo
- Es posible que aparezca un mensaje de error
- Es posible que no hacer nada y dejar que se estrelle
Todo lo anterior podría ser completamente sensibles opciones dependiendo de la situación. ¿Cómo es un FileInputStream
va a saber sobre su situación? ¡No es!
Es por eso que está diciendo, con una throws
cláusula:
Estoy lanzando estas excepciones, manejar por sí mismo.