DEV Community

Blocos try aninhados

Blocos try aninhados:

Um bloco try pode ser colocado dentro de outro bloco try.
Se uma exceção não for capturada no bloco try interno, ela será propagada para o bloco try externo.

Propagação de exceções:
Quando uma exceção ocorre no bloco interno e não é tratada por ele, ela pode ser capturada pelo bloco externo, permitindo que o programa continue ou encerre de forma controlada.

Exemplo de código com try aninhado:
O exemplo a seguir mostra um bloco try interno que trata erros de divisão por zero, enquanto o bloco try externo trata exceções de acesso fora dos limites do array.

Exemplo de código:

// Usa um bloco try aninhado.
class NestTrys {
    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 };

        try { // Bloco try externo
            for (int i = 0; i < numer.length; i++) {
                try { // Bloco try aninhado
                    // Tenta realizar a divisão
                    System.out.println(numer[i] + " / " + denom[i] + " is " + numer[i] / denom[i]);
                } catch (ArithmeticException exc) {
                    // Captura exceção de divisão por zero
                    System.out.println("Can't divide by Zero!");
                }
            }
        } catch (ArrayIndexOutOfBoundsException exc) {
            // Captura exceção de acesso fora dos limites do array
            System.out.println("No matching element found.");
            System.out.println("Fatal error - program terminated.");
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

Saída do programa:
Quando ocorre uma divisão por zero, a exceção é capturada pelo bloco try interno e o programa continua.
Quando ocorre um erro de índice fora dos limites do array, o bloco try externo captura a exceção e encerra o programa.~

Exemplo de saída:

4 / 2 is 2
Can't divide by Zero!
16 / 4 is 4
32 / 4 is 8
Can't divide by Zero!
128 / 8 is 16
No matching element found.
Fatal error – program terminated.

Enter fullscreen mode Exit fullscreen mode

Uso prático:

  • Blocos try aninhados permitem que diferentes tipos de erros sejam tratados de forma separada:
  • Erros menos graves (como divisão por zero) podem ser tratados localmente, permitindo que o programa continue.
  • Erros mais graves (como acesso fora dos limites do array) podem ser capturados pelo bloco externo, levando a uma ação mais drástica, como a finalização do programa.

Conclusão:

  • Usar blocos try aninhados é útil quando diferentes categorias de erros precisam ser tratadas de maneiras distintas.
  • Isso permite maior flexibilidade no controle do fluxo de execução do programa, permitindo tratar exceções leves internamente e deixando exceções graves para o bloco externo.

Top comments (0)