Capítulo 15 – Tratamento de Exceções
Outline
15.1
15.2
15.3
15.4
15.5
15.6
15.7
15.8
15.9
15.10
Introdução
Uma visão geral do tratamento de Exceções
Um exemplo do tratamento de exceções: divisão por zero
A hierarquia das exceções em Java
Disparando novamente uma exceção
A cláusula finally
Propagação de exceções
printStackTrace, getStackTrace e getMessage
Exceções encadeadas
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
Method quotient throws
ArithmeticException
Outline
O bloco try
Lê os operandos da
entrada padrão
Tenta a divisão
usando o método
quociente
Catch
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
RuntimeException
IOException
Error
AWTError
ThreadDeath
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
Chama metodo1
Imprime as informações
geradas pelas chamadas a
getMessage e
printStackTrace
Imprime cada um dos
StackTraceElements
Chama metodo2
metodo1 declara
uma cláusula throw
Outline
metodo2 declara
uma cláusula throw
chama metodo3
metodo3 declara
uma cláusula throw
Levanta uma
Exception que
propaga em direção a
main
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
metodo2 declara
uma cláusula throw
Chama metodo3
Uma exceção existente é
encadeada com uma nova
exceção
Lança uma nova
Exception
Outline
15.10 Declarando novas exceções
• Basta herdar de uma exceção existente
Download

Outline