28
Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções: divisão por zero 15.4 A hierarquia das exceções em Java 15.5 Disparando novamente uma exceção 15.6 A cláusula finally 15.7 Propagação de exceções 15.8 printStackTrace, getStackTrace e getMessage 15.9 Exceções encadeadas 15.10 Declarando novos tipos de exceções

Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Embed Size (px)

Citation preview

Page 1: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Capítulo 15 – Tratamento de Exceções Outline15.1 Introdução15.2 Uma visão geral do tratamento de Exceções15.3 Um exemplo do tratamento de exceções: divisão por zero15.4 A hierarquia das exceções em Java15.5 Disparando novamente uma exceção15.6 A cláusula finally15.7 Propagação de exceções 15.8 printStackTrace, getStackTrace e getMessage15.9 Exceções encadeadas15.10 Declarando novos tipos de exceções

Page 2: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.1 Introdução

• Tratamento de exceções– Exceção

• Indicação de um problema durante a execução– Exemplo: divisão por zero

– Exceções encadeadas

Page 3: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.2 Uma visão geral do tratamento de Exceções

• Usos do tratamento de exceções– Processar exceções dos componentes do programa– Tratar as exceções de uma maneira uniforme em projetos

grandes– Remover o tratamento de exceções do “fluxo principal” de

execução

• Um método detecta um erro em lança uma exceção– O código para o tratamento de exceções processa o erro– Exceções não capturadas podem fornecer resultados

adversos• Podem terminar a execução do programa

Page 4: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.2 Uma visão geral do tratamento de Exceções

• Código que pode gerar erros deve ser posto em blocos try– O código para o tratamento de erros deve ser posto em

cláusulas catch– A cláusula finally sempre é executada

• Modelo de terminação no tratamento de exceções– O bloco no qual o tratamento da exceção expira

• A cláusula throws especifica as exceções que um método pode lançar

Page 5: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.3 Um exemplo do tratamento de exceções: divisão por zero

• Um erro comum de programação• Arremesa (throws) uma ArithmeticException

Page 6: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

O bloco try

Lê os operandos da entrada padrão

Tenta a divisão usando o método quociente

Catch ArithmeticException

Method quotient throws ArithmeticException

Page 7: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Page 8: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.4 A hierarquia das exceções em Java

• Superclasse Throwable– Subclasse Exception

• Situações de erro verificadas em tempo de compilação• Devem ser capturadas pelo programa

– Subclasse Error• Tipicamente não capturados pelo programa

• Exceções verificadas (Checked exceptions)– É necessário envolvê-las em um bloco try..catch ou usar a

cláusula throws na declaração do método

• Exceções não verificadas (Unchecked exceptions)

Page 9: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Fig. 15.2 A hierarquia de classes para a classe Throwable

Throwable

Exception Error

AWTError ThreadDeathIOExceptionRuntimeException OutOfMemoryError

Page 10: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.5 Disparando novamente uma exceção

• Torne a lançar a exceção se o bloco catch não pode tratá-la inteiramente

Page 11: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.6 A cláusula finally

• Perda de recursos– Ocorre quando os recursos alocados (memória, conexões

com o banco de dados, etc.) não são liberados por um programa

• O bloco finally– Vem depois dos blocos catch– É sempre executado– Frequentemente usado para liberar recursos

Page 12: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Torna a lançar Exception

O bloco finally executa mesmo que alguma Exception

tenha sido lançada

Page 13: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

O bloco finally é sempre executado

Page 14: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Page 15: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.7 Propagação de exceções

• Exceções não capturadas no escopo do método onde elas são lançadas– O método termina– A exceção propaga para o método que chamou o método

onde ocorreu a exceção– Outra tentativa de capturar a exceção

Page 16: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Chama o método lancaExcecoes

Captura as exceções lançadas pelo do método lancaExcecoes

O método declara uma cláusula throws

Lança uma Exception

Page 17: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Page 18: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.8 Os métodos printStackTrace, getStackTrace e getMessage

• A classe Throwable– Método printStackTrace

• Imprime a pilha de chamadas de métodos– Método getStackTrace

• Provê acesso programático à pilha impressa por printStackTrace().

• Retorna um array contendo os elementos da pilha de chamadas de métodos.

Page 19: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Imprime as informações geradas pelas chamadas a

getMessage e printStackTrace

Chama metodo1

Imprime cada um dos StackTraceElements

metodo1 declara uma cláusula throwChama metodo2

Page 20: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Levanta uma Exception que

propaga em direção a main

metodo2 declara uma cláusula throw

chama metodo3

metodo3 declara uma cláusula throw

Page 21: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Page 22: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.9 Exceções encadeadas

• Encapsula a exceção existente em uma nova exceção– permite manter o histórico dos eventos na pilha

Page 23: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Chama metodo1

Captura Exception e imprime o conteúdo

da pilha

metodo1 declara uma cláusula throw

Chama metodo2

Uma Exception existente é encadeada com

uma nova exceção

Page 24: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Uma exceção existente é encadeada com uma nova

exceção

metodo2 declara uma cláusula throw

Chama metodo3

Lança uma nova Exception

Page 25: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

Outline

Page 26: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:

15.10 Declarando novas exceções

• Basta herdar de uma exceção existente

Page 27: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções:
Page 28: Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do tratamento de Exceções 15.3 Um exemplo do tratamento de exceções: