Amigos,
Não entendi o que o livro da Kathy Sierra diz na página 162 para a prova 1.4, " Se você quiser relançar a exceção … que capturou, terá que declará-la".
alguém poderia exemplificar isso, porque não entendi ?
Obrigado.
Declarar e lançar uma exceção
2 Respostas
Se vc fizer um catch em uma exceção checada e quiser lançá-la para quem chamou o método onde este catch está, então você precisa que a declaração do seu método explicite que ele pode lançar esta exceção.
Exemplo:
public void metodo1() throws MinhaException{
try{
this.outroMetodo();
}catch(OutraException oe){
//voce faz isso porque o outroMetodo lança uma exceção que este aqui não pode lançar.
}
}
Se você quiser lançar a exceção do tipo OutraException, então seu método precisa declará-la.
public void metodo1() throws MinhaException, OutraException{
try{
this.outroMetodo();
}catch(OutraException oe){
//agora você pode lançá-la e nem precisaria do catch.
throw oe;
}
}
Se você tentar este usar este código sem declarar a OutraException no método, então você encontraria um erro de compilação.

lembra da regrinha: “Você deve tratar ou declarar uma exceção” ou seja seu metodo deve tratar a exceção ou passar ela para quem chamou aquele metodo… porém relançar uma exceção o método deve declarar senao o codigo nao compila, ja que vai estar quebrando a regra veja:
class Regr{
static void moeda() throws Exception{
throw new Exception();
}
public static void main(String args[]){
try{
moeda();
}
//aqui ele trata a exceção lançada pelo metodo moeda
catch(Exception e){
throw e;
// mais e essa aqui que foi relançada quem ta declarando(throws) ou //tratando?(Ninguem)
}
}}
Ai vc está quebrando a regra… de quando uma exceção for Verificada vc deve tratar ou declarar essa exceção… entao para funciona so basta acrescentar isso:
public static void main(String args[]) throws Exception{
.....
}
Espero ter ajudado 