Classes de Exceção no Java
A superclasse de todas as exceções em Java é Throwable
. A partir dela derivam diretamente duas classes: Error
e Exception
. Todos os outros tipos de exceção são descendentes de uma dessas duas.
A classe Error
representa falhas internas da Máquina Virtual Java (JVM). Esses erros indicam problemas graves no ambiente de execução e normalmente não devem (ou não podem) ser tratados pelo programador.
As exceções herdam de Exception
. Dentro desse grupo, destaca-se RuntimeException
, que é a superclasse das chamadas exceções não verificadas (unchecked exceptions). O compilador não exige que essas exceções sejam tratadas nem declaradas com throws
no cabeçalho do método. Geralmente resultam de erros de programação, como conversões de tipo inválidas ou acesso a índices inexistentes.
Exemplos comuns de exceções não verificadas:
ArithmeticException
– divisão por zero.IndexOutOfBoundsException
– índice fora dos limites de um array ou lista.IllegalArgumentException
– argumento inválido passado para um método.NullPointerException
– uso de uma referência nula.NumberFormatException
– falha na conversão de string para número.
Todas as outras subclasses de Exception
que não descendem de RuntimeException
são exceções verificadas (checked exceptions), que devem ser tratadas com try..catch
ou declaradas no método com throws
.
Exemplos de exceções verificadas:
CloneNotSupportedException
– tentativa de clonar um objeto cuja classe não implementaCloneable
.InterruptedException
– thread interrompida por outra thread.ClassNotFoundException
– classe solicitada não encontrada.
Essas exceções podem ser tratadas ou propagadas ao método chamador:
public Person clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
return p;
}
Hierarquia básica de exceções
Throwable ├── Error └── Exception ├── RuntimeException │ ├── ArithmeticException │ ├── IndexOutOfBoundsException │ ├── IllegalArgumentException │ ├── NullPointerException │ └── NumberFormatException ├── CloneNotSupportedException ├── InterruptedException └── ClassNotFoundException
Métodos úteis herdados de Throwable
Todas as exceções herdam métodos de Throwable
que ajudam no diagnóstico:
getMessage()
– retorna a mensagem associada à exceção.getStackTrace()
– retorna um array com a pilha de chamadas.printStackTrace()
– imprime a pilha de chamadas no console.
Exemplo:
try {
int x = 6 / 0;
}
catch (Exception ex) {
ex.printStackTrace();
}
Resumo
- Todas as exceções descendem de
Throwable
, que se divide emError
eException
. Error
indica falhas graves na JVM, normalmente não tratáveis.RuntimeException
é a base das exceções não verificadas, que não precisam ser tratadas nem declaradas.- Exemplos de não verificadas:
NullPointerException
,ArithmeticException
,IllegalArgumentException
. - As exceções verificadas precisam ser tratadas ou declaradas no método.
- Métodos como
getMessage()
,getStackTrace()
eprintStackTrace()
ajudam na análise de erros.