Добрый день. Объясните, пожалуйста, почему вот это решение правильное, а если переменную step сделать нестатичной, то программа уходит в бесконечный цикл? Я полагаю причина этого в том, что в первом случае step одна на весь класс и ее значение увеличивается и достигнув значения 2, программа завершается, а если она нестатична, то при создании нового объекта в методе method2, присваивается собственный экземпляр step, который равен нулю, и соответственно данная переменная никогда не достигает значения 2. Это правильно?
public class Solution {
    public static int step;

    public static void main(String[] args) {
        method1();
    }

    public static void method1() {
        method2();
    }

    public static void method2() {
        new Solution().method3();
    }

    public void method3() {
        method4();
    }

    public void method4() {
        step++;
        for (StackTraceElement element : Thread.currentThread().getStackTrace())
            System.out.println(element);
        if (step > 1)
            return;
        main(null);
    }
}