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;

Attention package devra toujours être la première ligne !

NoteUnicité 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.

NoteCela 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

Attentionimport 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.*;

AttentionAttention à ne pas casser l'espace de nommage !

import xxx.A;

import aaa.A;

Ce n'est pas possible car new A() serait quoi ???

 

NotePar défaut, le package java.lang est importé, il n'est donc pas nécessaire de le déclarer dans vos fichier .java.