Package java.lang
Publié le
La bibliotheque Java est vaste, tres vaste. Sans conteste cela lui procure une grande richesse puisque de ce fait il est possible de quasiment tout faire avec. Il devient cependant de plus en plus difficile de s’y retrouver a mesure que le langage evolue. Ces evolutions sont bien regulees par le Java Community Process mais n’empeche que les fonctionnalites sont toujours plus nombreuses!
Je vais tenter par une serie de plusieurs articles de parcourir quelques-uns des packages de Java afin de montrer les differentes classes disponibles. Bien sur ce ne sera qu’un survol mais toujours utile, que l’on decouvre le langage ou que l’on ait davantage l’habitude d’utiliser Java (enfin j’espere).
Pour bien commencer, prenons les choses par le debut: java.lang. Ce package est automatiquement importe lorsque l’on developpe en Java. Toutes les classes presentes dans ce package sont tres souvent utilisees dans les programmes et le compilateur nous facilite la vie en faisant lui-meme le lien lorsqu’il en rencontre une utilisation.
Wrapper types
On retrouve ainsi la definition des types de Java (Boolean, Byte, Character… et le venerable Object sans qui rien ne serait possible). On les nomme generalement _Wrapper types _pour faire ressortir que ce n’est que la correspondance des types natifs (ou primitifs) qui sont utilises lorsque l’on fait par exemple:
int theResponse = 42;
Lorsque l’on code sur Java a partir de la version 5, une fonctionnalite existante peut faire completement oublier ce concept: l’autoboxing. En effet, precedemment le code suivant ne compilait pas:
Integer laReponseATteVosQuestion = 42;
Threading
Tous les outils de concurrences ne se trouvent pas dans ce package. Cependant, le socle de base de la programmation multi-threading est integre dans java.lang. On y trouve la classe de base: java.lang.Thread mais aussi par exemple java.lang.ThreadLocal qui est utilisee afin d’implementer le pattern Thread Local Session.
On peut tres bien n’utiliser que la classe Thread pour les besoins concurrents. Nous verrons cependant lorsque nous aborderons le package java.util.concurrent qu’il existe plusieurs outils supplementaires qui facilitent la vie du developpeur lorsqu’il met le pied dans le monde du multi- threading.
Acces systeme
Enfin, plusieurs classes de ce package permettent de faire appel au systeme sur lequel tourne Java.
La classe System contient uniquement des membres statiques permettant par exemple de recuperer le flux de sortie de Java (le flux utilise pour afficher des donnees a l’ecran, la console), le temps actuel en millisecondes ou en nanosecondes, recuperer une variable d’environnement, enregistrer une propriete systeme, charger une classe ou une librairie dynamiquement ou encore enregistrer un SecurityManager personnalise.
La classe Runtime est elle davantage liee au “systeme” de Java. Il est ainsi possible de l’utiliser afin de recuperer la memoire disponible dans la machine virtuelle, lancer le Garbage Collector (aussi possible depuis la classe System qui fait en fait une redirection sur la classe Runtime) et enfin avant de mentionner la derniere classe, Runtime permet d’executer un nouveau processus systeme…
La classe Process liee donc a Runtime mais aussi a ProcessBuilder represente un processus natif. Une utilisation de ce genre de classe peut bien evidemment limiter la portabilite de l’application; il faut par consequent bien reflechir quant a son utilisation.
Par exemple, pour une application graphique permettant d’executer des imports de donnees sur une base Oracle il existe l’outil bien connu Sql Loader qui permet de charger les donner en ligne de commande. Il sera possible d’appeler directement depuis le code Java l’executable d’Oracle de cette maniere:
Process p = new ProcessBuilder("sqlldr",
"userid=root control=control.ctl").start();
Ensuite les flux de sortie, d’entree et d’erreur sont disponibles et doivent etre recuperes afin de pouvoir communiquer avec le processus lance.
Autour de tout cela je n’ai pas pris le temps de parler de l’ensemble d’exceptions et d’erreurs se trouvant dans le package mais comme je l’ai dit dans l’introduction, ce n’est et ne sera qu’un aperçu!
Ajouter un commentaire