Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal...
Transcript of Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal...
![Page 1: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/1.jpg)
Universidade Federal do AmazonasDepartamento de Ciência da ComputaçãoIEC481 – Projeto de Programas
Tratamento de Exceçõesem Java
Professor: César Melo
Slides baseados em materiais preparados pela Profa. Rosiane Freitas e Prof. Horácio.
![Page 2: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/2.jpg)
Tratamento de Exceções
Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa;
JAVA permite o tratamento de exceções;
Semelhante ao de C++, sendo feito através de 5 palavras-chave: try, catch, throw, throws e finally;
Toda exceção deve ser derivada da classe THROWABLE;
![Page 3: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/3.jpg)
Exceções
cortar(cebola); panela.adicionar(cebola); cortar(tomate); panela.adicionar(tomate); panela.adicionar(Oleo.medida(colher));
comer();
![Page 4: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/4.jpg)
Exceções
tente{ cortar(cebola); panela.adicionar(cebola); cortar(tomate); panela.adicionar(tomate); panela.adicionar(Oleo.medida(colher));}imprevisto(CortarDedo e){dedo.aplicar(curativo);
}comer();
![Page 5: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/5.jpg)
Exceções
Condições que forçam a parada de um programa ou a realização de ações especiais.
Por exemplo: divisão por zero.
Fornecem uma forma de notificar erros (ou condições especiais) e de corrigí-los durante a execução de um programa.
![Page 6: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/6.jpg)
Exemplo
class Exemplo{ public static void main(String[] a) { int[] vet = new int[3]; for(int c=0; c<4; c++) vet[c] = 0; System.out.println(“Fim do programa.”); }}
![Page 7: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/7.jpg)
Exemplo
class Exemplo{ public static void main(String[] a) { int[] vet = new int[3]; try { for(int c=0; c<4; c++) vet[c] = 0; } catch(Exception e) { System.out.println(“Houve um erro!”); } System.out.println(“Fim do programa.”); }}
![Page 8: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/8.jpg)
Exceções
Benefícios de ter erros sinalizados por exceções:
separação entre o código que trata os erros e o código que é executado normalmente pelo programa.
uma forma de forçar uma resposta ao erro. deve existir um código no programa para tratar o erro. não será possível compilar o programa caso tal tratamento não
seja fornecido.
![Page 9: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/9.jpg)
Tipos de Exceções
Existem quatro categorias mais usuais:
1. Erros de código ou tipo de dados coerção inválida, índice fora do limite do vetor, divisão por
zero.
2. Erros indicados pelos métodos já existentes
ao usar o método substring() da classe String, ela pode gerar uma exceção do tipo StringIndexOutOfBoundsException
![Page 10: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/10.jpg)
Tipos de Exceções
Existem quatro categorias mais usuais:
3. Definição de novos tipos de exceções veremos mais adiante como criar novos tipos de
exceções de acordo com as necessidades do programa.
4. Erros de Java erros causados pela Máquina Virtual Java que está
executando o programa do usuário. em geral são causados por erros do próprio programa ou do
ambiente em que a JVM é executada e não da própria JVM.
![Page 11: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/11.jpg)
try ... catch( ) ... finally ...
try blococatch(instância de uma subclasse de Exception) blocofinally bloco
A palavra try marca o início do tratamento de exceções.
try deve ser seguido de um ou mais catch e/ou exatamente um finally.
O bloco finally é executado sempre, ocorrendo ou não uma exceção.
![Page 12: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/12.jpg)
try ... catch( ) ... finally ...
try{ // Código que pode gerar uma exceção}
catch(MinhaExcecao1 e){ // Código para processar a exceção }
catch(MinhaExcecao2 e){ // Código para processar a exceção }
finally{ // Código que sempre será executado }
![Page 13: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/13.jpg)
Execução Normal
try{ // Código que pode gerar uma exceção}
catch(MinhaExcecao1 e){ // Código para processar a exceção }
catch(MinhaExcecao2 e){ // Código para processar a exceção }
finally{ // Código que sempre será executado }
A execução começano início do bloco
O bloco finallyfinally é executado após a execução normal do bloco trytry.
Havendo um returnreturn, o bloco finallyfinally sempre será executado antes da
saída do método.
Se não houver returnreturn no bloco trytry nem no bloco finallyfinally, a execução continua com
o código após o bloco finallyfinally
![Page 14: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/14.jpg)
Execução com Exceção
try{ // Código que pode gerar uma exceção}
catch(MinhaExcecao1 e){ // Código para processar a exceção }
catch(MinhaExcecao2 e){ // Código para processar a exceção }
finally{ // Código que sempre será executado }
A execução começano início do bloco
A execução é interrompida no pontoonde foi gerado a exceção.
O controle passa para o bloco catchcatch que capturá-la.
O bloco finallyfinally será executado logoapós o bloco catchcatch.
A execução continua com o código após o bloco finallyfinally caso
não exista returnreturn.
![Page 15: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/15.jpg)
Exemplo
class Exemplo{ public static void main(String[] a) { int[] vet = new int[3]; try { for(int c=0; c<4; c++) vet[c] = 0; } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“Erro no vetor!”); } catch(Exception e) { System.out.println(“Houve um erro!”); } System.out.println(“Fim do programa.”); }}
![Page 16: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/16.jpg)
Exemplo
class Exemplo{ public static void main(String[] a) { int[] vet = new int[3]; try { for(int c=0; c<4; c++) vet[c] = 0; } finally {System.out.println(“Entrada garantida”);} System.out.println(“Fim do programa.”); }}
![Page 17: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/17.jpg)
Gerando uma Exceção
Métodos podem gerar exceções para indicar condições de erro
public void meuMetodo() throws IOException{ ... }
public void meuMetodo() throws IOException, OutraExcecao{ ... }
![Page 18: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/18.jpg)
Gerando uma Exceção
Os métodos que os utilizam devem tratar as possíveis exceções
public void outroMetodo(){ try
{ meuMetodo(); } catch(IOException e)
{ // O tratamento é feito aqui }}
![Page 19: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/19.jpg)
Exemplo
public double divisao(double n, double d) throws Exception{ if (d == 0.0){ throw new Exception(”denominador não ”+
“pode ser zero"); return 0.0; // nunca é executado! } else return (n / d);}
![Page 20: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/20.jpg)
Exemplo
public void teste(){double r =0.0; try { r = divisao(3,0); } catch(Exception e) { System.out.println(e.getMessage()); } System.out.println(“A divisão é ”+r);} A exceção tem de ser tratada ou então
passada adiante!
![Page 21: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/21.jpg)
Exemplo
public void teste() throws Exception{ double r = 0.0; r = divisao(3,0);
System.out.println(“A divisão é ”+r);} Uma exceção pode ser passada adiante até
gerar um erro de execução.
![Page 22: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/22.jpg)
Reenviando Exceções
try { // comandos;}catch(Exception e){ // faz alguma coisa antes de sair; throw e;}finally{ // Também é executado}// Nunca passará por aqui se houver erro
![Page 23: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/23.jpg)
Criando Novas Exceções
Uma exceção é um objeto
![Page 24: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/24.jpg)
Exceções São Objetos
Exceções que podem ser capturadas
Exceções que podem não ser capturadas
![Page 25: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/25.jpg)
Error Exceptions
Representam condições de erros as quais não se espera que o programa possa recuperá-las. não se espera que o programa venha a tratá-las.
Exemplos: falta de memória. bytecode não encontrado dinamicamente.
![Page 26: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/26.jpg)
Criando Uma Nova Exceção
public class NovaExcecao extends Exception{ public NovaExcecao() { super(“Houve um novo erro!”); } public NovaExcecao(String msg) { super(msg); }}
![Page 27: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/27.jpg)
ROBUSTEZROBUSTEZ
Porque Usar Exceções?
Tratar exceções ajuda a escrever o processamento de erros em um único lugar.
Os erros descritos por um método não podem ser ignorados.
Exceções são objetos: podem combinar dados e métodos
ROBUSTEZROBUSTEZ
![Page 28: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/28.jpg)
Tratamento de Exceções em Java
Dúvidas?
![Page 29: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/29.jpg)
Divisão por Zero
Uma divisão inteira por zero gera uma exceção.
Uma divisão real por zero não gera uma exceção. Aritmética de ponto-flutuante segue o padrão
IEEE 754. Valores de retorno:
POSITIVE_INFINITY, NEGATIVE_INFINITY, ...
![Page 30: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/30.jpg)
Exceções Internas
É possível escrever instruções aritméticas sem se preocupar explicitamente com a checagem de erros.
int div(int a, int b){ return (a / b); }
![Page 31: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/31.jpg)
Exceções Internas
int div(int a, int b){ return (a / b); }
void teste(){ int a=1, b=0, c=3; System.out.prinln(a+“/”+b+“=”+div(a,b)); System.out.prinln(b+“/”+c+“=”+div(b,c));
}
![Page 32: Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal ocorrida durante a execução ou compilação de um programa; JAVA permite o tratamento](https://reader034.fdocument.pub/reader034/viewer/2022050209/5f5c0c3fc2abbd301c290eaa/html5/thumbnails/32.jpg)
Exceções Internas
int div(int a, int b){ return (a / b); }
void teste(){ int a=1, b=0, c=3; try { System.out.prinln(a+“/”+b+“=”+div(a,b)); System.out.prinln(b+“/”+c+“=”+div(b,c)); }catch(Exception e) { System.out.println(e); }}