Previous Up Next

B.6  Quelques classes de bibliothèque

En général une bibliothèque (library) est un regroupement de code suffisamment structuré et documenté pour que d’autres programmeurs puissent s’en servir. La bibliothèque associée à un langage de programmation est diffusée avec le compilateur, système d’exécution etc. La majeure partie de des programmes disponibles dans la bibliothèque d’un langage est normalement écrite dans ce langage lui-même.

La première source de documentation des classes de la bibliothèque de Java est bien entendu la documentation en ligne de cette dernière, ou comme on dit la Application Programmer Interface Specification. Nous donnons donc des extraits de cette documentation assortis de quelques commentaires personnels. Cette section entend surtout vous aider à prendre la bonne habitude de consulter la documentation du langage que vous utilisez. En particulier, la version web du polycopié comporte des liens vers la documentation en ligne.

On objectera que la bibliothèque est énorme. Mais en pratique on s’y retrouve assez vite :

Il est vain d’objecter que la documentation est en anglais. C’est comme ça.

B.6.1  Package java.lang, bibliothèque « standard »

Ce package regroupe les fonctionnalités les plus basiques de la la bibliothèque. Il est importé par défaut (pas besoin de import java.lang.*).

B.6.1.1  Classes des scalaires

À chaque type scalaire (int, char etc.), correspond une classe (Integer, Character etc.) qui permet surtout de transformer les scalaires en objets. Une transformation que le compilateur sait automatiser (voir 2.2.3).

Prenons l’exemple de la classe Integer le pendant objet du type scalaire int. Deux méthodes permettent le passage d’un scalaire à un objet et réciproquement.

La classe Integer a bien d’autres méthodes, comme par exemple

B.6.1.2  Un peu de maths

Les fonctions mathématiques usuelles sont définies dans la classe Math. Il n’y a pas d’objets Math. Cette classe ne sert qu’à la structuration. Elle offre des méthodes (statiques).

B.6.1.3  Les chaînes

Les chaînes sont des objets de la classe String. Une chaîne est tout simplement une séquence finie de caractères. En Java les chaînes sont non-mutables : on ne peut pas changer les caractères d’une chaîne. Les chaînes sont des objets normaux, à un peu de syntaxe spécialisée près. Les constantes chaînes s’écrivent entre doubles quotes, par exemple "coucou". Si on veut mettre un double quote « " » dans une chaîne, il fait le citer en le précédant d’une barre oblique inverse (backslash). System.err.print("Je suis un double quote : \"") affiche Je suis un double quote : " sur la console. En outre, la concaténation de deux chaînes s1 et s2, s’écrit avec l’opérateur + comme s1+s2.

Les autres opérations classiques sur les chaînes sont des méthodes normales.

B.6.1.4  Les fabricants de chaînes

On ne peut pas changer une chaîne, par exemple changer un caractère individuellement. Or, on veut souvent construire une chaîne petit à petit, on peut le faire en utilisant la concaténation mais il y a alors un prix à payer, car une nouvelle chaîne est créée à chaque concaténation. En fait, lorsque l’on construit une chaîne de gauche vers la droite (pour affichage d’un tableau par ex.) on a besoin d’un autre type de structure de données : le StringBuilder (ou StringBuffer essentiellement équivalent). Un objet StringBuilder contient un tampon de caractère interne, qui peut changer de taille et dont les éléments peuvent être modifiés. Les membres les plus utiles de cette classe sont :

On trouvera un exemple d’utilisation classique d’un objet StringBuilder en 1.2.1 : une création, des tas de append(…), et un toString() final.

B.6.1.5  La classe System

Cette classe System est un peu fourre-tout. Elle posssède trois champs et quelques méthodes assez utiles.

B.6.2  Package java.io, entrées-sorties

Ce package regroupe s’attaque principalement à la communication avec le système de fichiers de la machine. Nous ne passons en revue ici que les flux de caractères, qui correspondent aux fichiers texte (voir B.5).

B.6.2.1  Classe des lecteurs

Les objets de la classe Reader sont des flux de caractères ouverts en lecture. Un tel flux est simplement une séquence de caractères que l’on lit les un après les autres, et qui finit par se terminer.

La classe Reader sert seulement à décrire une fonctionnalité et il n’existe pas à proprement parler d’objets de cette classe.

En revanche, il existe diverses sous-classes (voir B.2.3) de Reader qui permettent de construire concrètement des objets, qui peuvent se faire passer pour des Reader. Il s’agit par entre autres des classes StringReader (lecteur sur une chaîne), InputStreamReader (lecteur sur un flux d’octets) et FileReader (lecteur sur un fichier). On peut donc par exemple obtenir un Reader ouvert sur un fichier /usr/share/dict/french par

  Reader in = new FileReader ("/usr/share/dict/french") ;

et un Reader sur l’entrée standard par

  Reader in = new InputStreamReader (System.in) ;

B.6.2.2  Lecteur avec tampon

Un objet BufferedReader est d’abord un Reader qui groupe les appels au flux sous-jacent et stocke les caractères lus dans un tampon, afin d’améliorer les performances (voir B.5.4). Mais un BufferedReader offre quelques fonctionnalités en plus de celles des Reader.

B.6.3  Package java.util : trucs utiles

B.6.3.1  Les sources pseudo-aléatoires

Une source pseudo-aléatoire est une suite de nombres qui ont l’air d’être tirés au hasard. Ce qui veut dire que les nombres de la suite obéissent à des critères statistiques censés exprimer le hasard (et en particulier l’uniformité, mais aussi un aspect chaotique pas évident à spécifier précisément). Une fois la source construite (un objet de la classe Random), diverses méthodes permettent d’obtenir divers scalaires (int, double, etc.) que l’on peut considérer comme tirés au hasard. On a besoin de tels nombres « tirés au hasard » par exemple pour réaliser des simulations (voir 2.1.1) ou produire des exemples destiner à tester des programmes.


Previous Up Next