Maison  >  Article  >  Java  >  L'ordre dans lequel les objets Java sont initialisés

L'ordre dans lequel les objets Java sont initialisés

巴扎黑
巴扎黑original
2017-07-23 13:46:401586parcourir

1. Plusieurs parties impliquées dans l'initialisation

Lors de l'initialisation, l'objet Java appelle non seulement son propre constructeur, mais implique également des blocs d'instructions statiques , bloc d'instructions d'instance, initialisation de variable statique, initialisation de variable membre et autres problèmes d'exécution La séquence d'initialisation fait référence à la séquence d'exécution de ces cinq parties.

2.Démo

package com.javase.classtest;public class InitializationSequence {static {
        System.out.println("静态语句块");
    }static MyInnerClass in = new MyInnerClass("静态变量s");

    MyInnerClass in01 = new MyInnerClass("a");

    {
        System.out.println("实例语句块");
    }

    MyInnerClass in02 = new MyInnerClass("b");public InitializationSequence() {
        System.out.println("构造函数");
    }

    @SuppressWarnings("unused")public static void main(String[] args) {
        InitializationSequence obj01 = new InitializationSequence();
        System.out.println("-----------------------------------");
        InitializationSequence obj02 = new InitializationSequence();
    }

}class MyInnerClass {public MyInnerClass(String description) {
        System.out.println("成员变量初始化::" + description);
    }
}

Résultat de l'exécution :

Analyse :

  1. Bloc d'instructions statique : exécuté lorsque la classe est chargée dans la JVM, car la prémisse de la JVM l'utilisation de la classe est la classe chargée dans la machine virtuelle JVM, donc le bloc d'instructions statiques est exécuté en premier, la classe n'est chargée qu'une seule fois et le bloc d'instructions statiques n'est exécuté qu'une seule fois.

  2. Initialisation des variables statiques : Puisque les variables statiques sont partagées par toutes les instances de la classe et ne dépendent pas d'objets spécifiques, elles ne sont pas initialisées lors de la création de l'objet , mais initialisée lorsque la classe est chargée, la séquence d'initialisation se situe après le bloc d'instructions statique et n'est exécutée qu'une seule fois.

  3. Bloc d'instructions d'instance : exécuté avant la méthode constructeur, exécuté une fois à chaque appel de la méthode constructeur. L'ordre d'exécution est après l'initialisation de la variable statique, avec l'initialisation de la variable membre comme référence. Il n'y a pas d'ordre absolu. L'ordre réel dépend de l'ordre de définition. S'il est défini en premier, il sera exécuté avant la variable membre. est initialisé ; s’il est défini ultérieurement, il sera exécuté après l’initialisation ultérieure de la variable membre.

  4. Initialisation de la variable membre : exécutée avant le constructeur, et exécutée une fois à chaque appel du constructeur. Ordre d'exécution Après initialisation des variables statiques, l'ordre d'exécution relatif aux blocs d'instructions d'instance dépend de l'ordre de définition.

  5. Méthode de construction : exécutée en dernier.

En résumé, , l'ordre d'exécution de l'initialisation de l'objet Java est : bloc d'instructions statiques> initialisation de variable statique> bloc d'instructions d'instance/initialisation de variable membre > ;L'ordre d'exécution relatif des constructeurs, des blocs d'instructions d'instance et de l'initialisation des variables membres dépend de l'ordre de définition.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn