Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Aula 13 – Tratamento de
Exceções
Disciplina: Programação Estruturada e Orientada a Objetos
Prof. Bruno Gomes
http://www.profbrunogomes.com.br/
Agenda da Aula
Exceções;
Por que tartar Exceções?
Durante a execução de programas, podem ocorrer muitostipos de erros de vários graus de severidade;
Exemplos:• Problemas no hardware• Arrays fora de faixa• Valores de variáveis• Divisão por zero• Parâmetros de métodos• Falha de Memória
• Erro de entrada e saída (IO)• Erros da aplicação• Saldo insuficiente• Usuário não existe• Nota invalida
Dependendo do tipo de erro, o programaé finalizado, os dados são perdidos e ocomputador corre o risco de travar.
Quando um erro acontece
O que deveria ser feito:
Notificar o usuário sobre o erro;
Conseguir salvar todo o trabalho;
Permitir que usuários saiam elegantemente doprograma, e depois retornem.
Exceções
Exceção é um desvio no fluxo de execução normal doprograma: Acontece quando encontra algo inesperado.
Indica que houve problema na execução de um blocodo programa;
O tratamento de exceções permite encontrar erros etratá-los. Se não for tratado, o programa pode parar;
O uso correto de exceções torna o programa maisrobusto e confiável.
O que acontece quando um erro ocorre em um programa Java
Um objeto é criado;
O objeto contém informações sobre o erro, assimcomo o tipo e o estado do programa;
A ação de capturar esse objeto chamamos dethrowing an exception;
O ambiente de execução (runtime system) tentaencontrar algum tratamento a exceção;
A busca segue a call stack – lista de chamadasde métodos.
IMPORTANTE
Hierarquia de Exceções em Java
Em Java, um objeto de exceção é sempre umainstância de uma classe derivada Throwable.
Hierarquia de Exceções em Java
Error: Ocorrem devido a problemas de SO ou hardware;
Hierarquia Exception:
Divide em dois ramos: As que derivam deRuntimeException e as que não derivam;
Ao se fazer um programa Java, deve focalizar nestahierarquia.
Hierarquia de Exceções em Java
RuntimeException: Acontece porque se fez um erro de programação;
Exemplos: Acesso de array proibido; divisão por 0;
Qualquer outra Exceção: Ocorre porque algo ruim, como um erro de E/S,
aconteceu com o programa bom em outros aspectos;
Exemplos: Tentar ler além do fim de um arquivo; tentar abrir um URL
malformado.
Tipos de Exceções
Exceção Verificada (checked):
Exceções previsíveis (sabe que o erro poderá ocorrere já sabe como corrigi-lo).
Obrigatoriamente devem ser tratadas;
São utilizadas para erros recuperáveis;
Ex.: tentar sacar dinheiro sem saldo.
Tipos de Exceções
Exceção Não Verificada (unchecked): Não precisam ser tratadas, mas podem ser;
São utilizadas para erros irrecuperáveis, inesperado nasua aplicação;
Se uma exceção não verificada ocorrer e não fortratada, o programa pode parar (console).
Solução: mostrar uma mensagem para o usuáriocomunicando que o erro ocorreu.
Subclasse de RuntimeException;
Ex.: banco de dados, falhas de rede, arquivosausentes
Formas de Capturar um Exceção (objeto criado)
Através de uma bloco try;
Ou através de uma cláusula throws naassinatura do método.
Bloco try-catch-finally
Um bloco que tenta (try) chamar um método ouoperação que pode disparar uma exceção;
Uma exceção é um objeto que deve sercapturado (catch):
É nesse bloco que a exceção deve ser tratada.
Um trecho de código pode ser executado sempre(finally).
Bloco try-catch-finally
Representação:try {
// Executa código// que pode disparar exceção
} catch (Exception exception){// Trata exceção// exception é uma referência// para objeto da// classe Exception
} finally {// Este bloco é sempre// executado, independente de// ocorrer exceção
}
Tenta executar
Captura
Sempre Executa
Exemplo
Problema: a variável numero pode conter algumcaractere que não seja número.
parseInt dispara a exceção:
NumberFormatException (não verificada)
System.out.print("Digite um número");
String numero = sc.nextLine();
int x = Integer.parseInt(numero);
Tratando
Se a exceção for disparada, o restante dos comandos dobloco try não serão mais executados;
O fluxo de execução muda para a captura (bloco catch);
System.out.print("Digite um número");
String numero = sc.nextLine();
int x;
try{
x = Integer.parseInt(numero);
System.out.println("Numero digitado é válido");
} catch (NumberFormatException exception){
System.out.println("Digite um número válido");
}
Bloco Catch
Pode haver mais de um bloco catch
Cada bloco trata um tipo específico de exceção;
O bloco try contém métodos que podem disparar todas asexceções;
Um método pode disparar mais de uma exceção.
try {// bloco de comandos
} catch (Excecao1 ex1) {// Trata exceção1
} catch (Excecao2 ex2) {// Trata exceção2
} catch (Excecao3 ex3){// Trata exceção3
}
Dúvidas?
Exercício
Utilizando o exercício da atividade anterior, tratara exceção no método da divisão da calculadora,e evitar que o programa seja finalizado caso ousuário tente dividir um número por zero.
Deve imprimir a mensagem: “Não é possível dividir um número por zero. Tente
novamente.”.
Pesquisar e utilizar: Qual exceção é disparadaquando um número é dividido por zero.
Exercício
Criar uma classe de teste/executável (main), enela declarar um array de inteiros com 5posições.
Tentar armazenar qualquer valor na posição 6. Tratar a exceção com o bloco try catch.
Pesquisar e utilizar: Qual exceção é disparadaquando tenta acessar uma posição de um arrayque não existe.