Tratamento de Exceções em Java · Tratamento de Exceções Exceção é uma condição anormal...

32
Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 – Projeto de Programas Tratamento de Exceções em Java Professor: César Melo Slides baseados em materiais preparados pela Profa. Rosiane Freitas e Prof. Horácio.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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); }}