Code d’initialisation en Java

Coding
Coding (Photo credit: Omer van Kloeten)

La lecture du tutoriel Java mérite que l’on s’y attarde, que ce soit pour le débutant ou bien pour celui qui vise l’excellence. Certains aspects du langage fort intéressants y sont bien expliqués, comme le code d’initialisation. On le trouve il est vrai rarement dans le code d’application métier mais plutôt dans le code de framework ou d’application standalone qui doivent initialiser de la « plomberie » comme une connexion de base de donnée ou l’activation d’un service de nommage. Mais il parait qu’il n’y a rien de tel que la lecture du code d’un bon framework pour apprendre à faire du bon code alors attardons nous sur les mécanisme offert pas le langage en matière d’initialisation.

Dans le tutoriel on distingue 3 types de code d’initialisation:

  • le code d’initialisation static
  • le code d’initialisation d’instance
  • le code d’initialisation de variable

L’initialisation statique pourra être utilisée pour s’occuper de choses globales à l’application et l’initialisation d’instance pour des aspect liée à l’instance comme par exemple pour faire un suivi des instances en utilisant une référence faible (weak reference). Le tutoriel présente une exemple de code d’initialisation de variable par une méthode final arguant que le contraire peu poser des problèmes. Peut-être… Un petit bout de code permet de voir comment tout cela s’articule.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package initinstancemenber;

/**
 *
 * @author thierry
 */
public class InitInstanceMenber {

    private int i = initMyIMember();

    {
        System.out.println("instance init code");
    }

    static {
        System.out.println("class init code");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        InitInstanceMenber a = new InitInstanceMenber();
        System.out.println("i=" + a.i);
        a= new InitInstanceMenber(){
            @Override
            protected int initMyIMember(){
                System.out.println("overriden init member");
                return 1;
            }
        };
        System.out.println("i=" + a.i);
    }

    protected int initMyIMember(){
        System.out.println("init member");
        return 0;
    }
}

Dont voici l’exécution:

run:
class init code
init member
instance init code
i=0
overriden init member
instance init code
i=1
BUILD SUCCESSFUL (total time: 0 seconds)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.