Curso de Análise e Desenvolvimento de Sistemas

Propaganda
Curso de Análise e Desenvolvimento de Sistemas
Disciplina: Programação Orientada a Objetos
Prof. Gilmar Caiado
Material de Apoio – 4o Período – 22/09/2009
Programação Orientada a Objetos – Material de Apoio 4
Tratamento de Exceções (try / catch)
•
Mecanismo implementado na linguagem java que auxilia na recuperação de erros que ocorram
em um try, possibilitando o seu tratamento em um catch;
Ex. 1: sem captura de erro via try / catch – simulação de erro por divisão de um número por zero:
public class ExceptionZeroDivision {
//testa a divisão de um número por zero sem capturar a exceção lançada
public static void main (String args[]) {
double num = 87 / 0;
System.out.println("Resultado da divisão: " + num);
}
}
Resultado da execução:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at tratexcecoes.ExceptionZeroDivision.main(ExceptionZeroDivision.java:7)
Ex. 2: captura do erro via try / catch:
public class TrataExceptionZeroDivision {
//testa a divisão de um número por zero, capturando a exceção lançada
public static void main(String args[]) {
try {
double num = 87 / 0;
System.out.println("Resultado da divisão: " + num);
} catch (ArithmeticException arthException) {
arthException.printStackTrace();
//System.out.println(arthException.toString());
}
}
}
1
Resultado da execução:
java.lang.ArithmeticException: / by zero
at tratexcecoes.TrataExceptionZeroDivision.main(TrataExceptionZeroDivision.java:8)
Obs:
•
o tratamento da exceção via try / catch permite o tratamento da exceção capturada em catch,
apresentando uma mensagem de erro para o usuário, que pode ser modificada para uma
mensagem mais amigável:
JOptionPane.showMessageDialog(null, "Erro de divisão por zero!", "Erro",
JOptionPane.INFORMATION_MESSAGE);
Capturando mais de uma exceção em um try / catch
•
Mais de uma exceção podem ser tratadas em uma estrutura try / catch. Isso permite uma
flexibilidade na programação, gerando respostas diferenciadas para cada tipo de exceção em
questão.
Ex. 3: Uso das exceções ArithmeticException e java.util.InputMismatchException
Obs:
•
•
A exceção java.util.InputMismatchException é disparada quando, se usando a classe Scanner, é
fornecido um valor de entrada de tipo diferente do que o esperado;
observar as mensagens de resposta ao usuário, dentro dos catchs
import java.util.Scanner;
import java.util.InputMismatchException;
public class TrataDuasExceptions {
//demonstra o lançamento de uma exceção qdo ocorre uma divisão por zero
public static int quociente(int numerador, int denominador)
throws ArithmeticException {
return numerador / denominador;
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
try {
System.out.print("Entre o numerador: ");
int numerador = scan.nextInt();
System.out.print("Entre o denominador: ");
int denominador = scan.nextInt();
2
int result = quociente(numerador, denominador);
System.out.println("Resultado da divisão de " + numerador + " por " +
denominador + ": " + result);
} catch (InputMismatchException ime) {
System.err.println("Você deve usar somente números inteiros. Tente novamente!");
//ime.printStackTrace();
} catch (ArithmeticException ae) {
System.err.println("Você não deve efetuar uma divisão por zero. Tente novamente!");
//ae.printStackTrace();
}
}
}
Relançando a exceção para tratamento por outro método
•
Uma exceção não precisa ser necessariamente tratada no método em que a mesma surgiu. O
tratamento da exceção pode ser enviado para um outro método executar o seu tratamento –
relançamento de exceções. Para tanto, usa-se a expressão seguinte, na assinatura do método
onde a exceção ocorre:
throws <tipo_exceção>
Ex. 4:
public class TrataThrowsException {
//método que lança a exceção
public void lancaExcecao() throws ArithmeticException {
double num = 87 / 0;
System.out.println("Resultado da divisão: " + num);
}
public TrataThrowsException() {
try {
lancaExcecao();
} catch (ArithmeticException exc) {
System.out.println("Exceção tratada pelo catch do construtor!");
}
}
public static void main(String args[]) {
TrataThrowsException trata = new TrataThrowsException();
}
}
3
Download