Upload
marta-alves-padilha
View
222
Download
1
Embed Size (px)
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