Les packages JAVA
Introduction
Les packages permettent de structurer l'ensemble des classes ou interfaces. Les packages sont similaires aux bibliothèques du langage C/C++. Un package est une unité (un fichier) regroupant des classes.
Définition d'un package
Pour qu'une classe puisse se retrouver dans un package, il faut commencer
en indiquant dans le fichier source, contenant les classes à regrouper,
l'instruction package suivie du nom que l'on désire donner au package.
Ainsi, toutes les classes contenues dans le fichier feront partie du package...
Ex.:
package nomPackage;
package devra toujours
être la première ligne !
Unicité des noms
de package:
Pour éviter des problèmes sur les noms de package (écrasement, ...), il peut être intéressant d'utiliser un identifiant unique dans le nom.
Une solution toute simple pour trouver un identifiant unique, vous pouvez utiliser votre nom de domaine (mais inversé pour trier plus facilement). Par exemple supertos.free.fr donne fr.free.supertos
Le nom de mon package serait alors fr.free.supertos.nomPackage
L'organisation hiérarchique des packages
Un package est une archive de classes (ZIP). L'extension est .JAR.
Les packages sont organisés sous forme de hiérarchie:
java->lang->annotation->Annotation.class
Avec java, lang et annotation qui sont des répertoires et Annotation.class qui est le fichier compilé du source correspondant.
Cela implique que vous
retrouverez le source hors package dans la même arborescence que celle
définie dans le package !
Construire un package
Humour : le générateur de package est un outils très similaire à la commande Unix TAR d’où son nom JAR.
c pour créer, x pour extraire, t pour lister, v pour verbose donc bavard…
Pour construire un .jar :
jar cfv NomPack.jar Fichier.class
Pour lister le contenu d’un .jar :
jar tfv NomPack.jar
Pour extraire tous les fichiers d’un .jar
jar xfv NomPack.jar
A noter que le manifest sera aussi extrait (Manifest.mf contenant la description
d’un JAR)
Pour modifier/ajouter un fichier dans le .jar
jar ufv NomPack.jar Fichier.class
Evidemment, il s'agit de la solution basique. D'autres outils existent sous Eclipse ou net Beans...
Chemin de recherche des classes/packages
Par défaut, le compilateur et/ou la machine virtuelle recherchent les classes ou les packages à partir du répertoire courant et du répertoire associé aux classes standards.
Pour cela, ils utilisent une variable d'environnement nommée CLASSPATH que l'on pourra donc enrichir si nécessaire.
Utilisation/importation des packages
Pour utiliser un package, il faut utiliser la commande import
Par exemple:
import nomClasse; // Importer simplement une classe hors package
import nomPackage.nomClasse; // Importer une classe d'un package
import nomPackage.*; // Importer toutes les classes d'un package
import nomPackage.*
importe uniquement les classes directement accéssibles sous nomPackage,
en aucun cas celles qui se trouveraient sous un niveau inférieur. La
recherche se limite donc au répertoire indiqué.
Par exemple, si des classes existent sous nomPackage.grpClasse1, les classes présentent sous nomPackage.grpClasse1 ne seront pas reconnues avec import nomPackage.*;
Attention à
ne pas casser l'espace de nommage !
import xxx.A;
import aaa.A;
Ce n'est pas possible car new A() serait quoi ???
Par défaut, le
package java.lang est importé, il n'est donc pas nécessaire de
le déclarer dans vos fichier .java.