Buscar

Exceções - POO

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Tratamento de Exceções
Sumário
Introdução
Tratamento Simples de Exceções
Usando blocos try e catch
Gerando uma exceção
Exceção verificada
Exceção não verificada
Métodos úteis de classes de exceção
getMessage();
toString();
printStackTrace();
Capturando Múltiplas Exceções
finally
Exceções definidas pelo usuário
Introdução
Apesar de não ser detectado nenhum erro de compilação, as vezes seu programa não funciona.
Exemplos:
divisão por zero;
tentar acessar um índice inválido em um Array;
Tentativa de abrir um arquivo inexistente;
Queda da conexão de rede;
Entrada de dados ilegal.
Essas operações ilegais geram exceções.
Grande parte das vezes quando uma exceção é gerada o programa será encerrado.
Introdução
Os usuários esperam que os programas atuem de modo sensato quando as exceções acontecem.
Se uma operação não pode ser completada por causa de um erro, o programa também deve:
retornar a um estado seguro e permitir que ao usuário executar outros comandos;
permitir ao usuário salvar todo o trabalho e terminar o programa elegantemente.
Introdução
A classe Exception é a superclasse de todas as classes de exceção, que encapsula exceções específicas (como exemplificadas anteriormente) 
Introdução
A regra “Se for uma RuntimeException, a culpa é sua” funciona muito bem.
Usando blocos try e catch
Java fornece os blocos try e catch para nos permitir tratar exceções, de modo que nosso código possa continuar executando.
Coloca-se o código que possa gerar uma exceção dentro do bloco try e o código para recuperação da exceção é colocado dentro de um bloco catch.
Se uma exceção for lançada pelo código dentro do bloco try, então a execução pulará para o bloco catch, onde existe o código para tratar aquela exceção.
Se nada de ilegal acontecer dentro do bloco try, o código do bloco catch será ignorado. 
Usando blocos try e catch
try
{
 //código que possa gerar uma exceção
}
catch (ExceptionClass exceptionObjRef)
{
 //código para a recuperação da exceção
} 
Usando blocos try e catch
As chaves são exigidas tanto para o corpo do try como do catch mesmo se eles tiverem apenas uma instrução ou mesmo nenhuma.
O parâmetro ExceptionClass da cláusula catch especifica uma e apenas uma ExceptionClass.
Não listar ou listar duas ou mais ExceptionClass na cláusula catch dará erro de compilação.
Gerando uma exceção
String x;
int nro; 
x=“32.2”;
nro=Integer.parseInt(x); 
 ooopppsss: 
Exception in thread “main” java.lang.NumberFormatException: For input string: “32.2” ...
Gerando uma exceção
Identificando o problema. O método parseInt tem o seguinte cabeçalho:
	public static int parseInt(String str) throws NumberFormatExpetion
A cláusula throws NumberFormatException indica que o método parseInt pode detectar uma situação para a qual ele gerará uma NumberFormatException.
O método parseInt irá lançar (gerar) uma exceção. 
Gerando uma exceção
Java distingue entre dois tipos de exceções:
não verificadas, aquelas que são subclasses de Error ou RuntimeException
verificadas, qualquer outra classe de exceção.
Exceções verificadas e não verificadas
Uma exceção não verificada (ex. ArithmeticException) não necessita (mas se acontecer, seu programa poderá parar a execução) ser tratada com blocos try e catch.
Já uma exceção verificada(ex. IOException) deverá ser colocada entre blocos try e catch isto é OBRIGATÓRIO caso contrário, seu programa não compilará.
Exceções verificadas e não verificadas
No bloco catch, podemos usar o parâmetro Exception como uma referência a objeto para conseguir mais informação sobre o que causou a exceção.
Métodos úteis da classe Exception
String getMessage()
retorna uma mensagem indicando a causa da exceção
String toString()
retorna uma String contendo o nome da classe de exceção e uma mensagem indicando a causa da exceção.
void printStackTrace() 
imprime o número da linha do código que causou a exceção, junto da sequência de chamadas a métodos que levaram à exceção. 
Capturando múltiplas exceções
Se um código no bloco try for passível de múltiplos tipos de exceção, podemos fornecer múltiplos blocos catch, um para cada exceção possível.
Quando a exceção for gerada, a JVM buscará nos blocos catch, em ordem. 
O primeiro bloco catch com um parâmetro que combine com a exceção lançada será executado, os demais blocos catch serão ignorados.
Importante, lembre-se do conceito de Herança em OO. (ex. Exception comtempla TODAS as exceções lançadas.) 
Capturando múltiplas exceções
try
{
 //código que pode gerar uma exceção
}
catch(Exception1Class e1)
{
 //código para tratar uma exceção Exception1Class
}
catch(Exception2Class e2)
{
 //código para tratar uma exceção Exception2Class
}
Capturando múltiplas exceções
(finally)
Após um bloco try e seus blocos catch você poderá opcionalmente adicionar um bloco finally que SEMPRE será executado, ocorrendo uma exceção ou não.
No bloco finally, você poderá incluir algum código de finalização e/ou arrumação.
Ex. encerrar a conexão com um SGBD.
Exceções definidas pelo usuário
Em algumas situações podemos querer projetar nossa própria classe de exceção, porque as classes de exceção predefinidas Java não atendem nossos propósitos.
De forma geral, quando uma exceção definida pelo usuário é criada como subclasse de uma classe de exceção já existente de Java. (ex. Exception, NumberFormatException ou IllegalArgumentException)
Exceções definidas pelo usuário
Assim, o padrão geral de uma classe de exceção definida pelo usuário é:
public class ExceptionName extends ExistingExceptionClass Name
{
	public ExceptionName(String message)
	{
		super(message);
	}
}
Referências Bibliográficas
Horstmann,C.S.; Cornell, G. Core Java Volume I- Fundamentos Pearson 8ª edição.
Anderson, J.; Franceschi, H. Java 6 Uma abordagem ativa de aprendizado LTC 2ª edição.
Sítios variados da Internet.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais