2
respostas

[Dúvida] Hierarquia de exceções no bloco try/catch

Na atividade "Para saber mais: hierarquia de exceptions no Java" da aula "3 - Lidando com exceções" do curso "Java: consumindo API, gravando arquivos e lidando com erros", no seu final tem a seguinte frase:

"Ao lidar com exceções em um bloco try-catch, é importante considerar a hierarquia de exceções. É possível capturar exceções de uma classe mãe em um bloco catch que captura exceções de uma classe filha. No entanto, o inverso não é possível. Isso significa que, se um bloco catch captura exceções de uma classe filha, ele não será capaz de capturar exceções de uma classe pai."

Em ambas as afirmações esta sendo citado um bloco catch que captura exceções de uma classe filha (subclasse) e que desta é possível capturar exceções de uma classe mãe mas não de uma classe pai.

Qual a diferença da classe mãe e da classe pai? Elas não são só nomenclaturas para a superclasse?

Aparentemente a afirmação é contraditória, pois parece sugerir resultados diferentes para a mesma ação.

A final, o bloco catch que captura exceções de uma classe filha pode e não pode pegar exceções de quem e porquê?

2 respostas

Olá Rodrigo! Tudo bem?

Realmente uma frase pode ter causado confusão. Vamos esclarecer isso juntos!

No contexto de Java e orientação a objetos, os termos "classe mãe" e "classe pai" são realmente usados como sinônimos e ambos se referem à "superclasse" de uma determinada classe. Portanto, não há diferença entre eles.

A afirmação que você mencionou parece ter um erro de formulação. O correto séria dizer que um bloco catch que captura exceções de uma classe filha (subclasse) não pode capturar exceções de sua classe mãe (superclasse), mas o inverso é possível. Isso significa que se você configurar um bloco catch para capturar uma exceção de uma superclasse, ele também capturará exceções de todas as suas subclasses.

Por exemplo, se você tem um bloco catch configurado para capturar uma Exception, ele também capturará IOException, SQLException etc., que são subclasses de Exception. No entanto, um bloco catch configurado para capturar IOException não capturará Exception.

Aqui está um exemplo prático para ilustrar:

try {
    // Código que pode lançar exceções
} catch (IOException e) {
    // Este bloco só captura IOException e suas subclasses
} catch (Exception e) {
    // Este bloco captura Exception e todas as suas subclasses, incluindo IOException
}

No exemplo acima, se ocorrer uma IOException, o primeiro bloco catch específico para IOException irá capturá-la. Se ocorrer qualquer outra Exception que não seja uma IOException, o segundo bloco catch irá capturá-la.

A hierarquia de exceções é um conceito fundamental em Java e entender como ela funciona te ajudará a gerenciar erros de forma mais eficaz em seus programas.

Espero que isso esclareça a confusão e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Ola Armanno Barros Alves Junior.

Ajudou muito a esclarecer a dúvida, só peço que solicite a correção no material didático que é onde esta esse erro de formulação, e pelo que pude perceber tem mais de ano.

De resto só tenho a agradecer pela atenção dada.