String
StringBuffer
et
StringBuilder
PATH
, sous Unix, Linux ou Windows.
Un programme Java est tout d’abord écrit sous forme de code source dans un ou plusieurs fichiers de type texte. Par convention, ces fichiers portent l’extension
.java
. Nous verrons dans la suite qu'il existe au moins deux autres types de contraintes sur le nommage de ces fichiers, ainsi que la façon dont on les range dans des répertoires.
Pour pouvoir être exécutés, ces fichiers doivent être compilés, ensemble ou séparément. Ce que l'on entend par "compilation" en Java n'est pas tout à fait la même chose que dans un langage tel que le C ou le C++. Dans ces langages, le code compilé est un code binaire, directement exécutable sur un microprocesseur, et donc dépendant de lui et de l'OS sur lequel il est appelé à fonctionner. En Java, le "code compilé" est en fait un "byte-code", code binaire exécuté dans une machine virtuelle, indépendant de l'ordinateur sur lequel il va fonctionner, et de son OS. Le compilateur est une application fournie avec le JDK, qui s’appelle
javac
. La commande de base pour compiler le fichier
application.java
est donc :
$ javac application.javaAvant de tenter de compiler des programmes Java, il faut donc s’assurer que l’on a bien accès à l’application javac , au moins depuis son répertoire de travail. S’il ne donne pas de messages d’erreur, javac produit alors un fichier au même endroit que
application.java
:
application.class
. C’est ce fichier qui contient le code qui va être exécuté dans la machine virtuelle Java. Ce fichier est au format binaire. Nous reverrons dans la suite que, quelle que soit la machine sur laquelle on travaille, le contenu binaire de ce fichier ne varie pas. Il ne s'agit pas d'un exécutable à proprement parler, au sens où on l'entend en C ou en C++, mais plutôt d'un code binaire, appelé "byte code", indépendant de la machine sur laquelle ce pseudo-exécutable va être utilisé. On peut donc copier ce fichier sur toute autre machine que celle sur laquelle il a été compilé, et l'exécuter. La notion de
cross-compilation
n'existe pas en Java.
Notons que l’on peut compiler d’un seul coup plusieurs fichiers dans un même répertoire, par la commande :
$ javac *.javaLes fichiers
.class
portent les mêmes noms que les fichiers sources.
On a accès à l’ensemble des options de javac en tapant la commande :
$ javac -hL’exécution du programme est appelée par la commande suivante :
$ java applicationLà encore, java est une application livrée avec le JDK, qui se trouve dans le même répertoire que javac . Cette commande lance la machine virtuelle Java (JVM, Java Virtual Machine), capable d'exécuter le "byte code". On ne précise pas l’extension
.class
dans ce cas. On voit ici que application est donnée comme argument de la commande
java
.
Notons tout de suite que l’on peut rassembler plusieurs fichiers
.class
dans un fichier
.zip
ou
.jar
, et que l’on peut exécuter directement un programme en donnant comme argument le nom du fichier
.zip
ou
.jar
. Nous reverrons en détails ce mécanisme.
Exemple 1. J'écris Bonjour le monde en Java !
public class Bonjour { public static void main (String [] arguments) { System.out.println("Bonjour le monde") ; System.exit(0) ; } }
public class Bonjour { ... }
. Tout comme dans d’autres langages, un code Java se découpe en blocs, délimités par des accolades.
Tout code Java doit être déclaré à l’intérieur d’une classe, et la fonction de ce bloc est de délimiter une telle classe. À l’intérieur d’une classe, on peut déclarer trois types de choses : des champs, des méthodes et des blocs.
La première déclaration que l’on trouve dans ce bloc est celle d’une méthode :
public static void main(...)
. Cette méthode main a un statut particulier : c’est elle qui est appelée en premier quand on lance un programme Java.
À l’intérieur de ce bloc se trouvent deux commandes. La première affiche Bonjour le monde sur la console, la deuxième ferme le programme. Nous venons d’écrire notre premier programme Java.
main
, et à l'exécuter.
L'autre façon d'exécuter un code Java, consiste à confier ce code à un container, qui va se charger de son exécution dans un environnement que l'on appellera "managé". Il existe plusieurs types de container, et à chacun est associé un type d'application Java. On peut dresser la liste suivante :
main
.
Il existe de nombreuses autres contraintes, à la fois dans leur écriture et dans leur exécution, notamment du point de vue de la sécurité. Dans le cas des applets, ce point est même crucial : une applet est une application téléchargée au travers de l'Internet, qui s'exécute sur la machine d'un internaute. La machine Java doit donc vérifier de façon très stricte que cette application respecte la sécurité de la machine sur laquelle elle s'exécute.