Escolar Documentos
Profissional Documentos
Cultura Documentos
• Neste caso as exceções são analisadas na ordem em que aparecem nas clausulas “catch”.
• Note que as regras de polimorfismo continuam valendo: se uma superclasse aparecer antes
de uma subclasse acabará capturando todas as exceções derivadas.
Outro exemplo com finally
• A clausula “finally” indica um trecho de código que sempre será executado, ocorrendo exceção ou não.
• Normalmente é usado para garantir que recursos que estão sendo utilizados no momento que ocorreu a
exceção sejam liberados.
try{
result = fatorial(x);
System.out.println("Fatorial de "+x+" = "+result);
}catch(IllegalArgumentException e){
System.out.println("Valor negativo invalido p/calculo do fatorial");
System.out.println("Tente novamente");
}catch(ArithmeticException e){
System.out.println("Valor muito grande para o calculo do fatorial");
System.out.println("Tente novamente");
}finally{
System.out.println("Esse trecho sempre é executado!!");
}
Criando classes para representar exceções
• É conveniente criar classes para representar exceções quando as classes
de exceção previstas na API do Java não expressam adequadamente a
situação que se deseja sinalizar.
• É uma questão de semântica e clareza ou
• Quando se deseja que a “exceção” carregue mais informações.
• Novas exceções são criadas por herança a partir das já existentes
• É importante definir se a nova exceção necessita ser verificada ou não
• Não verificadas: normalmente indicam mau uso dos métodos por parte do
programador.
• Verificadas: condições de exceção que podem ocorrer mesmo usando-se
corretamente os métodos
Exemplos
• Exceção verificada: • Exceção não verificada:
public class FooException extends Exception {
public FooException() { super(); } public class FooRuntimeException
extends RuntimeException {
public FooException(String message) {
...
super(message);
}
}
public FooException(String message, Throwable cause){
super(message, cause);
}
public FooException(Throwable cause) {
super(cause);
}
}