Depuis que j'ai commencé à étudier la programmation, j'ai eu la chance d'avoir rencontré des profs particulièrement intéréssants. On peut enseigner la programmation en ne s'occupant pas trop de certaines spécifités des langages, parce qu'elles sont trop complexes ou pas assez utiles. Ma chance a été d'avoir des profs qui m'ont donné l'envie de découvrir ces particularités.
C'est la raison de cette note. Je pars du principe que les non-développeurs ont lâché la lecture et que ceux qui restent maîtrisent suffisament les concepts objets et les langages Java et C#.
Les deux questions que je me suis posé avant de faire cet article sont :
Première question : lors de la construction dynamique d'une classe, qui du bloc static ou de l'initialisation des champs de classe est effectué le premier?
Seconde question : une fois cet ordre déterminé, quels résultats vais-je obtenir avec des blocs en lecture seule (readonly en C# et final en Java) initialisés et redéclarés dans le bloc static?
J'ai donc conçu une application dans chacun des deux langages pour tenter d'obtenir une réponse et pour comparer les résultats entre les deux univers. Les codes-sources sont disponibles ici, à vous de faire les tests.
Résultats obtenus avec Eclipse et Java 1.6 pour Java et Visual Studio et .Net 3.5 pour C#.
A la première question, la réponse est la même pour les deux : la déclaration du champs et son initialisation est faite avant l'exécution du bloc static. C'est assez logique, mais il me semble avoir vu un exemple où l'inverse se produisait en Java. Note pour plus tard : faire le test en Delphi et PHP.
A la seconde question, je m'attendais à une erreur d'exécution, une belle exception, et j'ai eu deux choses différentes.
Pour Java, c'est l'erreur de compilation. C'est bien foutu, on ne peut faire qu'une seule initialisation.
Pour C#, les deux initialisations sont acceptées et c'est la dernière qui prime, du coup on se retrouve avec un champ readonly qui peut prendre plusieurs valeurs.
C'est bon j'ai mes réponses.
Un jour férié, de la patience et des idées, et voilà j'ai remis d'aplomb mon site web.