Comme les autres l'ont souligné, le bloc d'initialisation instance est appelée, mais il ne marche pas affecter la sortie de votre déclaration System.out.println
, car il est appelé en conjonction avec l'invocation de l'instance de votre classe: Main m = new Main();
une chose que vous pouvez faire lorsque vous essayez de déboguer ces cas est de vider une pile de fil au point d'invocation:
static void go() {
new Exception().printStackTrace(System.out);
s += "s";
}
Cela vous permettra de voir toutes les fois que la méthode go
est appelée, et en utilisant le même flux d'impression que votre println
dans votre 012 Méthode, vous pouvez voir les piles par rapport à la sortie de votre s
var.
Dans ma version, le résultat ressemble à ceci:
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)
Si vous allez tous dire la même chose, votez pour la personne qui l'a dit en premier, puis ajoutez simplement un commentaire. Ajouter un autre "System.out.println (s);" à la toute fin de votre bloc "principal" et vous verrez "-sss" comme sortie. –