Successfully reported this slideshow.

Tratamento de erros

451 views

Published on

  • Be the first to comment

  • Be the first to like this

Tratamento de erros

  1. 1. TRATAMENTO DE ERROS Linguagem de Programação II Ciência da Computação
  2. 2. Introdução • Exceção • Indicação de um problema que ocorre durante a execução de um programa • O problema ocorre raramente • A regra é que uma instrução deve executar de modo correto • A exceção à regra é quando isso não ocorre • O tratamento de exceções permite que um programa continue executando
  3. 3. Visão Geral • Tratamento de exceções • Permite remover o código de erro da linha principal de execução do programa • Cada programador pode escolher a exceção que quer tratar • Os programas tornam-se mais robustos quando os erros não são negligenciados
  4. 4. Exemplo 1 e 2 • Divisão por zero • Rastreamento de pilha • Linhas de informações que são exibidas em resposta a uma entrada inválida. Incluem o nome da exceção em uma mensagem descritiva que indica o problema que ocoorreu, e a pilha completa de chamada de método no momento em que a exceção ocorreu.
  5. 5. Exemplo 1 e 2 • Java não permite a divisão por zero entre números inteiros • Java permite a divisão por zero com valores de ponto flutuante • java.lang.ArithmeticException: / by zero • Indica que essa exceção ocorreu como resultado de uma tentativa de divisão por zero • Ponto de lançamento • Linha superior da cadeia de chamadas. Ponto incial onde a exceção ocorre
  6. 6. Exemplo 1 e 2 • InputMismatchException • Ocorre quando o método Scanner nextInt recebe uma String que não representa um número inteiro válido • Em alguns casos, o aplicativo java continua executando mesmo ocorrendo uma exceção. É preciso tratar isto também para que resultados inesperados não ocorram
  7. 7. Bloco TRY • Throw = lançar • Inclui o código que pode lançar uma exceção e o código que não deve ser executado se ocorrer uma exceção. • Se ocorrer uma exceção: • O código restante do bloco try será pulado e o controle vai pra o bloco catch
  8. 8. Bloco Catch • CATCH = captura • BLOCO CATCH • Contém o código que captura e trata a exceção, permitindo que o aplicativo java continue executando • Exceção não capturada • É uma exceção à qual não há nenhum bloco catch correspondente
  9. 9. Bloco Catch  Se ocorrer uma exceção em um bloco try:  O bloco catch captura a exceção  O bloco catch que será executado é o bloco catch cujo o tipo é correspondente ao tipo da exceção que ocorreu  Todo bloco CATCH exibe uma mensagem de erro e pede para o usuário tentar novamente
  10. 10. Modelo de terminação • Se ocorrer uma exceção em um bloco TRY: • Ele é terminado • O controle vai para o primeiro BLOCO CATCH seguinte que tem o tipo correspondente • O controle de programa não volta ao ponto de lançamento do bloco TRY • O controle de programa retoma depois do último bloco CATCH • Depois de uma exceção ser tratada: • O controle é retomado logo em seguida ao ponto de lançamento da exceção
  11. 11. Escopo • Quando um bloco try termina: • As variáveis locais declaradas no bloco saem de escopo e são destruídas • Quando um bloco catch termina: • As variáveis locais declaradas dentro do bloco catch, incluindo os parametros de exceção desse bloco, também saem de escopo e são destruídos
  12. 12. Clausula THROWS • Especifica as exceções que o método lança • Aparece depois da lista de parâmetros do método e antes do corpo do método • Contém uma lista das exceções separadas por vírgulas que o método lançará se ocorrer um problema • Essas exceções podem ser lançadas por instruções no corpo do método ou por métodos chamados no corpo • Um método pode lançar exceções das classes listadas em sua cláusula throws ou de suas subclasses
  13. 13. Quando usar? • O tratamento de exceções é projetado para processar erros síncronos, que ocorrem quando uma instrução é executada. • O tratamento de exceções não é projetado para processar problemas associados com os eventos assíncronos, que ocorrem paralelamente com o fluxo de controle do programa e independentemente dele.
  14. 14. http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html Hierarquia de Exceções
  15. 15. Hierarquia de Exceções Lançada quando um aplicativo tenta usar null em um caso em que é exigido um objeto.
  16. 16. Hierarquia de Exceções Lançada para indicar que um índice de algum tipo (como para uma matriz, para uma string, ou um vetor) está fora da faixa definida.
  17. 17. Hierarquia de Exceções • Todas as classes de exceção do JAVA herdam, direta ou indiretamente, da classe EXCEPTION. • THROWABLE • Subclasse de OBJECT e superclasse de EXCEPTION • EXCEPTION e ERROR • Representam situações excepcionais que podem ocorrer em um programa Java e podem ser capturadas pelo aplicativo
  18. 18. Exceções Verificadas • Obriga a quem chama o método ou o construtor a tratar essa exceção • O compilador checará se ela está sendo devidamente tratada • Exceções verificadas tem que ser tratadas ou lançadas!
  19. 19. Exceções Não Verificadas • São os problemas que provavelmente poderiam ser evitados pelo programador. • É por esse motivo que o JAVA não te obriga a usar o try/catch nessas exceptions. • O compilador não checa se você está tratando essas exceções.
  20. 20. ERROR • Representam situações anormais que poderiam acontecer na JVM • ERROR acontece raramente e não devem ser capturados por aplicativos • Todas as classes que herdam da classe ERROR são Exceções Não Verificadas
  21. 21. RuntimeException •A exceção RuntimeException e suas subclasses, são exceções lançadas pela JVM. • As exceções que são lançadas pela JVM são exceções não verificadas • Todos os tipos de exceção que são subclasses diretas ou indiretas da classe RuntimeException são exceções não verificadas
  22. 22. Exception • A exceção EXCEPTION e suas subclasses, são exceções programáticas • Todas as classes que herdam da classe EXCEPTION mas não da classe RuntimeException são exceções verificadas • Exceções Programáticas • São aquelas criadas por um aplicativo ou por um desenvolvedor de API.
  23. 23. Exceções Não Verificadas e Exceções Verificadas • As classes de exceção são definidas como classes verificadas quando são consideradas suficientemente importantes para a captura ou declaração em uma clausula throws • Fonte: http://www.caelum.com.br/apostila-javaorientacao-objetos/excecoes-e-controle-deerros/#11-4-outro-tipo-de-excecao-checkedexceptions
  24. 24. Capturas de Exceções • Se um catch for escrito para capturar objetos de exceção de um tipo de superclasse, ele também pode capturar todos os objetos de subclasses dessa classe. • É um erro de compilação capturar o mesmo tipo de exceção em dois ou mais blocos catch diferentes associados com um bloco try em particular.
  25. 25. Capturas de Exceções • Capturar a superclasse garante que os objetos de todas as subclasses serão capturadas • Um erro de compilação ocorrerá caso um bloco catch, para um tipo de exceção de superclasse, seja colocado ANTES de outros blocos catch que capturam tipos de exceção de subclasse. • Como consequencia, esses blocos não executarão, pois o bloco da superclasse já os está tratando.
  26. 26. Finally • Programas que obtem certos tipos de recursos devem retorna-los ao sistema explicitamente para evitar os vazamentos de recursos. • Exemplos: arquivos, conexões de banco de dados, conexões de rede, etc... • Bloco finally é opcional
  27. 27. Finally try { } catch(tipo de exceção 1) { } catch(tipo de exceção 2) { } finally { }
  28. 28. Finally • Um bloco finally NÃO EXECUTARÁ: • Se o aplicativo fechar antes de um bloco try chamando o método system.exit (método que encerra um aplicativo de forma imediata) • Um bloco finally EXECUTARÁ: • Se uma exceção for lançada no BLOCO TRY ou BLOCO CATCH correspondente
  29. 29. Finally • Se uma exceção ocorrer: • O programa pula o restante do bloco try • Se o programa capturar a exceção em um dos blocos catch: • O programa processa a exceção • O bloco finally libera o recurso em seguida • O controle do programa prossegue à primeira instrução depois do bloco finally
  30. 30. Finally • Se uma exceção não ocorrer: • Os blocos catch são pulados • O controle do programa prossegue para o bloco finally • O bloco finally libera o recurso • O controle do programa prossegue à primeira instrução depois do bloco finally
  31. 31. Finally • Se uma exceção não puder ser capturada: • O programa pula o restante do bloco try • O programa prossegue para o bloco finally (que executa) • O programa passa a exceção para o próximo bloco try externo • Um bloco catch associado pode capturar a exceção • O bloco finally executará de qualquer forma, mesmo que a exceção não for capturada
  32. 32. System.err • Fluxo: uma sequência de bytes • System.out: é o fluxo de saída padrão. É usado para exibir uma saída do programa. As saídas podem ser enviadas para o monitor de tela. • System.err: é o fluxo de erro padrão. É usado para exibir erros de um programa. As saídas podem ser enviadas para um arquivo de log.
  33. 33. Exemplo 3
  34. 34. Desempilhamento de pilha • Quando uma exceção é lançada mas não é capturada em um escopo em particular • A pilha de chamada de método é desempilhada • Uma tentativa de capturar a exceção no próximo bloco try externo é feita.
  35. 35. Desempilhamento de pilha • Desempilhar a pilha de chamada de método significa: • O método em que a exceção não foi captura é encerrado • Todas as variáveis nele presentes saem de escopo • O controle retorna à instrução que invocou esse método.
  36. 36. Desempilhamento de pilha • Se um bloco try incluir essa instrução: • Uma tentativa de capturar a exceção com catch é feita • Se um bloco try não incluir essa instrução: • O desempilhamento ocorre novamente • Se nenhum bloco catch capturar alguma vez essa exceção e a exceção for verificada: • Compilar o programa resultará em um erro
  37. 37. Exemplo 4
  38. 38. Métodos da classe Throwable • printStackTrace • Envia para o fluxo de erro padrão o rastreamento da pilha • Util para o processo de teste e depuração • getStackTrace • Recupera informações sobre o rastreamento de pilha que podem ser impressas por printStackStrace • getMessage • Retorna a string descritiva armazenada em uma exceção
  39. 39. Exemplo 5
  40. 40. Exceções Encadeadas • Permitem que um objeto de exceção mantenha informações do rastreamento de pilha completo • As vezes um bloco catch captura um tipo de exceção e depois lança uma nova exceção de um tipo diferente para indicar que ocorreu uma exceção específica no programa • Exceções encadeadas empacotam as informações da exceção original com as informações da nova exceção
  41. 41. Exemplo 6
  42. 42. Precondições e PósCondições • São os estados esperados antes e depois da exceução de um métodos • Facilitam as tarefas e aprimoram todo o projeto • Diminuem os gastos com manutenção e depuração do código
  43. 43. Pré Condição de um Método • É uma condição que deve ser verdadeira quando o método é invocado • Descrevem parâmetros de método • Descrevem quaisquer outras expectativas que o método tenha sobre o estado atual de um programa • Se um usuário não conseguir atender às précondições, então o comportamento de um método é indefinido • Nunca você deve supor ou esperar que o comportamento seja consistente se as précondições não forem satisfeitas
  44. 44. Pós Condição de um Método • É uma condição que deve ser verdadeira depois de o método retornar com sucesso • Descrevem o valor de retorno • Descrevem quaisquer outros efeitos colaterais que o método possa apresentar • Ao chamar um método, você pode assumir que ele cumpre todas as suas pós conições • Você deve documentar toda as pós condições para que os outros programadores saibam o que esperar ao chamar o método
  45. 45. Precondições e PósCondições • EXEMPLO: Método STRING CHARAT • Tem um parâmetro int: um índice na String • Précondição: o método assume que INDEX é maior que ou igual a zero e menor que o comprimento da STRING
  46. 46. Precondições e PósCondições • EXEMPLO: Método STRING CHARAT • Póscondição: • Caso a PRÉCONDIÇÃO seja atendida: • Declara que o método retornará o caractere na posição na STRING especificada pelo parâmetro INDEX • Caso a PRÉCONDIÇÃO não seja atendida: •O método lança uma IndexOutOfBoundsException
  47. 47. Precondições e PósCondições • O método charAt satisfaz sua póscondição desde que o programador atenda à precondição • DOCUMENTAÇÃO DO SOFTWARE • Escreva as póscondições e as précondições na especificação do seu software, se preferir, escreva comentários em cada declaração de método
  48. 48. Assertivas • Condições que devem ser verdadeiras em um ponto particular de um método • Ajudam a assegurar a validade de um programa capturando BUGS potenciais • Ajudam a identificar possíveis erros de lógica durante o desenvolvimento • Précondições e póscondições são dois tipos de assertivas
  49. 49. Assertivas • Pré condições: assertivas sobre o estado de um programa quando um método é invocado • Pós condições: assertivas sobre o estado de um programa depois do encerramento de um método • Assertivas podem comentários ser declaradas como • ASSERT: instrução para validar as assertivas programaticamente
  50. 50. Assertivas • ASSERT: avalia uma expressão BOOLEAN e determina se ela é verdadeira ou falsa expressão assert • Avalia expressão e lança um AssertionError se a expressão for false assert expressão1 : expressão2 • Avalia expressão1 e lança um AssertionError, com expressão2 como a mensagem de erro, se expressão1 for false
  51. 51. Exemplo 7 • Entrar no CMD.EXE • Entrar no diretório onde está salvo o arquivo .class • Java –ea AssertTest
  52. 52. Exercícios • Responda em um arquivo do word e envie via syllabus

×