|
Notes sur les packages
On peut faire l'analogie (limitee) entre les fichiers "objet" (".obj" sous MS-DOS ou ".o"
sous UNIX) du C avec les fichiers ".class" de JAVA.
Un fichier ".class" contient les informations sur une classe. Considerons
le programme suivant:
Fichier prim.java |
public class prim
{
public static void main (String[] argv)
{
Test test = new Test();
test.Afficher_Valeur();
}
}
class Test
{
int i;
void Afficher_Valeur()
{
System.out.println(i);
}
}
|
Apres "compilation" a l'aide de la ligne de commande suivante:
javac prim.java
Nous obtenons deux fichiers ".class":
- le fichier "prim.class"
- le fichier "test.class"
Ces deux fichiers se trouvent dans le meme repertoire (le repertoire courant). Pour
executer le programme on tape:
java prim.class
Peut etre vous posez vous la question suivante: peut on compiler separement les deux classes ?
Pour repondre a cette question, considerons les deux fichiers suivants:
Fichier prim.java |
public class prim
{
public static void main (String[] argv)
{
Test test = new Test();
test.Afficher_Valeur();
}
} |
Fichier test.java |
class Test
{
int i;
void Afficher_Valeur()
{
System.out.println(i);
}
} |
Si vous compilez les classes comme suit:
javac prim.java
La compilation et l'execution se deroulent sans erreur.
ATTENTION ! La variable d'environnement CLASSPATH
joue un role tres important dans la recherche des fichiers ".class".
Pour affecter une valeur a la variable d'environnement CLASSPATH, taper:
- Sous DOS: CLASSPATH=.;c:\mon_repertoire_1\...;c:\mon_repertoire_2\...
- Sous UNIX: setenv CLASSPATH=.:/mon_repertoire_1/...:/mon_repertoire_2/...
note: le caratere "." signifie "le repertoire courant".
Ou placer les classes compilees ?
Deux choix sont possibles:
- dans le(s) repertoire(s) determine(s) par CLASSPATH
- dans un package.
La premiere possibilite a deja ete evoquee precedemment. Les "packages" sont un
peu l'equivalent des librairies du C: c'est une collection de classes. Ces classes
sont regroupees dans un repertoire. Le nom du repertoire "reflete" le nom du package.
Creation d'un package
Considerons les trois fichiers suivants:
Fichier P_Class_1.java |
package denis.pack;
public class P_Class_1
{
int i;
public P_Class_1(int val)
{
i=val;
System.out.println("\nClasse P_Class_1 cree\n");
};
}
|
Fichier P_Class_2.java |
package denis.pack;
public class P_Class_2
{
int i;
public P_Class_2(int val)
{
i=val;
System.out.println("\nClasse P_Class_2 cree\n");
};
}
|
Fichier ttest.java |
public class ttest
{
public static void main(String[] argv)
{
new denis.pack.P_Class_1(11);
new denis.pack.P_Class_2(22);
System.out.println("ok");
}
}
|
Les fichiers P_Class_1.java et P_Class_2.java definissent deux classent
(ie: les classes P_Class_1 et P_Class_2). Ces deux classes sont declarees comme faisant
partie du package denis.pack.
Pour creer le package denis.pack vous devez:
- Compiler les classes P_Class_1 et P_Class_2.
- Creer un repretoire "denis.pack"
- Placer les fichiers P_Class_1.class et P_Class_2.class dans le repertoire "denis.pack".
etape 1: Compiler P_Class_1 et P_Class_2 |
javac P_Class_1.java
javac P_Class_2.java |
etape 2: Creation du repertoire "denis.pack" |
Ou creer le repertoire denis ? Le choix de l'emplacement de ce repertoire
depend de la variable d'environnement CLASSPATH. Cette variable determine
le(s) chemin(s) de recherche des packages.
Si CLASSPATH=.;c:\programmes\java vous pouvez creer le repertoire denis
soit dans le repertoire courant, soit dans le repertoire c:\programmes\java. |
etape 3: deplacer les fichiers P_Class_1.class et P_Class_2.class |
Rien a dire
|
Remarques: il ne doit y avoir au plus qu'une
classe declaree public dans un fichier commencant par l'instruction package.
D'autre part le nom du fichier source doit dorrespondre à celui de la classe declaree public.
Seule la classe declaree public
|