Upload
cesar-sd
View
214
Download
0
Embed Size (px)
DESCRIPTION
Algoritmos e estruturas de dadosprof. Luis Antunes FCUL
Citation preview
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.
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Hieraquia das Excepes
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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.!
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Checked e Unchecked
! So UNCHECKED: ! Subclasses de TuntimeException ! Subclasses de Error
! So CHECKED: ! Todas as outras
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Try-Catch-Finally
! try { // comandos que envolvem ficheiros } catch (IOException ex) { ex.printStrackTrace(); //imprime no err System.exit(1); }!
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Processar a string lida
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Alternativa
! Vejam como a exception apanhada mais acima:
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
Quando no h recuperao possvel
! catch (IOException ex) { ex.printStrackTrace(); System.exit(1); }!
! H uma indicao de erro para o S.O.
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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!
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
exemplo
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados
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!
Fac. Cincias Univ. Lisboa
Luis Antunes Algoritmos e Estruturas de Dados