Maison  >  Article  >  Java  >  Introduction détaillée au bloc d'initialisation d'instance (IIB) en Java (exemple de code)

Introduction détaillée au bloc d'initialisation d'instance (IIB) en Java (exemple de code)

不言
不言avant
2018-10-15 15:41:062205parcourir

Cet article vous apporte une introduction détaillée (exemple de code) sur le bloc d'initialisation d'instance (IIB) en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Bloc d'initialisation de classe en langage Java Dans cet article, nous avons brièvement présenté le bloc d'initialisation d'instance (IIB) en Java. Cependant, je pense que l'introduction est un peu simple, j'écrirai donc un autre article pour la présenter en détail.

Dans le langage Java, il existe trois opérations : les méthodes, les constructeurs et les blocs d'initialisation.

Le bloc d'initialisation est divisé en bloc d'initialisation d'instance (IIB) et en bloc d'initialisation statique. Dans ce chapitre, nous introduisons principalement le bloc d'initialisation d'instance.

Le bloc d'initialisation d'instance est utilisé pour initialiser les variables d'instance.

Le bloc d'initialisation d'instance sera exécuté lors de l'initialisation d'une instance de la classe, et sera exécuté avant le constructeur. Et ils sont exécutés à chaque fois qu’un objet de la classe est créé.

Syntaxe du bloc d'instanciation

Le bloc d'initialisation d'instance est généralement placé avant le constructeur, en utilisant des accolades {} pour développer le code. La structure syntaxique est généralement la suivante

class JavaTester 
{ 
    // 实例化块 
    {  
        System.out.println("IIB block"); 
    } 
     
    // 构造函数
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Notez que les blocs d'instanciation ne sont pas requis pour les classes. Juste une option. Il permet d'extraire la partie publique du constructeur et de l'exécuter séparément.

Ce code peut être compilé et exécuté, et les résultats sont les suivants

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB block
Constructor Called

Une classe contient plusieurs blocs d'initialisation d'instance

Dans un class Le bloc d'initialisation d'instance n'est pas requis pour la classe et il n'y a pas de limite au nombre. Une classe peut n'avoir aucun bloc d'initialisation d'instance ou plusieurs blocs d'initialisation d'instance.

Si une classe possède plusieurs blocs d'initialisation d'instance, ils seront exécutés dans l'ordre de haut en bas, c'est-à-dire que le bloc d'initialisation d'instance défini en haut de la classe est exécuté en premier.

Regardons un morceau de code. La classe suivante JavaTester définit plusieurs blocs d'initialisation d'instance.

class JavaTester 
{ 
    {  
        System.out.println("IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
      
    { 
        System.out.println("IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Exécutez le code ci-dessus, le résultat est le suivant

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB1 block 1 
IIB2 block 2
IIB3 block 3
Constructor Called

Bloc d'initialisation dans la classe parent

Héritage en langage Java Dans le système, les classes parentes peuvent également avoir des blocs d'initialisation, et leur nombre n'est pas limité.

Le bloc d'initialisation de l'instance de la classe parent s'exécute immédiatement après l'appel de super() dans le constructeur de la classe enfant. Le compilateur exécutera le bloc d'initialisation d'instance de la classe parent avant d'exécuter le bloc d'initialisation d'instance de la classe actuelle.

N'est-ce pas déroutant ? Écrivons un morceau de code pour le démontrer

class B 
{ 
    B() 
    { 
        System.out.println("B-Constructor Called"); 
    } 
  
    { 
        System.out.println("B-IIB block"); 
    } 
  
}

public class JavaTester extends B 
{ 
    {  
        System.out.println("JavaTester IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("JavaTester IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        super(); 
        System.out.println("JavaTester-Constructor Called");
    } 
      
    { 
        System.out.println("JavaTester IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

Exécutez l'exemple ci-dessus et le résultat est le suivant

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
B-IIB block
B-Constructor Called
JavaTester IIB1 block 1 
JavaTester IIB2 block 2
JavaTester IIB3 block 3
JavaTester-Constructor Called

A partir des résultats d'exécution, lors de la création d'un objet de classe JavaTester, le compilateur tente d'exécuter le constructeur de classe JavaTester. Mais comme il a une classe parent, après avoir découvert l'instruction super(), il passe d'abord à l'exécution du constructeur de la classe parent.

Par conséquent, dans le système d'héritage, l'ordre d'exécution des blocs d'initialisation d'instance et des constructeurs est le suivant

  1. Exécuter le bloc d'initialisation d'instance de la classe parent

  2. Exécuter le constructeur de la classe parent

  3. Exécuter le bloc d'initialisation d'instance de la classe actuelle

  4. Exécuter le constructeur de la classe actuelle

Les principaux points du bloc d'initialisation d'instance

Revoyons les principaux points du bloc d'initialisation d'instance.

  • Les blocs d'initialisation d'instance sont exécutés à chaque fois qu'une nouvelle instance est créée

  • Les blocs d'initialisation sont exécutés dans l'ordre dans lequel ils apparaissent dans la classe

  • S'il existe une classe parent, la classe parent sera d'abord instanciée, puis le bloc d'initialisation d'instance de la classe actuelle sera appelé, et enfin le constructeur de la classe actuelle sera appelé.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer