Sunteți pe pagina 1din 21

Recurso

Fac. Cincias Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Hoje
!

Excepes.

Algoritmos recursivos, pilha de execuo e registos de


activao.

Busca binria num array.

Algumas operaes sobre listas.

! As torres de Hanoi.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Hieraquia das Excepes

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Mtodos de Throwable
!

java.lang.Throwable contm:
! String getMessage() Devolve a mensagem de

detalhe
! void printStackTrace() Imprime o trao do
Stack em System.err
! String toString() Devolve o nome da excepo
seguido da mensagem de detalhe.!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Checked Exceptions
!

Normalmente no causada por erros dos programador,


est para alm do seu controle
Todas as excepes causadas por erros de Input/Output
so consideradas Checked
!
Por exemplo, se o programador tenta aceder a um
ficheiro que no existe, por causa de um erro do
utilizador ou do sistema, lanada uma
FileNotFoundException
! A Classe IOExceptions e todas as suas sub-classes so
Checked
!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Algumas Exceptions de I/O


!

Todas as Checked Exceptions so subclasses de


Exception, mas no de RunTimeException
!
!
!

IOException = algum tipo de erro de input/output


EOFException = tentativa de ler alm do fim dos dados
de um ficheiro
FineNotFoundException = um ficheiro que no existe

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Unchecked Exceptions
! Unchecked: representam condies de erro que podem

ocorrer como resultado de um erro de programao ou


condies externas irrecuperveis.
! Ex: NullPointerException
! Ex: ArrayIndexOutOfBounds
! (normalmente erros de programao)
! So subclasses de RuntimeException

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Mais Unchecked Exceptions


! A classe Error representa erros devidos a condies

externas graves
! Ex: OutOfMemoryError

fortemente desencorajado tentar lidar com estas


excepes
! No exemplo de OutOfMemoryError: no haver
memria para processar o cdigo que trata a excepo,
logo ser lanada outra vez
!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Checked e Unchecked
! So UNCHECKED:
! Subclasses de TuntimeException
! Subclasses de Error

! So CHECKED:
!

Todas as outras

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Apanhar e lidar as excepes


!

Comportamento por defeito:


!

Quando uma excepo lanada e no apanhada o


programa pra e o JVM mostra o Stack Trace: a
sequncia de chamada aos mtodos at ao main.

! Para evitar este comportamento:


! try-catch-finally

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Try-Catch-Finally
! try {

// comandos que envolvem ficheiros


}
catch (IOException ex) {
ex.printStrackTrace(); //imprime no err
System.exit(1);
}!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Execuo do try-catch
! Se todos os comandos do bloco TRY executarem sem

erros, o bloco CATCH no executa


! Se acontecer uma IOException o programa sai do

bloco TRY e executa os comandos do bloco CATCH


!

Pode haver um CATCH para cada excepo a apanhar

! [O bloco FINALLY executado na mesma, no fim]


! Mas o programa anterior s replica o comportamento

por defeito
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Recuperao de erros
!

Suponhamos que usamos o


JOptionPane.showInputDialog para receber o input

Convertemos a String lida para inteiro com o parseInt,


que pode lanar uma NumberFormatException

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Processar a string lida

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Alternativa
!

Vejam como a exception apanhada mais acima:

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Quando no h recuperao
possvel
! catch (IOException ex) {

ex.printStrackTrace();
System.exit(1);
}!
!

H uma indicao de erro para o S.O.

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Lanar excepes
!

J vimos que podemos ignorar uma excepo e permitir


que seja tratada num mtodo de nvel acima:
! O mtodo de baixo-nvel usa a clusula throws no

!
!

cabealho para declarar que pode ser lanada uma


excepo
Ou
Quando a excepo detectada usamos o comando
throw para lanar a excepo no mtodo de bx nvel

! Se um mtodo no tem o throws e contm

comandos que podem gerar excepes, o programa no


compila
Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

O comando throw!
!

Quando se detecta um erro faz-se


!

throw new Exception(string q descreve o erro);!

! O programa pra e comea a procurar a forma de lidar com a

excepo;
! Se for unckecked ser apanhada num nvel acima
! Se for checked, ela tem que ser delcarada na clusula throws!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

exemplo

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

Regras de estilo
! Se uma excepo recupervel, o melhor lidar com

ela no mtodo corrente


! Se uma excepo Checked pode ser apanhada mais

acima, declara-se na clusula throws e usa-se


@throws no comentrio javadoc
! Se uma excepo Unchecked pode ser apanhada nm

mtodo mais acima, usa-se o @throws nos


comentrios, mas no preciso usar a clusula
throws!

Luis Antunes Algoritmos e Estruturas de Dados

Fac. Cincias
Univ. Lisboa

S-ar putea să vă placă și