Definição de Exceções em java
São várias as possibilidades de um código gerar um erro,
por exemplo, se você faz um programa que lê um número informado pelo usuário e
o usuário digita uma letra.
Confira este exemplo abaixo:
Se o usuário digitar um número o programa é executado
como deveria:
Agora veja o que acontece quando o usuário digita uma
letra ao invés de um número:
Quando não tratamos este erro o programa simplesmente
para de funcionar e podemos ver no console que uma Exception é gerada:
InputMismatchException.
A documentação da classe Scanner diz que o método nestInt( ) lança esta Exception se o próximo valor não
corresponde a um número inteiro.
Nesta documentação você também pode conferir várias
outras Exception que os métodos da classe Scanner podem lançar. Mas o que é uma
Exception?
A Exception é uma subclasse Throwable que por sua vez é
uma subclasse de Object. A Exception e suas subclasses representam exceções que
podem ocorrer em um programa e desta maneira podemos captura-las e trata-las.
Exceções como vimos no exemplo em que um método espera um número inteiro e o
usuário digita uma letra.
Sendo assim, uma exceção é uma ocorrência que altera o
fluxo do programa. As exceções podem ocorrer por falhas de hardware, exaustão de recursos e erros.
“Todas as classes de exceção do java herdam direta
ou indiretamente da classe Exception, formando uma hierarquia de herança. Você
pode estender essa hierarquia com suas próprias classes de exceção.” (DEITEL & DEITEL. Java – como programar. 8a Edição, Bookman, 2012)
Ou seja, você pode criar suas próprias classes de
exceção aplicando o conceito de herança da classe Exception.
Veja
a hierarquia de exceções em java:
Exceções
verificadas e não verificadas
Toda exceção verificada deriva da classe 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. Ex.:
estouro da memória.
Exception- as classes que deveriam aqui, 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”.
Alguns exemplos de
exceções já definidas no pacote java.lang incluem:
ArithmeticException: indica situações de erros em
processamento aritmético, tal como uma divisão inteira por 0. A divisão de um
valor real por 0 não gera uma exceção (o resultado é o valor infinito);
NumberFormatException:
indica que tentou-se a conversão de uma String para um formato numérico, mas
seu conteúdo não representava adequadamente um número para aquele formato. É
uma subclasse de IllegalArgumentException;
IndexOutOfBounds:
indica a tentativa de acesso a um elemento de um agregado aquém ou além dos
limites válidos. É a superclasse de ArrayIndexOutOfBoundsException, para
arranjos, e de StringIndexOutOfBounds, para strings;
NullPointerException:
indica que a aplicação tentou usar uma referência a um objeto que não foi ainda
definida;
ClassNotFoundException:
indica que a máquina virtual Java tentou carregar uma classe mas não foi
possível encontrá-la durante a execução da aplicação.
Além
disso, outros pacotes especificam suas exceções, referentes às suas
funcionalidades. Por exemplo, no pacote java.io define-se IOException, que
indica a ocorrência de algum tipo de erro em operações de entrada e saída. É a
superclasse para condições de exceção mais específicas desse pacote, tais como
EOFException (fim de arquivo ou stream), FileNotFoundException (arquivo
especificado não foi encontrado) e InterruptedIOException (operação de entrada
ou saída foi interrompida).
Uma
exceção contém pelo menos uma string que a descreve, que pode ser obtida
pela aplicação do método getMessage(), mas pode eventualmente conter outras
informações. Por exemplo, InterruptedIOException inclui um atributo público do
tipo inteiro, bytesTransferred, para indicar quantos bytes foram transferidos
antes da interrupção da operação ocorrer. Outra informação que pode sempre ser
obtida de uma exceção é a seqüência de métodos no momento da exceção, obtenível
a partir do método printStackTrace().
Agora veremos abaixo a estrutura de como tratar um erro ou exceção:
try - é usada para indicar um bloco de código que possa ocorrer uma
exceção.
catch – serve para manipular as exceções, ou seja, tratar o erro.
finally – sempre será executado depois do bloco try/catch. O importante é
saber que esse bloco sempre será executado (exceto nos casos de encerramento da
jvm System.exit()).
Veja abaixo as combinações válidas e inválidas para o uso do try{}, cacth{} e
finally{} (isso é questão de certificação).
Combinações válidas:
try{}
|
catch{}
|
|
try{}
|
finally{}
|
|
try{}
|
catch{}
|
finally{}
|
Inválidas não Compila:
try{}
|
—
|
–
|
catch{}
|
finally{}
|
—
|
try{}
|
finally{}
|
catch{}
|
As palavras try e catch servem para informar a JVM o que
fazer quando ocorrer uma exceção.
Os blocos catch devem aparecer após o try (isso é um requisito); entre os blocos não
podem possuir nenhuma instrução.
Quando uma exceção é identificada no try{} o restante do código
não é executado e não há um retorno para o término do código.
Exercício de tratamento de exceção:
Voltando ao exercício que iniciamos no inicio do texto, vejamos como
poderíamos tratar a exceção para o usuário que digita uma letra ao invés de um
número:
No bloco try { } colocamos todo o nosso código anterior, principalmente
a parte que pode gerar a exceção. Já no bloco catch temos a impressão da
Exception e uma mensagem para o usuário explicando que o mesmo deve informar um
número.
Perceba que agora o programa não para de rodar quando o usuário digita
uma letra. O que acontece é que a Exception é capturada, impressa e uma
mensagem para o usuário o alerta para o erro.
Você pode aprender mais sobre tratamento de exceções no vídeo a seguir:
E para testar o que aprendeu vamos a um exercício:
Uma ArithmeticException é lançada na ocorrência de algum erro
matemático, como por exemplo a divisão por zero. Faça um programa que lê dois
números e mostre o resultado da divisão destes. Realize o tratamento para a
exceção ArithmeticException.
Bibliografia
Livro:
DEITEL & DEITEL. Java – como programar. 8a Edição, Bookman, 2012
Site:
DEVMEDIA
DEVMEDIA
http://www.devmedia.com.br/trabalhando-com-excecoes-em-java/27601
Grupo:
Eduardo Tanaka
Rodrigo Rocillo
Vanks Estevão
Vitório Lima
Grupo:
Eduardo Tanaka
Rodrigo Rocillo
Vanks Estevão
Vitório Lima