Junior
Quais são as principais classes de exceções em Java?
sobes.tech IA
Resposta da IA
Em Java, a hierarquia de exceções começa com a classe Throwable. Tem duas subclasses principais: Error e Exception.
Error:
- Representa problemas graves que geralmente não devem ser capturados pela aplicação.
- Ocorrem por culpa da máquina virtual (JVM) ou do ambiente.
- Exemplos:
OutOfMemoryError,StackOverflowError.
Exception:
- Representa condições que a aplicação pode e deve tratar.
- Divide-se em dois tipos:
- Exceções verificadas (Checked Exceptions):
- Devem ser capturadas (com blocos
try-catch) ou declaradas na assinatura do método (throws). - O compilador verifica obrigatoriamente seu tratamento.
- Geralmente representam condições previsíveis, mas indesejáveis, que podem ocorrer em tempo de execução.
- Exemplos:
IOException,FileNotFoundException,SQLException.
- Devem ser capturadas (com blocos
- Exceções não verificadas (Unchecked Exceptions):
- Herda de
RuntimeException. - Não requer tratamento ou declaração obrigatória na assinatura do método.
- Frequentemente indicam erros na lógica do programa ou uso incorreto da API.
- Exemplos:
NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException.
- Herda de
- Exceções verificadas (Checked Exceptions):
Aqui estão as classes principais de exceções:
java.lang.Throwable(Classe base)java.lang.Error(Erros não tratáveis)java.lang.OutOfMemoryErrorjava.lang.StackOverflowError
java.lang.Exception(Exceções tratáveis)java.io.IOException(Verificada)java.io.FileNotFoundException(Verificada)
java.sql.SQLException(Verificada)java.lang.RuntimeException(Não verificada)java.lang.NullPointerExceptionjava.lang.IllegalArgumentExceptionjava.lang.IndexOutOfBoundsException
Tabela comparativa:
| Característica | Exceção Verificada | Exceção Não Verificada (RuntimeException) |
Error |
|---|---|---|---|
| Herança | Exception (exceto RuntimeException e seus descendentes) |
RuntimeException |
Error |
| Tratamento/declaração obrigatória | Sim | Não | Não |
| Causa | Falhas previsíveis | Erros de programação, uso incorreto | Problemas graves de JVM/ambiente |
| Recuperação após | Frequentemente possível | Raramente (indica um bug) | Praticamente impossível |
Exemplo de tratamento de exceções:
// Exemplo de tratamento de exceção verificada e não verificada
public class ExceptionHandlingDemo {
public void readFile(String fileName) {
try {
// Tentativa de leitura de arquivo - pode lançar FileNotFoundException (verificada)
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(fileName));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close(); // Também pode lançar IOException (verificada)
// Exemplo de exceção não verificada (pode ocorrer se fileName == null)
int length = fileName.length(); // NullPointerException (não verificada)
} catch (java.io.FileNotFoundException e) {
// Tratamento de FileNotFoundException
System.err.println("Erro: Ficheiro não encontrado - " + e.getMessage());
} catch (java.io.IOException e) {
// Tratamento de erros gerais de entrada/saída
System.err.println("Erro ao ler o ficheiro: " + e.getMessage());
} catch (java.lang.NullPointerException e) {
// Tratamento de NullPointerException - opcional, mas boa prática para depuração
System.err.println("Erro: Referência nula utilizada - " + e.getMessage());
}
}
public static void main(String[] args) {
ExceptionHandlingDemo demo = new ExceptionHandlingDemo();
demo.readFile("non_existent_file.txt"); // Vai lançar FileNotFoundException
demo.readFile(null); // Pode lançar NullPointerException
}
}