Entendendo a hierarquia de exceção em Java explicado
Publicados: 2022-03-08O termo 'Exceção' é a abreviação de “evento excepcional”. Em Java, uma exceção é essencialmente um evento que ocorre durante a execução de um programa e interrompe o fluxo normal do programa. As exceções são indesejadas e principalmente inesperadas, que geralmente surgem em tempo de execução ou de compilação. Todas essas exceções precisam ser tratadas para garantir que o programa seja executado em seu fluxo natural.
No entanto, antes de lidar com exceções, seria útil saber quais tipos diferentes de exceções estão presentes no Java. Através deste artigo, vamos ver os vários tipos de Exceções em Java e a Hierarquia de Exceções que eles seguem.
Índice
Hierarquia de exceções em Java
A hierarquia de Exceptions na linguagem de programação Java começa com a classe Throwable – que vem da classe Object e é sua subclasse direta, enquanto a classe Exception apresenta todas as ramificações desta classe Throwable em duas subclasses – Error e Exception. Aqui está um fluxograma para entender melhor a hierarquia de exceção Java:
A classe Exception apresenta todas as Exceptions que você pode precisar manipular ao trabalhar com a linguagem de programação Java. Alguns exemplos comumente conhecidos e encontrados de tais exceções incluem NullPointerException, ClassNotFoundException, IllegalArgumentException, etc.
Por outro lado, a classe Error cuida de problemas mais graves na arquitetura do programa Java e não é cuidada no código do aplicativo. Alguns exemplos de erros em Java são InternalError, AssertionError, OutOfMemoryError, etc.
As exceções em Java são divididas em duas categorias:
- Exceções verificadas – também são conhecidas como exceções em tempo de compilação.
- Exceções não verificadas – também são conhecidas como exceções de tempo de execução.
Um ponto importante a ser observado neste momento é que Exceptions não verificadas são todas subclasses da classe RuntimeException. Falaremos mais sobre exceções marcadas e não verificadas posteriormente neste artigo. Mas antes disso, vamos ver essencialmente como Erros e Exceções diferem em seu funcionamento para que não haja confusão.
Erros e exceções em Java – como eles diferem?
A documentação oficial da linguagem de programação Java refere-se a Erros como ocorrências durante sua programação Java que – “indicam problemas sérios que um aplicativo razoável não deve tentar detectar”. A gravidade dos Erros fica clara pela forma como esta afirmação está posicionada. Claramente, isso se refere ao conjunto de problemas que seu programa pode enfrentar dos quais não é possível se recuperar sem refatorar o código ou modificar a arquitetura do aplicativo Java.
Vamos dar uma olhada em um método Java que vai lançar um erro:
public static void print(String S) {
imprimir(S);
}
No código mencionado acima, o método print() atua como um método recursivo que continua chamando a si mesmo repetidamente, repetidamente, até atingir o tamanho máximo permitido para uma pilha de threads em Java. Nesse ponto, ele sai da execução com um muito comum – StackOverflowError, que lê algo como:
Exceção no encadeamento “principal” java.lang.StackOverflowError
em StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)
Como mostra o exemplo acima, o método lança um exemplo, mas esse erro não pode ser tratado no próprio código. Assim, o programa simplesmente encerra a execução porque o dano é irrecuperável. Como solução, o código precisa ser modificado.
Ao contrário dos Erros, as Exceções indicam condições que podem ser detectadas por um aplicativo razoável. As exceções em Java incluem problemas que podem ocorrer no tempo de compilação ou durante o tempo de execução. Essas exceções acontecem com bastante frequência em todos os aplicativos – especialmente durante a fase de teste e depuração. Como resultado, as exceções em Java podem ser tratadas no próprio programa para garantir que o código execute seu fluxo natural.
Agora, vamos falar um pouco mais sobre a Hierarquia de Exceções em Java, observando o que são Exceções marcadas e desmarcadas.
Exceções marcadas e não verificadas em Java
Como mencionado anteriormente, as exceções em um programa Java podem ocorrer durante o tempo de compilação ou durante o tempo de execução. Isso é o que nos dá os dois tipos amplos de Exceções presentes em Java. Aqui está olhando para essas duas exceções em detalhes.
Exceções em tempo de compilação
Exceções que acontecem em tempo de compilação são conhecidas como exceções de tempo de compilação. Elas também são chamadas de exceções verificadas porque você precisa verificá-las explicitamente em seu programa Java e tratá-las no próprio código. Classes como InterruptedException, IOException e outras são exceções verificadas.
Vejamos um método que pode manipular uma exceção verificada:
public void writeAFile() {
tente (BufferedWriter b_w = new BufferedWriter(new FileWriter(“meuArquivo.txt”))) {
b_w.write(“Teste”);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Como você pode ver, existem duas instruções no bloco try do código acima –
- Instanciando o objeto – BufferedWriter
- Usando o objeto para gravar no arquivo
Ambas as instruções podem lançar IOException. IOException, sendo uma exceção verificada, precisa ser tratada pelo chamador ou pelo método. No exemplo acima, você pode ver a exceção sendo tratada dentro do próprio método.
Exceções de tempo de execução
Ao contrário das exceções de tempo de compilação que são lançadas durante o tempo de compilação, exceções de tempo de execução ou não verificadas podem ser lançadas “a qualquer momento”, o que significa essencialmente em tempo de execução. Como resultado disso, os métodos não precisam usar explicitamente blocos catch-and-throw para lidar com essas exceções não verificadas. Algumas das classes que herdam exceções de tempo de execução não verificadas incluem – NullPointerException, ArithmeticException, etc.
Vejamos um trecho de código Java que lança uma exceção NullPointerException desmarcada e que não é tratada no trecho de código ao contrário do anterior. Aqui está:
public void writeToFile() {
tente (BufferedWriter b_w = null) {
b_w.write(“Teste”);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Quando você chama o método acima, o programa lançará um NullPointerException, pois o objeto BufferedWriter é nulo. Aqui está como a exceção seria:
Exceção no encadeamento “principal” java.lang.NullPointerException
em IOExceptionExample.writeToFile(IOExceptionExample.java:10)
em IOExceptionExample.main(IOExceptionExample.java:17)
Para concluir
Com isso, chegamos ao final deste blog sobre o entendimento da Hierarquia de Exceções em Java. Por favor, tenha em mente que esta não é uma cobertura abrangente de Exceções em Java e como lidar com elas. Para isso, você deve se aprofundar e se expor a diferentes possíveis Exceções para ver como elas funcionam. Conhecer o Exception Handling irá prepará-lo para uma carreira de sucesso como desenvolvedor full-stack, já que as exceções formam o básico de qualquer aplicativo.
Na upGrad, temos um curso especializado em desenvolvimento full stack – Executive PG Program in Software Development – Specialization in Full Stack Development – onde levamos você por todas as nuances do desenvolvimento de software, focando principalmente no desenvolvimento Full Stack. Sugerimos que você confira o curso e provavelmente reserve um lugar em breve!
1. Qual classe está presente no topo da Hierarquia de Exceções em Java?
A classe Throwable está no topo da hierarquia de exceções em Java.
2. Quais são os diferentes tipos de Exceções presentes em Java?
Java tem exceções desmarcadas e marcadas. As exceções verificadas também são chamadas de exceções de tempo de compilação, enquanto as exceções não verificadas também são conhecidas como exceções de tempo de execução.
3. Como as exceções são tratadas em Java?
O try-catch é a maneira mais fácil de lidar com exceções em Java. A parte principal do código que você deseja executar precisa ser colocada no bloco try, enquanto um ou mais blocos catch capturarão todas as exceções que o código lançar. Este método detectará qualquer tipo de exceção Java que seja lançada.