As the others have pointed out, the instance init block is called, but it doesnt affect the output of your System.out.println statement, because it is called in conjunction with the invocation of the instance of your class: Main m = new Main();
One thing you could do when trying to debug these cases is to dump a thread stack at the invocation point:
static void go() {
new Exception().printStackTrace(System.out);
s += "s";
}
This will allow you to see all the times that the go method is called, and by using the same print stream as your println in your main method, you can see the stacks in relation to the output of your s var.
In my version, the result looks like this:
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)