87 votes

En quoi un initialisateur d'instance est-il différent d'un constructeur ?

En d'autres termes, pourquoi auriez-vous besoin d'un initialisateur d'instance ? Quelle différence ou quel avantage y a-t-il à écrire un initialisateur d'instance plutôt qu'un constructeur ?

2 votes

Les initialisateurs d'instance sont assez rares (sauf si vous tombez sur le code de quelqu'un qui aime l'idiome de la double accolade).

1voto

NPE Points 185

Au moment de la création de l'objet, si nous voulons effectuer l'initialisation des variables d'instance, nous devons utiliser le Constructor. En dehors de l'activité d'initialisation, si nous voulons effectuer une activité quelconque au moment de la création de l'objet, nous devons utiliser le bloc d'instance.

Nous ne pouvons pas remplacer le constructeur par un bloc d'instance car le constructeur peut prendre un argument mais le bloc d'instance ne peut pas en prendre.

Nous ne pouvons pas remplacer le bloc d'instance par le constructeur car une classe peut contenir plus d'un constructeur. Si nous voulons remplacer le bloc d'instance par le constructeur, nous devons écrire le code du bloc d'instance dans chaque constructeur, car nous ne pouvons pas prévoir à l'exécution quel constructeur sera appelé, ce qui augmentera inutilement la duplication du code.

Exemple :

class MyClass{

    static int object_count = 0;

    MyClass(){
        object_count++;
    }

    MyClass(int i){

        object_count++;
    }

    void getCount() {

        System.out.println(object_count);
    }

    public static void main(String... args) {
        MyClass one = new MyClass();
        MyClass two = new MyClass(2);
        two.getCount();
    }
}

Sortie : 2

class MyClass{

    static int object_count = 0;

    {
        object_count++;
    }

    MyClass(){

    }

    MyClass(int i){     

    }

    void getCount() {

        System.out.println(object_count);
    }

    public static void main(String... args) {
        MyClass one = new MyClass();
        MyClass two = new MyClass(2);
        two.getCount();
    }
}

Sortie : 2

0voto

dnyanesh Points 81

L'initialisateur est un moyen de partager le code entre les constructeurs et il rend le code plus lisible si l'initialisateur est utilisé avec la déclaration de variable.

Le compilateur Java copie les blocs d'initialisation dans chaque constructeur. Par conséquent, cette approche peut être utilisée pour partager un bloc de code entre plusieurs constructeurs. Documentation Oracle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X