Le JRE inclut une JVM, machine virtuelle Java (Java Virtual Machine), ainsi que les
librairies et les composants ncessaires lexcution des applications java.
Une application java peut tre dveloppe sur une machine Windows, et par exemple
sexcuter sur une machine Linux: on dit quune application Java est portable.
Le langage Java a t dvelopp par la socit Sun. La socit Sun nexiste plus car elle a t
rachete par Oracle.
Les exemples suivants seront dvelopps et excuts sur une machine Windows.
Il existe des produits de dveloppements performants comme Eclipse ou JBuilder ou
NetBean que nous nutiliserons pas dans ce chapitre. Ces produits ne sont pas indispensables,
et pour lapprentissage du langage Java, mieux vaut ne pas les utiliser tout de suite.
Installer un JDK, Java Development Kit, par exemple le jdk 1.8 qui sinstalle par
dfaut dans le dossier C:\Program Files\Java\jdk1.8.0_05.
Ici pour le PATH
Dans le panneau de configuration de Windows, slectionner
Systme et Scurit/Systme/Paramtres Systme avancs/Variables systme
ajouter la variable systme PATH, le chemin suivant:
2/22
C:\Program Files\Java\jdk1.8.0_05\bin.
Cest dans ce rpertoire que lon trouve les commandes ncessaires la compilation et
lexcution des applications Java, et notamment:
javac qui est la commande de compilation.
java qui est la commande dexcution.
Utiliser un diteur de texte ASCII comme Notepad++ pour crire les programmes
sources.
Pour dvelopper une application Java, on passe par les tapes suivantes:
Q0 Tester linstallation
Ouvrir une fentre console (invite de commandes ou Dmarrer/Excuter/cmd puis OK). Taper
javac, une liste de messages propres Java doit safficher.
Si un message du genre javac nest pas reconnu comme commande interne ou externe
est affich, cela veut dire que soit le jdk n'est pas install, soit le PATH n'est pas correctement
configur, voir ci-dessus.
2. Premier exemple.
Le langage Java est 100% objet, et toute application est contenue dans une ou plusieurs
classes.
contenant le fichier Bonjour1.java. La commande dir (ls sous Linux) dans ce dossier doit
afficher le nom du fichier Bonjour1.java.
Sil y a des erreurs de syntaxe, elles sont indiques par le compilateur, et il faut revenir
dans lditeur pour les corriger.
Si la compilation russit, elle cre un fichier Bonjour1.class.
Le fichier Bonjour1.class est un fichier de bytes codes, ou suite doctets, qui ne sont
pas directement comprhensibles par la machine relle : c'est la machine virtuelle
java (JVM) qui contrle lexcution des bytes codes, comme le fait un
microprocesseur qui excute une suite dinstructions.
Ajout de commentaires :
Un programme Java, avant de pouvoir tre excut, doit tre compil en bytes codes. La
possibilit de forcer le compilateur ignorer certaines instructions existe ! Cest ce quon
appelle les commentaires, et deux syntaxes sont disponibles pour commenter un programme :
1. Les commentaires unilignes : introduits par les symboles // , ils mettent tout ce qui les
suit en commentaire, du moment que le texte se trouve sur la mme ligne ;
2. Les commentaires multilignes : ils sont introduits par les symboles /* et se terminent
par les symboles */ .
On doit crire une classe. On a choisi le nom Bonjour1 comme nom de la classe. La
dfinition de la classe doit tre comprise dans un bloc dlimit par une accolade
ouvrante et une accolade fermante : { .... }
4/22
Une mthode (ou fonction membre) est une suite d'instructions excuter. C'est
un morceau de logique de notre programme. Une mthode contient :
- un en-tte : celui-ci va tre en quelque sorte la carte d'identit de la mthode ;
- un corps : le contenu de la mthode. Il est plac dans un bloc dlimit par des
accolades : { .... }
Dans cette classe, il nexiste quune seule mthode (ou fonction membre) : la
mthode main(). Cette mthode main() est le point dentre d'excution du
programme. Tout programme excutable java doit contenir une classe avec une
mthode main().
Dans la mthode main(), c'est dire dans le corps de cette mthode, il n'y a qu'une
seule instruction. Celle-ci est termine par un point virgule (comme toutes les
instructions du langage Java) et ralise laffichage simple dun texte :
System.out.println("Bonjour !! ");
Une application java commence le plus souvent par des importations de classes
contenues dans des packages, en crivant des lignes de code comme
import java.lang.*;
La ligne de code prcdente permet d'importer toutes les classes (grce l'utilisation
du symbole *) contenues dans le package java.lang
java.lang est le seul package dont toutes les classes sont importes automatiquement.
Donc, la ligne de code prcdente est inutile.
Un package est une entit java qui regroupe plusieurs classes dj crites par les
dveloppeurs du langage. On peut voir un package comme une librairie de classes.
De nombreux packages existent : pour le rseau, pour faire des ihm (fentres), pour
accder aux bases de donnes...
Q2 Importer toutes les classes du package java.lang dans le premier exemple, compiler,
5/22
Pour crire des applications Java, il faut acqurir de lexprience sur les packages et les
classes, et utiliser la documentation Java Doc accessible (ou tlchargeable) sur le site
dOracle l'adresse : https://docs.oracle.com/javase/8/docs/index.html
3. Exemple n2
La mthode print() est une mthode de la classe PrintStream qui crit dans un flux de
sortie, le texte pass en paramtre (entre les parenthses) sans retour la ligne.
Q4 Modifier le programme pour que les 3 messages s'affichent sur des lignes diffrentes.
Pour insrer un saut de ligne, on peut aussi utiliser le caractre d'chappement \n. De mme,
le caractre d'chappement \t permet d'insrer une tabulation.
4. Les variables
Elles permettent de stocker des nombres, des caractres, des boolens dont la valeur peut
tre modifie lors de l'excution du programme.
La dclaration d'une variable est constitue d'un type suivi d'un nom et est termine par un
point virgule :
<type de la variable> <nom de la variable> ;
Remarque : On choisit le type d'une variable en fonction de ce que l'on souhaite stocker (ou
mettre) dans la variable.
long anneeLumiere;
anneeLumiere = 9460700000000000L; //ne compile pas sans le L
}
}
7/22
Par dfaut (sans suffixe), les constantes entires sont places dans des int. Donc, sans le L la
fin de la constante entire 9460700000000000, le compilateur essaie de placer cette valeur
dans un int (4 octets), ce qui est impossible. Cela engendre une erreur de compilation.
double division;
division = 0.3333333333333333333333333334d; // le suffixe d est optionnel
System.out.println(nombre); //affichage du contenu de la variable nombre
}
}
Par dfaut (sans le suffixe f), les constantes relles sont places dans des doubles. Quand une
telle constante est affecte dans une variable de type float, il faut donc la convertir en float.
Cette conversion en float est dgradante car elle entrane une perte de prcision et donc cela
provoque une erreur de compilation.
Conclusion : pour affecter une constante relle dans une variable de type float, il faut utiliser
le suffixe f (pour que la constante soit place dans un float !).
Une variable de type char permet de stocker un caractre. Les caractres sont cods en
unicode sur 16 bits : de 0x0000 0xFFFF.
En simplifiant pour les caractres ASCII : Octet de poids fort 0
octet de poids faible: code ASCII
Le code ASCII
L'ASCII (American Standard Code for Information Interchange) utilise 7 bits pour reprsenter un
caractre : ils sont donc numrots en dcimal de 0 127, cods en binaire de 0b0000000
0b1111111 et en hexadcimal de 0x00 0x7F.
Donc, seuls 128 caractres sont reprsents.
DEL
Les caractres de numro 0 31 et le 127 ne sont pas affichables : ils correspondent des commandes
de contrle de terminal informatique. Le caractre numro 32 est l'espace. Les autres caractres sont
les chiffres arabes, les lettres latines majuscules et minuscules sans accent et quelques symboles de
ponctuation.
Exemples :
9/22
Remarques : - les expressions entre quotes (ou apostrophes) sont de type char.
Exemples :
String phrase; //dclaration d'un objet nomm phrase de type String
phrase = "toto la piscine"; //on affecte une chaine de caractres constante dans phrase
System.out.println(phrase); //affichage du contenu de l'objet phrase
String ph2 = "titi"; //on peut initialiser l'objet ph2 en mme temps qu'on le dclare
System.out.println(ph2); //affichage du contenu de l'objet ph2
Remarque : les chanes de caractres constante se notent entre guillemets (doubles) : " .
5. Convention de nommage
Pour faciliter la lecture des programmes, les conventions suivantes sont communment
adoptes :
- tous les noms de classes doivent commencer par une majuscule ;
- tous les noms de variables doivent commencer par une minuscule ;
10/22
- si le nom d'une variable est compos de plusieurs mots, le premier commence par une minuscule, le
ou les autres par une majuscule, et ce, sans sparation (exemple : int nombrePlusGrand; )
Remarques :
- tous ces noms doivent tre sans accents.
- les noms des types primitifs commencent par une minuscule, ce qui permet de les
diffrencier des types classes.
6. Les oprateurs
6.1 Les oprateurs arithmtiques
Notation en langage java Signification
+ Addition
- Soustraction
* Multiplication
/(avec des variables de type numriques rels) Division (relle)
/ (avec des variables de type numriques entiers) Division entire
% (avec des variables de type numriques entiers) Reste de la division entire
Ces oprateurs sont des oprateurs binaires : ils doivent tre appliqus 2 oprandes (2
variables, 2 constantes ou une variable et une constante).
Exemples :
int n1, n2, n3, n4; //dclaration de variables
n1 = 3 + 1; // n1 vaut 4
n2 = 2*6; // n2 vaut 12
n3 = n2 / n1; // n3 vaut 3
n1 = n1 + 1; // la JVM calcule la valeur de n1 + 1 et affecte le rsultat (5) dans n1
n2 = n2 + 2; // n2 vaut 14
n4 = n2 / n1; // n4 vaut 2 car 14 = 2*5 + 4
n1 = n2 % n1; // n1 vaut 4
Exemples :
int n1 = 0; //dclaration d'une variable
n1++; // n1 vaut 1
n1++; // n1 vaut 2
n1 = n1 + 1; // n1 vaut 3 (idem n1++;)
n1--; // n1 vaut 2
n1 = n1 - 1; // n1 vaut 1 (idem n1- -;)
11/22
6.3 Les oprateurs d'affectation tendue (+= ; -=; *=; /=; %=)
Exemples :
int n1 = 9, n2 = 5; //dclaration de variable s
n1 += 5; // quivalent n1 = n1 + 5 => n1 vaut 14
n1 /= n2; // quivalent n1 = n1 / n2 => n1 vaut 2
n1 += 7; // n1 vaut 9
n1 %= 2; // quivalent n1 = n1 % 2 => n1 vaut 1
(*2) : l'oprateur new permet de crer un objet, ce qui implique la rservation de l'espace
mmoire occup par cet objet. Il faut lui indiquer le type de l'objet crer (ici, le type classe
Scanner). De plus, la cration de cet objet (de type Scanner) ncessite la transmission d'un
paramtre : l'objet nomm in de type InputStream, qui fait partie de la classe System (l'objet
in est associ l'entre standard, par dfaut le clavier). Aprs avoir crer l'objet de la classe
Scanner, l'oprateur new renvoie l'adresse mmoire de l'objet cr et cette dernire est
affecte dans sc.
(*4) : plus exactement, dclaration d'une variable rfrence destine contenir l'adresse
12/22
Exemples :
long nb4; //dclaration d'une variable de type int nomme nb
boolean bo;
System.out.print("Saisir un entier : ");
nb4 = sc.nextLong(); //saisie d'un long et affectation de l'entier saisi dans nb4
System.out.print("Merci pour : ");
System.out.println(nb4); // affichage de la valeur contenu dans nb4
System.out.print("Saisir un boolean : ");
bo = sc.nextBoolean(); //saisie d'un boolean et affectation du boolean saisi dans bo
System.out.print("Merci pour : ");
System.out.println(bo); // affichage de la valeur contenu dans bo
Remarques :
- si l'utilisateur saisit n'importe quoi (une chane de caractres la place d'un nombre par
exemple), le programme plante. On verra comment grer ce problme par la suite car d'une
faon gnrale, on ne peut pas faire confiance aux donnes saisies par l'utilisateur.
- dans la classe Scanner, il n'existe pas de fonction (nomme nextChar()) permettant la saisie
d'un simple caractre. On ne peut que saisir une chane de caractre (objet de type String)
avec la fonction nextLine() puis accder aux divers caractres saisis en utilisant la fonction
membre charAt() de la classe String (cf. exemple suivant)
System.out.println(car1);
System.out.println(car2);
System.out.println(car3);
(*7) : appel de la fonction charAt() pour l'objet str. Cette fonction prend un paramtre qui
reprsente l'indice ou la position du caractre qu'elle renvoie. Le 1er caractre est situ
l'indice 0 (cf. cours sur les tableaux), le second l'indice 1, le 3me l'indice 2, etc...
7.3 Exercice
Explication :
Toutes les saisies se font par l'intermdiaire d'un tampon (ou buffer) d'entre :
Tampon d'entre Programme
Clavier
en cours d'excution
Le contenu du tampon est "analys" lorsque l'utilisateur "tape" sur la touche Entre : le
caractre Line Feed (LF, '\n' en langage java) est alors insr dans le tampon.
Conclusion : on peut enchaner les saisies en appelant les mthodes comme nextInt(),
nextDouble(), nextBoolean(), ... sans se poser de question. Mais quand, aprs l'appel d'une de
ces mthodes, on veut saisir un String, il faut vider le tampon (en appelant " blanc" la
mthode nextLine()) pour pouvoir effectuer la saisie de ce String.
Solution de l'exercice :
String str; //dclaration de l'objet nomm str
int nb;
(*1) : le String renvoy par nextLine() contenant une chane vide est perdu !
8. Les conditions
Elles permettent d'excuter des instructions diffrentes suivant diffrents cas de figures.
int nb;
Le mot if est un mot cl du langage java. Il doit tre suivi d'un condition logique place
entre parenthses. Cette condition logique est un boolen qui ne peut donc prendre que 2
valeurs : VRAI ou FAUX. Elle est value (ou calcule) au moment de l'excution du
programme. Le code plac dans le bloc (dlimit par les accolades) qui suit n'est excut que
si la condition logique est value VRAI.
Le mot else est un mot cl du langage java. Il ne peut tre utilis qu' la suite d'un bloc
prcd d'un if . En effet, les instructions contenues dans le bloc la suite du else ne
sont excutes que si la condition logique value dans le if est fausse.
Remarque : chaque entre dans un nouveau bloc, j'ai dcal d'une tabulation vers la gauche
les instructions contenues dans ce bloc. Ces divers dcalages constitue l'indentation du
programme et ont pour but de faciliter sa lecture. Conseil : pour indenter un programme, ne
jamais utiliser d'espace, toujours utiliser des tabulations.
8.4 Remarque
En ralit, l'utilisation d'un bloc (dlimit par les accolades) la suite d'une clause if n'est
obligatoire que si on souhaite excuter plus d'une instruction quand la condition logique
teste est vraie. En effet, sans les accolades la suite d'un if, seule l'instruction (termine par
un point virgule) qui suit le if est excute lorsque la condition logique teste est vraie.
Idem pour la clause else.
Q17 Reprendre les exemples des paragraphes 8.1, 8.2 et 8.3 en supprimant les accolades.
bo = nb < 0;
if (bo) // idem if (bo == true)
{
System.out.println("nb est ngatif."); // excut que si nb <0
}
System.out.println("Fin du programme."); // excut dans tous les cas.
Ces oprateurs sont des oprateurs binaires : ils doivent tre appliqus 2 oprandes qui
sont interprtes comme des boolens. Ces oprateurs fournissent en rsultat une
expression logique ou un boolen.
A B A || B A B A && B A !A
false false false false false false false true
false true true false true false true false
true false true true false false
true true true true true true
Exemple :
Avec :
int largeur = 4, longueur = 10;
int nb;
switch (nb) //
{
18/22
Les mots switch, case, break et default sont des mots cls du langage java.
Q19 Raliser un programme qui donne les mmes rsultats en utilisant les mots cls if et
else la place des mots cls switch , case , break et default .
Q20 Retour sur le programme de la question 18. Supprimer toutes les instructions break;
et tester le programme dans tous les cas de figure. Conclusion?
9. Exercices
9.0 Les 5 rgles d'criture d'un programme :
- Mettre un entte
- Mettre des commentaires
- Respecter l'indentation
- Choisir des noms de variables explicites
- Choisir des noms de fichiers explicites (et donc des classes en Java)
9.1 Exercice 1 : raliser un programme qui calcule l'aire d'un rectangle dont la longueur et la largeur
seront saisies par l'utilisateur, puis affiche le rsultat.
9.3 Exercice 3 :
Un magasin consent une rduction dans les conditions suivantes :
Si le montant de l'achat est strictement infrieur 350, il n'y a pas de rduction
Si le montant de l'achat est compris entre 350 et 600, 3% de rduction est accord
Si le montant de l'achat est suprieur ou gal 600, 5% de rduction est accord
Rappel : l'IMC est calcul est divisant le poids par la taille au carr.
L'interprtation de l'IMC se fait selon les critres dfinis par l'organisation mondiale de la sant.
Exemple 1 :
int nb = 0;
while( nb != 1) {
// les instructions contenues dans ce bloc sont rptes tant que la condition
// logique (nb != 1) est vraie
System.out.print("Saisir un entier, 1 pour sortir : ");
nb = sc.nextInt();
}
System.out.println("Fin du programme."); // excut quand on sort de la boucle
Le mot while est un mot cl du langage java. Il doit tre suivi d'un condition logique
place entre parenthses. Cette condition logique est un boolen qui ne peut donc prendre
que 2 valeurs : VRAI ou FAUX. Elle est value (ou calcule) avant chaque ventuelle
excution des instructions places dans le bloc qui suit. Le code plac dans le bloc
(dlimit par les accolades) est excut tant que la condition logique est value VRAI.
while( nb < 5)
{
20/22
// les instructions contenues dans ce bloc sont rptes tant que la condition
// logique (nb < 5) est vraie
nb++;
System.out.print("nb = ");
System.out.println(nb);
}
System.out.println("\nFin du programme."); // excut quand on sort de la boucle
Exemple :
int nb = 1;
do
{
// on est certain que les instructions contenues dans ce bloc seront excutes
// au moins une fois
System.out.print("Saisir un entier, 1 pour sortir : ");
nb = sc.nextInt();
}
while( nb != 1); // ne pas oublier le point virgule
System.out.println("\nFin du programme."); // excut quand on sort de la boucle
Les mots do et while sont des mots cls du langage java. Aprs chaque excution des
instructions contenues dans le bloc, la condition logique qui suit le while est value. Si
elle est value VRAI, on recommence une nouvelle excution des instructions contenues
dans le bloc, sinon on sort de la boucle.
Le mot for est un mot cl du langage java. Il doit tre suivi de 3 expressions places entre
parenthses et spares par des points virgule. L'expression1 sert gnralement initialiser
une variable utilise par la boucle. L'expression2 est interprte comme une condition
logique. Quant l'expression 3, elle sert gnralement modifier la variable utilise par la
boucle.
21/22
Exemple :
int i;
Dans l'exemple prcdent, le traitement est excut pour i = 0, puis pour i = 1 et enfin pour i = 2.
Quand on sort de la boucle i vaut 3.
Q27 Ecrire un programme qui produit le mme rsultat en utilisant une boucle while.
Conclusion : la boucle for est utilise quand le nombre de rptitions est connu l'avance.
Elle permet d'crire ce type de boucle de faon plus concise qu'une boucle while .
11. Exercices
11.1 Exercice 1 : raliser un programme qui affiche 5 fois "Bonjour" en utilisant une boucle.
11.2 Exercice 2 : raliser un programme qui affiche plusieurs fois "Bonjour" : le nombre d'affichage
doit tre saisi par l'utilisateur.
11.3 Exercice 3 :
Raliser un programme qui demande lutilisateur un nombre compris entre 0 et 3 (inclus) jusqu ce
que la rponse convienne. Dans le cas o la rponse ne convient pas, il faut le signaler l'utilisateur.
11.4 Exercice 4 :
Raliser un programme qui demande un nombre compris entre 10 et 20 (inclus), jusqu ce que la
rponse convienne. En cas de rponse suprieure 20, il faut faire apparatre un message : Plus
petit ! , et inversement, Plus grand ! si le nombre est infrieur 10.
11.5 Exercice 5 :
Raliser un programme qui demande un nombre de dpart, et qui ensuite affiche les dix nombres
suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme doit afficher les nombres de 18
27.
11.6 Exercice 6 :
Raliser un programme qui demande un nombre de dpart, et qui ensuite crit la table de
multiplication de ce nombre, prsente comme suit (cas o l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21
7 x 10 = 70
22/22
11.7 Exercice 7 :
Raliser un programme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu
ce nombre. Par exemple, si lon entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
11.8 Exercice 8 :
Raliser un programme qui :
- demande lutilisateur de saisir 10 nombres,
- dtermine et affiche le plus grand nombre parmi les 10 nombres saisis :
Entrez le nombre numro 1 : 12
Entrez le nombre numro 2 : 14
etc.
Entrez le nombre numro 10 : 6
Le plus grand de ces nombres est : 14
Modifier ensuite lalgorithme pour que le programme affiche en plus la position laquelle le plus
grand nombre est saisi :
Le plus grand nombre a t saisi la position 2
11.9 Exercice 9 :
Mme problme que dans l'exercice 8, mais cette fois-ci le nombre de saisies de l'utilisateur n'est pas
fixe l'avance : la saisie des nombres sarrte lorsque lutilisateur entre un zro.