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");
}