# Programmation Java/Premier programme

* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
[ Modifier le sommaire ]

## Premier programme
### Le fichier source

Ce programme doit être écrit dans le fichier Exemple.java.

### Explications sur le langage

Ce programme est le classique Hello world. Comme son nom l'indique, ce programme va afficher la phrase "Hello world" à l'écran. Analysons-le ligne par ligne :
Cette ligne déclare une classe publique que nous appelons Exemple.
Un fichier .java ne peut contenir qu'une seule classe publique et le fichier doit porter le nom de cette classe. Ainsi, le fichier de ce premier exemple s'appellera obligatoirement Exemple.java (en respectant la casse).
Ce système de nommage permet au compilateur et à l'interpréteur de trouver les fichiers correspondant à une classe.
Cette ligne déclare une méthode appelée main. Cette méthode est le point d'entrée du programme (la méthode appelée lorsqu'il sera exécuté).
Elle prend en argument un tableau de chaînes de caractères (String args) et ne retourne rien (void).
Cette méthode est publique et statique, ce qui sera expliqué plus loin.
Cette dernière instruction invoque la méthode println de l'objet out se trouvant dans la classe System en lui passant en argument la chaîne Hello world!. L'exécution de cette méthode aura pour résultat l'affichage de Hello world!.
Cette ligne peut sembler obscure pour l'instant. Les détails seront abordés par la suite.

### Compilation du fichier source

Tapez le programme précédent et sauvegardez le dans un fichier Exemple.java (pour la raison expliquée précédemment) et tapez dans une fenêtre :
| Invite de commande DOS | Terminal Unix |
| > javac Exemple.java > dir Exemple.class Exemple.java > | $ javac Exemple.java $ ls Exemple.class Exemple.java $ |
Le compilateur Javac a produit le fichier Exemple.class, contenant le code intermédiaire. Ce fichier n'est normalement pas éditable, ce qui peut garantir le copyright.
Voici les points à vérifier selon le type de problème :

#### Le système indique que le compilateur est introuvable

   * Vérifiez que vous avez installé un kit de développement Java (le JDK) et pas simplement un environnement d'exécution (JRE) qui ne comporte pas les outils de compilation.
   * Vérifiez que le chemin du répertoire bin contenant le compilateur javac (javac.exe sous Windows) est dans la liste de la variable d'environnement PATH.

#### Le compilateur se lance mais affiche une erreur de classe non trouvée

   * Si la classe ne déclare aucun paquetage (package), vérifiez que vous lancez la commande depuis le répertoire où se trouve le fichier source (*.java). Changez de répertoire si nécessaire avant de recommencer.
   * Sinon, vous devez lancer la commande depuis le répertoire parent du paquetage racine, en donnant le chemin relatif du fichier source depuis ce répertoire parent.
   * Dans les deux cas ci-dessus, en plus de changer de répertoire courant, il peut être nécessaire d'ajouter le chemin de ce répertoire dans le classpath. Cela peut être fait soit dans la ligne de commande avec l'option -classpath (ou -cp), soit dans la variable d'environnement CLASS_PATH.

#### Le compilateur se lance mais affiche une erreur de syntaxe

   * Vérifiez le contenu du fichier source. Pour compiler les exemples de ce livre, le mieux est de faire un copier-coller complet du code.
   * Assurez-vous de compiler le bon fichier source et pas un autre.

### Exécution du programme

Java est une machine virtuelle java fournie par Oracle et disponible pour de nombreux environnements.
Pour exécuter notre code intermédiaire, il faut taper :
L'exécution du programme affiche dans une fenêtre console la fameuse phrase Hello world!.
Voici les points à vérifier selon le type de problème :

#### Le système indique que la commande java est introuvable

   * Vérifiez que vous avez installé un kit de développement Java (le JDK).
   * Vérifiez que le chemin du répertoire bin contenant l'interpréteur java (java.exe sous Windows) est dans la liste de la variable d'environnement PATH.

#### L'interpréteur se lance mais affiche une erreur de classe non trouvée

   * Vérifiez que vous avez compilé le fichier source *.java (voir section précédente) sans erreur, c'est-à-dire que vous avez obtenu un fichier compilé *.class.
   * Si la classe ne déclare aucun paquetage (package), vérifiez que vous lancez la commande depuis le répertoire où se trouve le fichier compilé (*.class). Changez de répertoire si nécessaire avant de recommencer.
   * Sinon, vous devez lancer la commande depuis le répertoire parent du paquetage racine, en donnant le nom complet de la classe (incluant le nom du paquetage).
   * Dans les deux cas ci-dessus, en plus de changer de répertoire courant, il peut être nécessaire d'ajouter le chemin de ce répertoire dans le classpath. Cela peut être fait soit dans la ligne de commande avec l'option -classpath (ou -cp), soit dans la variable d'environnement CLASS_PATH.

#### L'interpréteur se lance mais rien ne s'affiche, ou le comportement n'est pas le même

   * Vérifiez le contenu du fichier source. Pour compiler les exemples de ce livre, le mieux est de faire un copier-coller complet du code.
   * Assurez-vous de lancer la bonne classe principale et pas une autre.

## Extraits de code dans ce livre

Dans ce livre, les chapitres peuvent être illustrés par du code source ne constituant pas une application complète en général, afin de ne pas encombrer le code avec les déclarations de classes et de méthode principale. Ces extraits de code incluent en général des importations de paquetages, des déclarations de variables et des instructions. Toutes ces déclarations peuvent être incluses dans le modèle suivant afin de constituer une application pour tester les extraits de code :

## Voir aussi

* (anglais) http://docs.oracle.com/javase/tutorial/getStarted/index.html

## Références

* ↑ http://www.jmdoudoux.fr/java/dej/chap-decompil.htm