Un article dans JLS peut être trouvé: §12.4.2.
Détaillée De La Procédure D'Initialisation:
9.Ensuite, exécutez l'une des commandes de la variable de classe initialiseurs statiques et les initialiseurs de la classe, ou le domaine des initialiseurs de l'interface,
dans l'ordre textuel, comme s'ils étaient un seul et unique bloc, sauf que
finale de variables de classe et des champs des interfaces dont les valeurs sont
des constantes de compilation sont initialisés première
Ainsi, les trois statique de la variable sera initialisée un par un dans l'ordre textuel.
Donc
static A obj = new A();
//num1 = 1, num2 = 1;
static int num1;
//this is initilized first, see below.
static int num2=0;
//num1 = 1, num2 = 0;
Si je change l'ordre de:
static int num1;
static int num2=0;
static A obj = new A();
Le résultat sera 1,1
.
Notez que l' static int num1;
n'est pas une variable d'initialiseur parce que(§8.3.2):
Si un champ de demande de déclaration contient une variable d'initialiseur, puis il a l'
la sémantique d'une cession (§15.26) à la variable déclarée, et: Si
la déclaration est une variable de classe (qui est, d'un champ statique), puis
la variable d'initialiseur est évaluée et la cession effectuée
exactement une fois, lorsque la classe est initialisée
Et cette variable de classe est initialisée lorsque la classe est créée. Ce qui se passe en premier(§4.12.5).
Chaque variable dans un programme doit avoir une valeur pour sa valeur est
utilisé: Chaque variable de classe, variable d'instance, ou de composants de la matrice est
initialisé avec une valeur par défaut lors de la création (§15.9, §15.10):
Pour le type d'octets, la valeur par défaut est zéro, c'est la valeur de
(byte)0. Pour le type court, la valeur par défaut est zéro, c'est la valeur
de la (courte)0. Pour le type int, la valeur par défaut est zéro, c'est 0. Pour
de type long, la valeur par défaut est zéro, qui est, 0L. Pour le type float, l'
par défaut la valeur est positive, zéro, qui est, 0.0 f. Pour le type double, le
par défaut la valeur est positive, zéro, qui est, 0.0 d. Pour le type char, le
la valeur par défaut est le caractère nul, c'est-à, '\u0000'. Pour le type
booléen, la valeur par défaut est false. Pour tous les types de référence (§4.3),
la valeur par défaut est null.