java - tratamento de erros

52
TRATAMENTO DE ERROS Linguagem de Programação II Ciência da Computação Prof.ª Ms. Elaine Cecília Gatto

Upload: elaine-cecilia-gatto

Post on 06-Jun-2015

469 views

Category:

Education


1 download

DESCRIPTION

JAVA - Tratamento de Erros

TRANSCRIPT

Page 1: JAVA - Tratamento de Erros

TRATAMENTO DE ERROSLinguagem de Programação IICiência da ComputaçãoProf.ª Ms. Elaine Cecília Gatto

Page 2: JAVA - Tratamento de Erros

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

Page 3: JAVA - Tratamento de Erros

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

Page 4: JAVA - Tratamento de Erros

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.

Page 5: JAVA - Tratamento de Erros

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

Page 6: JAVA - Tratamento de Erros

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

Page 7: JAVA - Tratamento de Erros

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

Page 8: JAVA - Tratamento de Erros

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

Page 9: JAVA - Tratamento de Erros

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

Page 10: JAVA - Tratamento de Erros

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

Page 11: JAVA - Tratamento de Erros

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

Page 12: JAVA - Tratamento de Erros

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

Page 13: JAVA - Tratamento de Erros

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.

Page 14: JAVA - Tratamento de Erros

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

Page 15: JAVA - Tratamento de Erros

Hierarquia de Exceções

Lançada quando um aplicativo tenta usar null em um caso em que é exigido um objeto.

Page 16: JAVA - Tratamento de Erros

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.

Page 17: JAVA - Tratamento de Erros

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

Page 18: JAVA - Tratamento de Erros

• 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

Page 19: JAVA - Tratamento de Erros

• 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

Page 20: JAVA - Tratamento de Erros

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

Page 21: JAVA - Tratamento de Erros

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

Page 22: JAVA - Tratamento de Erros

• 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

Page 23: JAVA - Tratamento de Erros

• 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

Page 24: JAVA - Tratamento de Erros

• 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

Page 25: JAVA - Tratamento de Erros

• 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

Page 26: JAVA - Tratamento de Erros

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

Page 27: JAVA - Tratamento de Erros

Finally

try {}catch(tipo de exceção 1) {}catch(tipo de exceção 2) {}finally {}

Page 28: JAVA - Tratamento de Erros

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

Page 29: JAVA - Tratamento de Erros

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

Page 30: JAVA - Tratamento de Erros

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

Page 31: JAVA - Tratamento de Erros

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

Page 32: JAVA - Tratamento de Erros

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.

Page 33: JAVA - Tratamento de Erros

Exemplo 3

Page 34: JAVA - Tratamento de Erros

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.

Page 35: JAVA - Tratamento de Erros

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.

Page 36: JAVA - Tratamento de Erros

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

Page 37: JAVA - Tratamento de Erros

Exemplo 4

Page 38: JAVA - Tratamento de Erros

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

Page 39: JAVA - Tratamento de Erros

Exemplo 5

Page 40: JAVA - Tratamento de Erros

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

Page 41: JAVA - Tratamento de Erros

Exemplo 6

Page 42: JAVA - Tratamento de Erros

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

Page 43: JAVA - Tratamento de Erros

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

Page 44: JAVA - Tratamento de Erros

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

Page 45: JAVA - Tratamento de Erros

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

Page 46: JAVA - Tratamento de Erros

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

Page 47: JAVA - Tratamento de Erros

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

Page 48: JAVA - Tratamento de Erros

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

Page 49: JAVA - Tratamento de Erros

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

Page 50: JAVA - Tratamento de Erros

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

Page 51: JAVA - Tratamento de Erros

Exemplo 7

• Entrar no CMD.EXE

• Entrar no diretório onde está salvo o arquivo .class

• Java –ea AssertTest

Page 52: JAVA - Tratamento de Erros

Exercícios

• Responda em um arquivo do word e envie via syllabus