Olá pessoal, estou na seguinte dúvida.
Tenho um código e lancei uma exceção nele, mas ele tratou a exceção como se nada de errado tivesse acontecido(e nada de errado acontece mesmo).
Vejam o código abaixo, que foi adaptado:
public class OverAndOver {
static String s=" ";
public static void main(String[]args){
try{
s +="1";
throw new Exception();
}catch(Exception e){s +="2";
}finally{s += "3"; doStuff(); s +="4";
}
System.out.println(s);
}
static void doStuff(){int x = 0; int y =7-x;}
}
Fiz uma adaptação do método estático doStuff. No lugar de y=7-x, que resultaria em 7, na verdade o código anterior seria 7/x, o que resultaria em uma excessão ArithmeticException.
Pois bem, se eu lancei uma excessão dentro de
try{
s +="1";
throw new Exception();
}
como ele compila e resulta?:1234
Quer dizer se não achar o erro, só pelo fato de no try eu lançar o throw new Exception ele chama o catch?
exatamente
você manda lançar a exceção invariavelmente e é isso que o programa faz
o certo seria
try {
r=7/x;
} catch(Exception ex) {
//trata o problema
}
neste caso a exceção é lançada automaticamente se você tentar dividir por zero
caso você queira lançar uma exceção não automática você tem que fazer isso condicionalmente
if(coisa_indevida_acontecer) throw new OutraException();
tem funções que lançam exceções então também pode acontecer de você não ver a exceção sendo lançada explicitamente
try{
funcao(3);
} catch(Exception ex) {
//trata o problema
}
//vou colocar aqui mesmo a descrição da função funcao()
void funcao(int a) throws Exception {
if(a==5) throw new Exception();
}
daí a função lança a exceção de dentro e ela é pega no catch
try
{
// Tente fazer isso, se não conseguir... capture o erro com o catch, lance uma exceção ou então exiba uma mensagem.
}catch(Exception e){
System.out.println(" Erro! Sistema indisponível no momento. ");
}
e a parte do finally vc coloca se quiser... isso ele executa de qualquer jeito... ocorrendo erro ou não...