Programação com Objectos Processamento de Dados I

Propaganda
Programação com Objectos
Processamento de Dados I
5. Excepções
1
5. Excepções
|
O que é uma excepção?
|
Tratamento de excepções: Try e Catch
|
Lançamento de excepções: Throw e Throws
|
Classes de excepção
Programação com Objectos / Processamento de Dados I
2
5. Excepções
|
O que é uma excepção?
z Uma
excepção (exception) é um sinal gerado pela máquina
virtual de Java (JVM), portanto, em tempo de execução do
programa, e que é comunicado ao programa indicando a
ocorrência de um erro recuperável.
z Um erro (error) em Java corresponde a uma situação para a qual
nenhuma recuperação é já possível (excepto o erro ThreadDeath),
limitando o interpretador de Java a enviar uma mensagem de erro
e a terminar o programa.
z Excepções
mais comuns:
• Tentativa de divisão por zero (Division by zero);
• Indexação para além dos limites de um array (Index out of bounds)
Programação com Objectos / Processamento de Dados I
3
5. Excepções
|
O que é uma excepção?
z As
excepções podem ser tratadas de formas diversas:
• Termina o programa com mensagem de aviso e impressão do
estado (inaceitável para sistemas críticos).
• Geridas em locais específicos, designados por manipuladores
(handlers).
z A linguagem Java coloca ao dispor do programador mecanismos
que permitem:
• Definir quais as excepções que devem ser detectadas num
dado contexto do programa;
• Definir quais as acções que se pretendem ver executadas em
tais situações;
• Definir as excepções a serem lançadas pelo próprio código do
programa em certas condições.
Programação com Objectos / Processamento de Dados I
4
5. Excepções
Tratamento de excepções
|
No Java, uma excepção é um objecto da classe Exception, derivada
de Throwable.
|
A gestão de excepções é feita nos seguintes passos:
1.Delimitar código onde podem ser geradas excepções (numa cláusula try).
2.Se for detectada situação anómala, lançar uma excepção (numa cláusula
throw).
3.Inserir manipulador para as excepções lançadas (numa cláusula catch).
Programação com Objectos / Processamento de Dados I
5
5. Excepções
Tratamento de excepções
|
Formato típico dos métodos de tratamento:
Programação com Objectos / Processamento de Dados I
6
5. Excepções
Tratamento de excepções
|
Uma cláusula try tem de ter pelo menos uma cláusula catch, ou
finally.
|
Podem estar associadas a uma cláusula try qualquer número de
cláusulas catch, incluindo zero, desde que cada cláusula apanhe
diferentes tipos de excepções.
|
O corpo do try é executado até que, ou uma excepção é lançada, ou
o corpo do termina com sucesso.
|
Se uma excepção é lançada, cada cláusula catch é examinada, da
primeira para a última, até que se encontre uma cujo tipo da
excepção tratada seja compatível com a excepção lançada.
Programação com Objectos / Processamento de Dados I
7
5. Excepções
Tratamento de excepções
|
Se a cláusula catch é encontrada, é executado o seu corpo. Mais
nenhuma cláusula é executada.
|
Se nenhuma cláusula catch é encontrada, a excepção passa para
fora da cláusula try, até que uma próxima cláusula try possivelmente
trate a excepção lançada.
|
Não é possível definir numa cláusula catch para apanhar excepções
duma superclasse, antes duma cláusula duma subclasse.
z
z
A primeira cláusula catch apanharia sempre a excepção, e a segunda
cláusula catch nunca seria atingida.
O compilador dá erro em tal situação.
Programação com Objectos / Processamento de Dados I
8
5. Excepções
Tratamento de excepções
|
Se o try tem uma cláusula finally, o seu código é executado após todo
o processamento no try estar completo (independentemente de o ter
feito normalmente, através do lançamento de uma excepção, ou com
instruções return ou break).
|
Apenas uma excepção é tratada numa cláusula try. Se uma cláusula
catch ou finally lançarem outra excepção, as cláusulas catch da
cláusula try não são reexaminadas.
z
z
As cláusulas catch e finally encontram-se fora da protecção da
correspondente cláusula try.
Tais excepções poderão, contudo, vir a ser tratadas noutra cláusula try.
Programação com Objectos / Processamento de Dados I
9
5. Excepções
Tratamento de excepções
|
Tipicamente, no tratamento são executadas as seguintes acções:
z
z
z
|
Registar mensagem de erro.
Recuperar o estado do objecto.
Invocar novamente o método de onde foi gerada a excepção.
Se o programa gerar uma excepção, e no código não se indicar o
bloco catch para tratamento da excepção, o JVM:
z
z
Aborta execução do programa.
Imprime no System.err a excepção gerada e a pilha de execução.
Programação com Objectos / Processamento de Dados I
10
5. Excepções
Classes de excepções
Programação com Objectos / Processamento de Dados I
11
5. Excepções
Classes de excepções – Classe Throwable
|
Super classe de todos os erros e excepções.
|
Apenas objectos desta classe, ou subclasses, podem ser lançados na
instrução throw e usados como argumentos da clásula catch.
Constructores
Programação com Objectos / Processamento de Dados I
12
5. Excepções
Classes de excepções – Classe Throwable
Alguns métodos:
Programação com Objectos / Processamento de Dados I
13
5. Excepções
Classes de excepções – Classe Error
|
Usada para lançar excepções por falha do JVM.
|
Normalmente não são tratadas pelo programador.
Classes de excepções – Classe Exception
| O J2SE dispõe de 55 subclasses:
z
z
z
|
ClassNotFoundException
IOException (contém21 subclasses)
(….)
Excepções do programador são subclasses de Exception.
Programação com Objectos / Processamento de Dados I
14
5. Excepções
Classes de excepções – Classe Exception
| Construtores
Programação com Objectos / Processamento de Dados I
15
5. Excepções
Transferência de excepções
| Frequentemente é de interesse a excepção ser tratada pelo objecto
que invoca o método (normalmente a recuperação depende do
objecto que o invoca).
|
O método, onde a excepção pode ser gerada, deve indicar no
cabeçalho qual o tipo de excepção que pode ser gerada. Para tal
utiliza-se:
Programação com Objectos / Processamento de Dados I
16
5. Excepções
Transferência de excepções
| Frequentemente é de interesse a excepção ser tratada pelo objecto
que invoca o método (normalmente a recuperação depende do
objecto que o invoca).
|
O método, onde a excepção pode ser gerada, deve indicar no
cabeçalho qual o tipo de excepção que pode ser gerada. Para tal
utiliza-se:
|
Por exemplo:
Programação com Objectos / Processamento de Dados I
17
Download