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)Tags: Java