BlogNotFoundException

Java, Linux, Open Source, etc...


Quem tem medo das exceções

Muitas pessoas que esão inciando em Java tem uma certa dificuldade em entender bem as exceções. É fundamental que todo programador tenha uma boa noção sobre declaração, criação e tratamento de exceções para não sejam produzidos mais e mais códigos sem um bom tratamento de erros.

Mas afinal o que é uma exceção ? uma exceção é um evento que ocorre durante a execução de um programa quando algum tipo de problema ocorre.

Já que estamos falando de Java, e tudo que não for um tipo primitivo deve ser um objeto (pelo menos...), as exceções não fogem a essa regra. As exceções são intâncias da classe java.lang.Exception que por sua vez é subclasse de java.lang.Throwable

A classe Throwable é a superclasse de todos os erros e exceções do Java. Ela possui duas subclasses:

Error - Representa situações incomuns que não não causadas por erros no programa.
Exception - Representa situações razoáveis que a aplicação deve tratar.

A figura abaixo mostra a hierarquia das exceções.



Os três tipos de exceções

Checked exceptions
As checked exceptions são subclasses de Exception e representam condições inválidas (dados errados, problemas com banco de dados, problemas com a rede, etc...).
Se um método lançar uma checked exception deve manipulá-lo ou declará-lo.

Unchecked exceptions
As unchecked exceptions são subclasses de RuntimeException e representam erros de programação.
Se um método lançar uma unchecked exception não será necessário manipulá-la ou declará-la.

Error
Um Error representa condições excepicionais externas a aplicação que geralmente não podem ser recuperados. Por exemplo, suponha que uma aplicação precisa abrir alguns arquivos e recuperar informações, mas por algum mal funcionamento do sistema não consiga. Esse mal funcionamento irá causar um java.io.IOError.
Declarando e Manipulando exceções

Para indicar as exceções que um método pode lançar, utilizamos a palavra-chave throws:
public void foo() throws MinhaException {
//
}
Para informar a JVM qual código executar quando uma determinada exceção ocorrer, utilizamos as palavras-chave try e catch:
try {
// bloco onde podem ocorrer exceções
} catch (MinhaException exception) {
// tratar exceção
}
Dicas: As checked exceptions forçam o desenolvedor a manipular os possíveis erros, então nunca faça isso:
public void foo() {
try {
// algum código que possa lancar uma exceção
} catch (Exception exception) {

}
}
Dessa forma você está omitindo a exceção e nem mesmo poderá ver a pilha de erros.

Nunca faça:
try {
// algum código que possa lancar uma exceção
} catch (Exception exception) {
System.out.println(exception);
}
ou
try {
// algum código que possa lancar uma exceção
} catch (Exception exception) {
System.out.println(exception.getMessage());
}
Dessa forma você não conseguirá rastrear onde está a possível causa do erro. Sempre utilize o método printStackTrace() da classe Throwable:
try {
// algum código que possa lancar uma exceção
} catch (Exception exception) {
exception.printStackTrace();
}
Ao utilizar o método printStackTrace(), preservamos a pilha de erros e tornamos mais fácil encontrar o local que originou o erro.

0 Responses to “Quem tem medo das exceções”

Postar um comentário