1
resposta

Opcional Testando erro - Formação Java - Exceções

Ao executar o código abaixo teremos o error StackOverFlowError, pois o método 2 fica em um looping se chamando diversas vezes até ocupar toda a memória HEAP(memória de objetos). Trata-se de um erro da máquina virtual.

Quando um método chama a si mesmo, chamamos de recursão.

public static void main(String[] args) {
    System.out.println("Ini do main");
    try{
        metodo1();
    } catch(ArithmeticException | NullPointerException ex) {
        String msg = ex.getMessage();
        System.out.println("Exception " + msg);
        ex.printStackTrace();
    } 
    System.out.println("Fim do main");
}

private static void metodo1() {
    System.out.println("Ini do metodo1");
    metodo2();
    System.out.println("Fim do metodo1");
}

private static void metodo2() {
    System.out.println("Ini do metodo 2");
    metodo2();    
    System.out.println("Fim do metodo 2");
}
1 resposta

Olá, Leonardo!

O erro StackOverFlowError ocorre quando um método chama a si mesmo diversas vezes, o que é conhecido como recursão, e acaba ocupando toda a memória HEAP. No caso do código que você postou, o método 2 está em um looping infinito, chamando a si mesmo diversas vezes, até que ocorra o erro.

Para evitar esse tipo de erro, é importante ter cuidado ao utilizar recursão em seus códigos e sempre definir uma condição de parada para que o looping não seja infinito.

Espero ter ajudado e bons estudos!