J'étudie des initialiseurs statiques en Java. Je suis venu à travers un code source donnée ci-dessous:Pourquoi l'initialiseur statique permet la ré-initialisation de la variable statique en Java?
public class A {
private static int count = 5;
final static int STEP = 10;
boolean alive;
static {
count = 1;
}
public static void main(String[] args) {
A a = new A();
System.out.println(A.count);
}
}
Ma question est que pourquoi le compilateur ne se plaint pas de la count
variable étant réaffecté la valeur 1
dans count = 1
dans le bloc statique d'initialisation. Je sais que Java permet le référencement en avant tant que déclaration, avant lecture règle (ie un identifiant ne doit pas être lu avant la déclaration) est suivie qui est pour tous les initialiseurs et sinon, la référence (ou identifiant) doit venir sur la côté gauche de l'assignation. Je sais également que si plusieurs expressions d'initialisation statiques et blocs d'initialisation de champ statique sont écrits dans une classe, leur ordre d'exécution est séquentiel. Selon moi, le flux d'exécution doit être: La classe est chargée, puis tous les initialiseurs statiques (expressions et blocs) sont exécutés en séquence, en raison de laquelle le count
sera initialisé pour la valeur 5
, puis le constructeur par défaut sera exécuté en appelant le super() et en initialisant la variable d'instance alive
à la valeur par défaut. Mais pourquoi il ne jette une erreur variable statique count
a été ré-initialisé (comme il est pas le cas de référence vers l'avant), au contraire, il donne la sortie 1
. Cela signifie-t-il que nous pouvons réinitialiser des variables statiques via des blocs d'initialisation statiques? S'il vous plaît aider. Merci d'avance! :)
Pourquoi pas? Il ISN "t final: vous pouvez l'affecter autant de fois que vous le souhaitez – EJP
Vous n'êtes pas la variable Ré-initialisation, vous réassignez la variable –