Packages Java : Gestion des espaces de noms, accès et organisation du code
Les packages Java servent à : éviter les conflits de noms, contrôler l'accès, faciliter la recherche/localisation des classes, interfaces, énumérations et annotations.
Un package regroupe des types liés (classes, interfaces, énumérations, annotations) en fournissant protection d'accès et gestion d'espace de noms.
Packages standards
java.lang: classes fondamentalesjava.io: entrées/sortiesjava.util: collections, utilitairesjava.net: réseau
Les programmeurs peuvent créer leurs propres packages pour regrouper leurs classes liées.
Créer un package
- Choisir un nom (convention : minuscules, ex:
com.monentreprise.projet) - Ajouter
package nomPackage;en première ligne de chaque fichier source - Un seul
packagepar fichier, s'applique à tous les types du fichier - Sans package → package par défaut (sans nom)
Compilation avec -d
javac -d DossierDestination fichier.java
Crée un dossier avec le nom du package dans la destination, y place les fichiers .class.
Exemple : package animals
/* Animal.java */
package animals;
interface Animal {
public void manger();
public void voyager();
}
/* MammifereImpl.java */
package animals;
public class MammifereImpl implements Animal {
public void manger() { System.out.println("Mammifère mange"); }
public void voyager() { System.out.println("Mammifère voyage"); }
public int nombrePattes() { return 0; }
public static void main(String args[]) {
MammifereImpl m = new MammifereImpl();
m.manger(); m.voyager();
}
}
Compilation
$ javac -d . Animal.java
$ javac -d . MammifereImpl.java
Crée le dossier animals/ avec les .class dedans.
Mot-clé import
Classes du même package : accès direct sans préfixe.
Classes de packages différents
Trois options :- Nom pleinement qualifié :
paquetage.Classe - Import avec wildcard :
import paquetage.*; - Import classe unique :
import paquetage.Classe;
Note : Les import viennent après package et avant la déclaration de classe.
Structure de répertoires des packages
Deux conséquences :
- Le nom du package fait partie du nom qualifié de la classe
- Le nom du package doit correspondre à la structure de répertoires du bytecode
Organisation recommandée
// Fichier source
// File Name : Car.java
package vehicle;
public class Car { }
// Arborescence source
....\vehicle\Car.java
// Nom qualifié → vehicle.Car
// Chemin → vehicle\Car.java (Windows)
Convention : nom de domaine inversé
Ex: domaine apple.com → packages com.apple.*
....\com\apple\computers\Dell.java
Compilation avec -d
$ javac -d . Dell.java
// Génère :
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
Import wildcard
import com.apple.computers.*;
Séparation sources / classes
\sources\com\apple\computers\Dell.java
\classes\com\apple\computers\Dell.class
Avantages : partager classes/ sans révéler sources/. Le compilateur et la JVM trouvent les .class via le classpath.
Variable d'environnement CLASSPATH
Chemin complet vers le dossier classes/. Le compilateur/JVM ajoutent le nom du package au classpath pour trouver les .class.
Exemple : classpath = /home/user/classes, package = com.apple.computers → recherche dans /home/user/classes/com/apple/computers.
Séparateurs : ; (Windows), : (Unix). Par défaut : répertoire courant + JAR plateforme Java.
Commandes CLASSPATH
| Action | Windows | Unix (Bourne) |
|---|---|---|
| Afficher | set CLASSPATH | echo $CLASSPATH |
| Vider | set CLASSPATH= | unset CLASSPATH; export CLASSPATH |
| Définir | set CLASSPATH=C:\users\jack\java\classes | CLASSPATH=/home/jack/java/classes; export CLASSPATH |
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression