Вывод будет следующим : r1 r4 pre b1 b2 r3 r2 hawk , я понимаю что все что в блоке статик выводится раньше всех т.к выполняется во время загрузки класса , но не понимаю почему r3 выводится раньше чем r2.Почему так происходит ?
class Bird {
    {
        System.out.print("b1 ");
    }

    public Bird() {
        System.out.print("b2 ");
    }
}
class Raptor extends Bird {

    static {
        System.out.print("r1 ");
    }
    public Raptor() {
        System.out.print("r2 ");
    }

    {
        System.out.print("r3 ");
    }

    static {
        System.out.print("r4 ");
    }
}
class Solution extends Raptor {
    public static void main(String[] args) {
        System.out.print("pre ");
         new Solution();
        System.out.println("hawk ");
    }
}