Как указали другие, вызывается блок init экземпляра, но он не влияет на вывод вашего оператора System.out.println
, потому что он вызывается вместе с вызовом экземпляра вашего класса: Main m = new Main();
Одна вещь, которую вы могли бы сделать при попытке отладки этих случаев, - сбросить стек потоков в точке вызова:
static void go() {
new Exception().printStackTrace(System.out);
s += "s";
}
Это позволит вам видеть, сколько раз вызывается метод go
, и, используя тот же поток печати, что и ваш println
в вашем методе main
, вы можете видеть стеки относительно вывода вашего s
вар.
В моей версии результат выглядит так:
java.lang.Exception
at Main.go(Main.java:29)
at Main.<clinit>(Main.java:25)
java.lang.Exception
at Main.go(Main.java:29)
at Main.main(Main.java:14)
-ss
java.lang.Exception
at Main.go(Main.java:29)
at Main.<init>(Main.java:21)
at Main.main(Main.java:17)