Je viens de voir une chose qui me laisse perplexe...
Je vous laisse juger. Il doit y avoir quelque chose qui m'échappe.
extrait de la classe System :
Jusque là on est d'accord pour dire que quand la classe est chargée, System.out est à null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public final static PrintStream out = nullPrintStream(); (...) private static PrintStream nullPrintStream() throws NullPointerException { if (currentTimeMillis() > 0) return null; throw new NullPointerException(); }
La doc précise que out, in et err sont ensuite initialisés par une autre méthode (initializeSystemClass()), laquelle appelle des méthodes natives.
Seulement, là ou je ne comprends pas c'est que "out" est final et initialisé à null. Donc impossible a priori de lui affecter autre chose.
J'en conclu qu'il est possible par des méthodes natives de contourner le fait qu'on ne peut pas réaffecter une variable finale ?
En parcourant les spécifications, je ne vois rien de tel.
J'en viens à penser qu'une des bases de JAVA (la classe System) est faite de manière telle qu'elle ne respecte pas les spécifications.
Je dois me tromper mais je ne vois pas ou...
Partager