Notes sur les packages



Les fichiers "class"

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".

Les packages

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