domingo, 18 de maio de 2014

Erros e exceções

Explicação



Mesmo que um comando ou expressão estejam sintaticamente corretos, talvez ocorra um erro na hora de sua execução. Podemos usar tratamento de exceções para detectar erros e manipular esses erros, ou seja, tratá-los. Erros detectados durante a execução são chamados exceções e não são necessariamente fatais. Porém, podem terminar o programa ou retornar um valor de erro indicando falha, por exemplo. Esse problema representa situações anormais (exceções) ou inválidas (erros) durante o processo de execução.
Os métodos “geram uma exceção” quando, por uma razão qualquer, falham. O controle, então, passa imediatamente ao “gestor de exceções” apropriado. Uma maneira de tratar exceções é pelo comando try/catch/finally:
No bloco try estão colocados os comandos que podem provocar o lançamento de uma exceção.
Essas exceções são capturadas em um ou mais comandos catch, colocados após o bloco try.
O comando finally contém código a ser executado, independente de outros comandos. É opcional, mas quando presente, é sempre executado.
Em Java, especificamente, existem classes específicas (classes de exceção) e que sempre utilizam o sufixo *Exception. Elas são utilizadas para tratar erros (exceções não verificadas) e exceções (exceções verificadas).

Exceções verificadas e não verificadas
Toda exceção verificada deriva da class Exception.
As não verificadas ou não-checadas derivam da class RuntimeException.
Throwable é o pai de todas as exceções.
Error não são exceções e sim erros que jamais poderiam ter acontecido. Por exemplo, o estouro da memória.
Exception são as classes que lançam exceções e não erros de programação. Exemplo: tentar abrir um arquivo que não existe. Então é lançado uma exceção verificada, porque a classe de leitura de arquivos deriva de Exception.
RuntimeException são exceções que indicam erros de programas (não de lógica, pois senão não passaria pelo compilador). Esse tipo de exceção é conhecido como não verificada. Sendo assim, não é requisito declarar uma cláusula try{} e catch{}. Ex.: tentar converter “dois” em “2”.
Erros são tratados através de RuntimeException e suas subclasses. Todas as outras classes de exceção são exceções verificadas.
As exceções verificadas são geralmente aquelas que um programa pode recuperar ainda em tempo de programação. Exemplos incluem FileNotFoundException, ParseException , etc. Um programador pode verificar se essas exceções usando o bloco try-catch ou simplesmente deixar que um outro ponto do código as verifique - utilizando a key-word "throws". Por outro lado, temos exceções não verificadas. Estas são as exceções que não acontecem se está tudo em ordem. Exemplos incluem ArrayIndexOutOfBoundException , ClassCastException , OutOfMemoryError , StackOverflowError , etc.


Referência
Uma exceção representa uma situação que normalmente não ocorre e representa algo de estranho ou inesperado no sistema.
Os erros em Java são um tipo de exceção que também podem ser tratados. Eles representam problemas na máquina virtual e não devem ser tratados em 99% dos casos, já que provavelmente o melhor a se fazer é deixar a JVM encerrar (ou apenas a Thread em questão).
Fonte: CAELUM
Veja este vídeo sobre tratamento de erros e exceções no JAVA
Exemplo utilizando os conceitos aprendidos


Abaixo está um exemplo de tratamento de erro ou exceção. Tentaremos atribuir uma String de letras a um objeto inteiro.
Como não é possível atribuir uma String de letras a um objeto inteiro, uma exceção de formato de número é lançada.
O código acima apresentará algo como:
Não é possível atribuir a string ABC a um Objeto Inteiro.
A seguinte mensagem foi retornada:
For input string: "ABC"
Perceba que a linha System.out.println("A variável i vale " + i) não foi executada, pois houve um erro na linha anterior. Portanto, apenas a mensagem de tratamento do erro NumberFormatException foi impressa na tela.


Exercício prático


Faça um programa Java que solicite dois números ao usuário e, em seguida, imprime o resultado da divisão do primeiro pelo segundo. Trate a exceção “ArithmeticException”. Teste o método “getMessage” de “Exception” e observe o tipo de mensagem.


Exercício teórico


Quando seria apropriado usar o método try/catch?


Bibliográfia
http://www.inf.pucrs.br/flash/lapro2/1-excecoes.pdf
Alunos

Gustavo Cortes  - RM: 71052
Filippe Eduardo - RM: 72381

Nenhum comentário:

Postar um comentário