La declaración throws Exception
es una forma automatizada de realizar un seguimiento de los métodos que pueden arrojar una excepción por razones anticipadas pero inevitables. La declaración suele ser específica sobre el tipo o tipos de excepciones que pueden arrojarse, como throws IOException
o throws IOException, MyException
.
Todos tenemos o eventualmente escribiremos código que se detiene inesperadamente e informa una excepción debido a algo que no anticipamos antes de ejecutar el programa, como división por cero o índice fuera de límites. Como el método no esperaba los errores, no podían "atraparse" y manejarse con una cláusula try catch. Cualquier usuario desprevenido del método tampoco sabría de esta posibilidad y sus programas también se detendrían.
Cuando el programador sabe que pueden ocurrir ciertos tipos de errores pero desea manejar estas excepciones fuera del método, el método puede "arrojar" uno o más tipos de excepciones al método de llamada en lugar de manejarlos. Si el programador no declaró que el método (podría) arrojar una excepción (o si Java no tenía la capacidad de declararlo), el compilador no podría saberlo y le correspondería al futuro usuario del método conocerlo, atrapa y maneja cualquier excepción que pueda arrojar el método. Dado que los programas pueden tener muchas capas de métodos escritos por muchos programas diferentes, se hace difícil (imposible) hacer un seguimiento de qué métodos pueden arrojar excepciones.
Aunque Java tiene la capacidad de declarar excepciones, aún puede escribir un nuevo método con excepciones no controladas y no declaradas, y Java lo compilará y podrá ejecutarlo y esperar lo mejor. Lo que Java no le permitirá hacer es compilar su nuevo método si usa un método que ha sido declarado como lanzamiento de excepción (s), a menos que maneje la (s) excepción (es) declarada (s) en su método o declare que su método arroja el mismo excepción (es) o si hay múltiples excepciones, puede manejar algunas y tirar el resto.
Cuando un programador declara que el método arroja un tipo específico de excepción, es solo una forma automática de advertir a otros programadores que utilizan el método que es posible una excepción. El programador puede entonces decidir manejar la excepción o pasar la advertencia declarando que el método de llamada también arroja la misma excepción. Como se advirtió al compilador de que la excepción es posible en este nuevo método, puede verificar automáticamente si los llamantes futuros del nuevo método manejan la excepción o la declaran y hacen cumplir una u otra para que suceda.
Lo bueno de este tipo de solución es que cuando el compilador informa Error: Unhandled exception type java.io.IOException
da el archivo y el número de línea del método que se declaró para lanzar la excepción. A continuación, puede optar por simplemente pasar el dinero y declarar que su método también "arroja IOException". Esto puede hacerse hasta el método principal, donde provocaría que el programa se detenga e informe la excepción al usuario. Sin embargo, es mejor detectar la excepción y tratarla de una manera agradable, como explicarle al usuario lo que sucedió y cómo solucionarlo. Cuando un método atrapa y maneja la excepción, ya no tiene que declarar la excepción. El dinero se detiene allí, por así decirlo.
@PaulTomblin main ciertamente se puede declarar para lanzar Exception. Si lo hace, la JVM se apagará. Esto es lo más cercano a ignorarlo como permitirá el compilador. – Taymon
Cuando el método llamado (** Methdod1 **) arroja 'Exception', tenemos que definir el método de llamada (** Method2 **) con' throws Exception'; si no estamos entregando esa excepción en el método de llamada. El propósito de esto es dar la cara al método de llamada (** Método3 **) de ** Método2 ** que una Excepción puede ser lanzada por ** Método2 ** y usted debe manejarlo aquí, de lo contrario puede interrumpir su programa. – Rito
De forma similar, si ** Method3 ** no está manejando la excepción en su cuerpo, entonces, tenía que definir 'throws Exception' en su definición de método para dar la cabecera de su método de llamada. _extensión del comentario anterior_ – Rito