next up previous contents index
suivant: 3.9 Un exemple monter: 3. Classes d'objets précédent: 3.7 Classes enveloppantes des   Table des matières   Index


3.8 La fonction main et la ligne de commande

Une application est formée d'un ensemble de types, dont au moins une classe contenant une définition de fonction principale, de nom main. L'exécution de l'application commence par cette fonction ; c'est elle qui invoquera éventuellement les autres fonctions. Sa définition minimale est la suivante :

   public static void main(String[] args) {}

La fonction main peut accéder à la ligne de commande passée à l'interprète de commandes pour exécuter l'application. Cette ligne de commande a pour objet de démarrer une Machine Virtuelle Java, de désigner la classe principale et de spécifier la valeur d'un certain nombre de paramètres de l'application. Ces paramètres sont représentés par un tableau de chaînes de caractères, conventionnellement appelé args, qui est l'unique paramètre de la fonction main. Lors de l'invocation main, les éléments de ce tableau, args[0], ..., args[args.length-1], sont initialisés par les chaînes de caractères (mots séparés par des espaces) figurant sur la ligne de commande après la classe principale3.2 Par exemple, l'application (traditionnellement appelé echo) qui recopie sur la sortie standard les arguments passés sur sa ligne de commande peut être programmée ainsi :

class Echo {
  public static void main(String[] args) {
    for (int i=0; i<args.length; i++) {
      System.out.print(args[i] + " ");
    }
    System.out.println();
  }
}

Après avoir compilé cette classe, l'exécution de la commande

linux% java Echo un deux trois

provoque l'invocation de la la fonction main de la classe Echo, et l'initialisation de son paramètre args au tableau { "un", "deux", "trois" }, puis produit sur la sortie standard (l'écran) :

un deux trois

Il est souvent nécessaire de convertir les args[$i$], qui sont toujours de type String, en d'autres types de données. Integer.parseInt(s) permet de convertir l'argument s, une chaîne qui est la notation d'un entier, en cet entier. Par exemple, une application qui additionne des entiers spécifiés sur sa ligne de commande peut s'écrire la façon suivante.

class Add {
  public static void main(String[] args) {
    int somme = 0;
    for (int i=0; i < args.length ; i++) {
      somme = somme + Integer.parseInt(args[i]);
    }
    System.out.println(somme);
  }
}

On pourra exécuter

linux% java Add 12 23 34

et obtenir 69 comme réponse.


La méthode main étant statique, elle ne peut accéder aux membres des instances de sa classe. C'est pourquoi, la classe principale se trouve souvent être instanciée dans la méthode main, dans l'unique but de pouvoir accéder aux membres non-statiques de la classe :

class Principale {
  void méthode() { ... }
  public static void main(String[] args) {
    Principale p = new Principale();

    p.méthode();
  }
}

L'autre solution est de ne définir dans la classe principale que des membres statiques, quand cela est possible :

class Principale {
  static void méthode() { ... }
  public static void main(String[] args) {

    méthode();
  }
}


next up previous contents index
suivant: 3.9 Un exemple monter: 3. Classes d'objets précédent: 3.7 Classes enveloppantes des   Table des matières   Index
Rene' LALEMENT 2001-11-07