Java ordre de l'Initialisation et de l'Instanciation

Je suis en train d'essayer de reconstituer le processus d'Initialisation et d'Instanciation dans la JVM, mais le JLS est un peu obtus sur quelques détails, donc si quelqu'un aurait l'esprit de compensation de certains détails, il serait apprécié. C'est ce que j'ai pu découvrir jusqu'à présent.

Initialisation

  1. De manière récursive Initialiser static final variables de la classe et des interfaces de compiler les constantes de temps.

  2. Retour de la récurrence de traitement des blocs statiques et les champs statiques dans l'ordre textuel.

Instanciation

  1. De manière récursive Initialiser final variables d'instance de la classe qui sont à la compilation des constantes de temps.

  2. Retour de la récurrence de traitement des non-blocs statiques et les champs d'instance dans l'ordre textuel ajoutant à l'constructeurs de retour.


Bon, maintenant pour les questions.

  1. interfaces sont traitées dans l'ordre de déclaration?

  2. interfaces sont traitées dans une autre pile récursive?

    a) si oui, avez-interfaces être traités avant ou après le super-classes?

    b) si oui, suis-je correct en déduire que l'un ou l'autres (Interface ou de la super-classe) obtient sa non-constante à la compilation des champs initialisés avant les autres constantes de compilation.

  3. Quel est le rôle d'appels de l'autre constructeur super() jouer dans ce processus?

  4. Suis-je trompé dans mes conclusions?

  5. Me manque tout les autres détails de la clé?

  • Les Interfaces n'ont rien à initialiser. Sauf si vous êtes en utilisant le mot dans un autre mode que je suis habitué.
  • Les Interfaces peuvent avoir public static final champs. Si ces champs sont des objets avec un initialiseur (par exemple public static final ArrayList<String> someStrings = new ArrayList<>();) alors que ce serait une partie de l'initialisation.
InformationsquelleAutor user3056052 | 2014-04-15