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)

Cet article, publié dans Langage, est tagué . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s