JAVA - Tratamento de Erros
Upcoming SlideShare
Loading in...5
×
 

JAVA - Tratamento de Erros

on

  • 458 views

JAVA - Tratamento de Erros

JAVA - Tratamento de Erros

Statistics

Views

Total Views
458
Views on SlideShare
458
Embed Views
0

Actions

Likes
0
Downloads
5
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

JAVA - Tratamento de Erros JAVA - Tratamento de Erros Presentation Transcript

  • TRATAMENTO DE ERROS Linguagem de Programação II Ciência da Computação Prof.ª Ms. Elaine Cecília Gatto
  • 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
  • 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
  • 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.
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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.
  • http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html Hierarquia de Exceções
  • Hierarquia de Exceções Lançada quando um aplicativo tenta usar null em um caso em que é exigido um objeto.
  • 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.
  • 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
  • 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!
  • 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.
  • 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
  • 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
  • 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.
  • 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
  • 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.
  • 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.
  • 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
  • Finally try { } catch(tipo de exceção 1) { } catch(tipo de exceção 2) { } finally { }
  • 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
  • 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
  • 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
  • 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
  • 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.
  • Exemplo 3
  • 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.
  • 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.
  • 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
  • Exemplo 4
  • 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
  • Exemplo 5
  • 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
  • Exemplo 6
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Exemplo 7 • Entrar no CMD.EXE • Entrar no diretório onde está salvo o arquivo .class • Java –ea AssertTest
  • Exercícios • Responda em um arquivo do word e envie via syllabus