Foro sobre Java SE > Excepciones en Java
Con un simple ejemplo lo entenderás mejor.
El método prueba puede lanzar una IOException o una IllegalStateException ; no captura dichas excepciones, sino que las reenvía al método que lo llama: main, en este caso sencillo.
Es en la llamada a prueba en el método main donde se capturan las excepciones.
import java.io.IOException;
public class NewMain {
public static void main(String[] args) {
try {
prueba();
} catch (IOException | IllegalStateException ex) {
// se manejan las excepciones si son lanzadas por el método prueba
}
}
private static void prueba() throws IOException, IllegalStateException {
// puede lanzar una excepción de tipo IOException o de tipo IllegalStateException
}
}
Guenas.
Creo que confundes dos palabras reservadas.
Una de ellas es throws que declara las excepciones que un método puede lanzar y la otra es throw (en singular) que lanza una excepción hacia arriba.
Se parecen mucho de nombre pero no tienen nada que ver una con otra.
Un saludo
Muchas gracias a las dos respuestas me sirvieron de mucho pero aún me queda un pequeña duda.
Entendí que "throws" devuelve la excepción al método que lo mandó a llamar pero que pasa si el método main devuelve esa excepcion, ¿a dónde se va?
De todas formas gracias a las dos respuestas me sirvieron de mucho.
Si main relanza la excepción, no la captura la aplicación, porque ya no hay otro método por encima de main que lo haga. La excepción la procesará la VM, y la mostrará en la consola de Java.
En el siguiente test, solo verás la primera excepción lanzada desde prueba, en la consola de Java.
import java.io.IOException;
public class NewMain {
public static void main(String[] args) throws IOException {
prueba();
ClaseDePrueba claseDePrueba = new ClaseDePrueba();
}
private static void prueba() throws IOException {
throw new IOException("excepción lanzada desde el método prueba");
}
private static class ClaseDePrueba {
ClaseDePrueba() throws IOException {
throw new IOException("excepción lanzada desde el constructor de la clase ClaseDePrueba");
}
}
}
Prueba a ejecutar ahora este test:
import java.io.IOException;
public class NewMain {
public static void main(String[] args) {
try {
prueba();
} catch (IOException ex) {
System.out.println(ex);
}
try {
ClaseDePrueba claseDePrueba = new ClaseDePrueba();
} catch (IOException ex) {
System.out.println(ex);
}
}
private static void prueba() throws IOException {
throw new IOException("excepción lanzada desde el método prueba");
}
private static class ClaseDePrueba {
ClaseDePrueba() throws IOException {
throw new IOException("excepción lanzada desde el constructor de la clase ClaseDePrueba");
}
}
}
Muchas gracias, ahora sí me queda perfectamente claro esto de las excepciones.
En verdad se los agradezco.
He estado investigando sobre el manejo de excepciones en Java pero hay una cosa que no me queda muy clara. Se trata del "throws", sé que se debe poner en el encabezado del método que podría lanzar una excepción, sin embargo leí que esta palabra clave manda la excepción a un método superior y esa parte es la que no entiendo.
Les agradecería una explicación y si se puede algún ejemplo.