Capítulo 15 – Tratamento de Exceções Outline 15.1 Introdução 15.2 Uma visão geral do...

Preview:

Citation preview

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

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

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

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

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

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

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

Outline

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)

Fig. 15.2 A hierarquia de classes para a classe Throwable

Throwable

Exception Error

AWTError ThreadDeathIOExceptionRuntimeException OutOfMemoryError

15.5 Disparando novamente uma exceção

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

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

Outline

Torna a lançar Exception

O bloco finally executa mesmo que alguma Exception

tenha sido lançada

Outline

O bloco finally é sempre executado

Outline

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

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

Outline

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.

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

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

Outline

15.9 Exceções encadeadas

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

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

Outline

Uma exceção existente é encadeada com uma nova

exceção

metodo2 declara uma cláusula throw

Chama metodo3

Lança uma nova Exception

Outline

15.10 Declarando novas exceções

• Basta herdar de uma exceção existente

Recommended