java - tratamento de erros

Post on 06-Jun-2015

470 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

JAVA - Tratamento de Erros

TRANSCRIPT

TRATAMENTO DE ERROSLinguagem de Programação IICiência da ComputaçãoProf.ª 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çãoO 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.

Hierarquia de Exceçõeshttp://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html

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

• 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 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.

Exceções Não Verificadas

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

• 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.

Exception

• 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-java-orientacao-objetos/excecoes-e-controle-de-erros/#11-4-outro-tipo-de-excecao-checked-exceptions

Exceções Não Verificadas e Exceções Verificadas

• 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.

Capturas de Exceções

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 ser declaradas como comentários

• 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

top related