Captura de exceções de subclasses:
- Exceções de subclasses são capturadas pela cláusula catch de uma superclasse.
Exemplo: A superclasse de todas as exceções é Throwable. Se Throwable for capturado, todas as suas subclasses também serão tratadas.
Ordem das instruções catch:
A cláusula catch de uma subclasse deve sempre preceder a da superclasse.
Caso contrário, a superclasse capturaria todas as exceções, inclusive as da subclasse, tornando o código da subclasse inalcançável, o que é um erro em Java.
Exemplo de código com exceções de subclasses:
O exemplo a seguir captura exceções do tipo ArrayIndexOutOfBoundsException (subclasse) e Throwable (superclasse).
Exemplo de código:
// Subclasses devem preceder as superclasses em instruções catch.
class ExcDemo5 {
public static void main(String args[]) {
// O array numer é mais longo que denom.
int numer[] = { 4, 8, 16, 32, 64, 128, 256, 512 };
int denom[] = { 2, 0, 4, 4, 0, 8 };
for (int i = 0; i < numer.length; i++) {
try {
// Tenta realizar a divisão
System.out.println(numer[i] + " / " + denom[i] + " is " + numer[i] / denom[i]);
} catch (ArrayIndexOutOfBoundsException exc) {
// Captura exceção de acesso fora dos limites do array
System.out.println("No matching element found.");
} catch (Throwable exc) {
// Captura qualquer outra exceção
System.out.println("Some exception occurred.");
}
}
}
}
Esse caso, catch(Throwable) captura todas as exceções exceto ArrayIndexOutOfBoundsException. O problema da captura de exceções de subclasses passa a ser mais importante quando nós mesmos criamos as exceções.
Saída do programa:
O programa exibe o resultado das divisões corretas.
Quando ocorre uma exceção fora dos limites do array, ela é tratada pela cláusula catch correspondente.
Exceções não capturadas por ArrayIndexOutOfBoundsException são capturadas pela superclasse Throwable.
Exemplo de saída:
4 / 2 is 2
Some exception occurred.
16 / 4 is 4
32 / 4 is 8
Some exception occurred.
128 / 8 is 16
No matching element found.
No matching element found.
Regra importante:
Subclasses devem sempre preceder superclasses na ordem dos blocos catch para evitar que o código da subclasse seja inalcançável.
Conclusão:
Ao tratar exceções, certifique-se de ordenar os blocos catch de maneira correta, colocando as exceções de subclasses antes das superclasses. Isso garante que o tratamento seja feito de forma apropriada e evita erros de código inalcançável em Java.
Top comments (0)