21
 Recursão F ac. Ciências Univ . Lisboa Luis Antunes Algoritmos e Estruturas de Dados

aed6.1-excepcoes

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