Bases de la
programmation en
langage Java
Plan
Introduction
Historique
Caractéristiques
Machine Virtuelle Java (JVM)
Installation de l’IDE Netbeans et du JDK
Test d’un premier programme
Types de données en Java
Identificateurs
Opérateurs et expressions
Les instructions conditionnelles
Travaux Pratiques
Programmation en Langage Java 2
Introduction
Depuis les années 80, les informaticiens recherchent le moyen de
s'affranchir des différentes plates-formes matérielles.
Le C et le C++ sont très fortement dépendants du type de processeur, de
l'infrastructure matérielle et du Système d‘Exploitation.
Pour qu'un programme fonctionne sur plusieurs systèmes différents, il faut le
compiler plusieurs fois, et parfois, faire des modifications partielles de code.
L'idée de Java est de pouvoir écrire et exécuter le même
programme, quelque soit le système support.
Langage Orienté Objet
La programmation orientée-objet (introduite par le langage SmallTalk) propose
une méthodologie centrée sur les données.
Le programmeur Java identifie d’abord un ensemble d’objets, tel que chaque
objet représente un élément qui doit être utilisé ou manipulé par le programme,
sous la forme d’ensembles de données.
Ensuite, le programmeur va écrire les traitements, en associant chaque
traitement à un objet donné.
Programmation en Langage Java 3
Qu’est ce que Java?
Le langage Java est un langage généraliste de
programmation synthétisant les principaux langages
existants lors de sa création en 1995 par Sun
Microsystems.
Il permet une programmation orientée-objet (à l’instar
de SmallTalk et dans une moindre mesure, C++),
modulaire (langage ADA) et reprend une syntaxe très
proche de celle du langage C.
Programmation en Langage Java 4
Historique
Java hérite principalement sa syntaxe (procédurale) du C.
Langage généraliste, aussi versatile que C++.
Plusieurs simplifications notables par rapport au C++.
Très vaste bibliothèque de classes standard
A partir de 1993, chez Sun, développement pour créer un langage
adapté à Internet.
En 1995, annonce officielle de Java (conçu, entre autres, par James
Gosling, Patrick Naughton, Crhis Warth, Ed Frank, Mike Sheridan et Bill
Joy).
Milieu 1996, sortie de Java 1.02, première version distribuée par
JavaSoft (filiale de Sun).
Programmation en Langage Java 5
Les éditions de Java
Trois (3) éditions de Java
Java SE : Java Standard Edition ; JDK = Java SE
Development Kit
Applications "stand-alone"
Java EE : Java Enterprise Edition
Applications à large échelle, applications distribuées,
applications Web.
Java ME : Java Micro Edition
version pour écrire des programmes embarqués (carte
à puce/Java card, téléphone portable,…)
Programmation en Langage Java 6
Les versions de Java
Versions 1.01 en 1995 et 1.02 en 1996,
Versions 1.1 en 1998 et 1.2 (finalement rebaptisée Java 2) en 1999,
1.3 en 2000,
Versions 1.4 en 2002, 5.0 en 2004,
On parle du J2SE 1.4 (Java 2 Standard Edition 1.4) basée sur le JDK 1.4
(Java Development Kit 1.4), et de J2SE 5 (JDK 5.0) ou encore de Java 5.
En 2006, la version suivante s’intitule JSE 6, ou plus simplement Java 6.
En 2011, Java SE 7
En Octobre 2014, sortie de Java SE 8.
Java 8 Update 161 (16 Janvier 2018)
Programmation en Langage Java 7
Quelques caractéristiques
Java est un langage :
Simple
Similaire au C et au C++ mais avec des simplifications
Orienté objet
Tout est objet
Modulaire
on peut écrire des portions de codes génériques, c’est-à-dire
utilisables par plusieurs applications
Réparti
Java a été construit avec Internet en tête.
Riche bibliothèque pour l’accès aux URL
la programmation client/serveur via des sockets TCP et UDP,
l’exécution de méthodes distantes, gestion des serveurs web via
les Servlets, etc
Programmation en Langage Java 8
Quelques caractéristiques (2)
Java est un langage :
Interprété
Le code produit après compilation n’est pas du code machine, c’est du bytecode
Le bytecode est exécuté par un interpréteur Java : la Java Virtual Machine (JVM)
Robuste
Typage fort, pas de pointeur, contrôle d’accès, ramassage de miette, etc
Sûr
la plupart des erreurs se produisent à la compilation et non à l’exécution donc évite
d’exécuter du code dommageable.
Indépendant de l’architecture
Le bytecode est indépendant de la plate-forme.
Les bibliothèques sont intégrées de manière standard au langage, à l’encontre de
C++.
Portable
Un même programme compilé peut s’exécuter dans différents environnements, sur
différentes plate-formes, quel que soit le processeur ou le SE
Programmation en Langage Java 9
Quelques caractéristiques (3)
Java est un langage
Econome
Le pseudo code a une taille relativement petite car les bibliothèques de classes
requises ne sont liées qu'à l'exécution.
Multitâches ou multi-activités (multi-thread) et dynamique.
L’un des premiers langages à posséder en interne des tâches, ou activités
(threads) d’exécution.
La coordination des activités est aisée
Programmation en Langage Java 10
JVM
Le pseudo-code ou bytecode n'est pas exécutable directement
sur la plate-forme (système d'exploitation) pour laquelle il a été
compilé.
Il est nécessaire de passer par un logiciel appelé une machine
virtuelle.
La machine virtuelle lit le pseudo-code et l'interprète (i.e.
l'exécute).
Le grand avantage de Java est que le pseudo-code ne dépend
pas de la plate-forme mais de la machine virtuelle. Un programme
compilé peut être exécuté par n'importe quel Système
d’Exploitation.
Nécessité de posséder une machine virtuelle Java (JVM) adaptée à
cette plateforme.
Programmation en Langage Java 11
JVM (2)
Programmation en Langage Java 12
Outils pour tester un programme
Java
En 2009, Sun Microsystems est racheté par Oracle Corporation qui
fournit dorénavant les outils de développement Java SE (Standard
Edition) contenus dans le Java Development Kit (JDK).
Installation du JDK
Le JDK (Java Developpement Kit) de Java est livré, en standard,
avec différentes bibliothèques ou "paquetages" ou "API"
(Application Programming Interface) fournissant de nombreuses
classes utilitaires.
Integrated Development Environment
Jbuilder, Eclipse, Netbeans, …
Programmation en Langage Java 13
Outils pour tester un programme
Java (2)
JDK
[Link]
wnloads/[Link]
[Link]
[Link]
NetBeans IDE 8.2
[Link]
Programmation en Langage Java 14
Premier exemple de programme
Java
Voici un exemple très simple de programme qui se contente
d’afficher dans la fenêtre console le texte : Mon premier
programme
public class PremProg
{
public static void main (String args[])
{
[Link] ("Mon premier
programme Java") ;
}
}
Programmation en Langage Java 15
Premier exemple de programme
Java (2)
Nous avons utilisé les classes System et String ;
Ces classes appartiennent à [Link] qui est
implicitement importé
La méthode main() doit être static
main doit être une méthode de classe pour qu'on puisse
l'invoquer directement à partir de la classe sans avoir
besoin de construire une instance de la classe.
La méthode main() doit déclarer l'argument String
main() doit déclarer la chaîne d'arguments même si on
ne lui passera rien lors de l'exécution.
Programmation en Langage Java 16
Etapes de l’exécution d’un programme
en Java
Saisir le code et le sauvegarder dans un fichier. Ici, ce dernier devra
impérativement se nommer [Link].
En effet, quel que soit l’environnement concerné, le code source d’une
classe publique doit toujours se trouver dans un fichier portant le même
nom et possédant l’extension java.
On procède à la compilation
un code intermédiaire formé de bytecodes.
On obtiendra un fichier portant le même nom que le fichier source et
l’extension class, donc ici [Link].
On procède maintenant à l’exécution du bytecode
On pourra lancer l’exécution du bytecode ainsi obtenu par l’intermédiaire
de la Machine Virtuelle Java.
Programmation en Langage Java 17
Exemple de programme et son
exécution
S’il s’agit du JDK de SUN, on compilera avec la commande
javac [Link]
On exécutera avec la commande suivante (attention à ne pas
mentionner d’extension à la suite du nom du programme) :
java PremProg
On obtiendra
Mon premier programme Java
Avec un environnement de développement "intégré", on sera
amené à utiliser des menus pour effectuer ces deux étapes.
Programmation en Langage Java 18
Etapes préliminaires à la
compilation avec JDK
Créer la variable système JAVA_HOME
Valeur
C:\Program Files\Java\jdk1.8.0_74
Ajouter dans la variable path
C:\Program Files\Java\jdk1.8.0_74\bin
Ou encore %JAVA_HOME%\bin
Programmation en Langage Java 19
Syntaxes du langage Java
Programmation en Langage Java 20
Identificateurs
Un identificateur est un nom qui identifie de façon unique
une variable, une méthode ou une classe
Règles générales
Identificateur :
suite de lettres,
minuscules ou majuscules,
chiffres,
underscore (_) et dollar ($).
Un identificateur ne doit pas commencer par un chiffre.
Java distingue les minuscules des majuscules (sensibilité à la
casse)
Exemple : « Valeur » diffère de « VALEUR »
Programmation en Langage Java 21
Identificateurs(2)
Conventions
Toute méthode publique et variable d’instance
commence par une minuscule.
Variables locales et privées : lettres minuscules avec
des underscores.
Ex : next_val, temp_val.
Variables dites final représentant des constantes :
lettres majuscules avec underscores.
Ex: DAY_FRIDAY, GREEN.
Tout nom de classe ou d’interface commence par une
majuscule
Programmation en Langage Java 22
Mots clés du langage
Programmation en Langage Java 23
Mots clés du langage (2)
Les mots clés sont toujours écrits en minuscules, comme en
C/C++.
De façon générale, les mots clés Java peuvent être classés par
catégorie selon leurs fonctions de la façon suivante (exemples
entre parenthèses) :
Mots clés de déclaration des données (boolean, float, int,..)
Mots clés de boucle (continue, while, for,..)
Mots clés conditionnels (if, else, switch)
Mots clés d’exception (try, throw, catch)
Mots clés de structure (class, extends, implements,..)
Mots clés de modification et d’accès (private, public, transient,..)
Mots clés divers (true, null, super,..)
Programmation en Langage Java 24
Types de données en Java
Entité qui représente une valeur spécifique pouvant être stockée en
mémoire.
Il y a deux catégories de types de données : intégrés et composites.
Les types de données intégrés (ou primitifs) peuvent ensuite être divisés en
trois autres catégories : numérique, booléen et caractère.
Ils sont compris par le compilateur et ne nécessitent pas de bibliothèques
spéciales.
Les types composites sont de deux sortes : tableaux et chaînes.
Généralement, les types composites nécessitent l’utilisation de bibliothèques
spéciales.
Programmation en Langage Java 25
Les types primitifs
Huit types primitifs :
Entiers : byte, short, int et long, tous signés.
Nombres à virgule flottante : float et double.
Caractères : char.
booléens : boolean, pour les valeurs logiques.
Programmation en Langage Java 26
Types de données numériques
Type Taille Description (valeurs extrêmes)
byte 8 bits très petit nombre entier signé (–128 ⇒127)
short 16 bits nombre entier signé court (–32768 ⇒ 32767)
int 32 bits nombre entier signé (–2.14e+9 ⇒ 2.14e+9)
long 64 bits nombre entier signé long (–9.22e+18 ⇒ 9.22e+18)
float 32 bits nombre en virgule flottante (1.402e-45 ⇒ 3.402e+38)
double 64 bits nombre en virgule flottante double précision (4.94e-324
⇒ 1.79e+308)
Programmation en Langage Java 27
Types de données booléens
Un type de données booléen a deux valeurs : true et false. A
la différence de C/C++, qui stocke les types de données
booléens sous forme numérique (0 pour false et 1 pour true),
Java utilise le type de données intégré boolean.
Les variables de type boolean non initialisées ont
automatiquement la valeur false.
int a = 1, b = 0;
boolean bool = a < b; //bool a la valeur false
Programmation en Langage Java 28
Types de données caractère
Java utilise le type de données char pour stocker un
caractère Unicode unique.
Toutefois, le type char de Java a une largeur de 16 bits,
alors qu’il n’a que 8 bits de large (par défaut) dans
C/C++.
Programmation en Langage Java 29
Types de données composites: les
tableaux
Un tableau est une structure de données qui peut contenir
plusieurs éléments du même type.
Les éléments d’un tableau peuvent être de n’importe quel type :
type primitif, type composite ou classe définie par l’utilisateur.
Exemples de déclaration
int idEtudiant[];
char[] grades;
float coordonnees[][];
En java la taille du tableau n’est pas précisée ;
Contrairement, dans la plupart des langages, la taille d’un tableau
doit faire partie de sa déclaration.
Les crochets peuvent suivre l’identificateur, comme dans le
premier exemple ou suivre le type de données, comme dans le
deuxième exemple.
Programmation en Langage Java 30
Types de données composites: les
tableaux (2)
Pour affecter réellement de la mémoire aux variables
tableaux, il faut utiliser l’opérateur new de la façon
suivante :
int idEtudiant[] = new int[20];
char[] grades = new char[20];
float[][] coordonnees = new float[10][5];
Quand un tableau est créé, tous ses éléments sont vides.
Dans Java, l’utilisation de l’opérateur new est semblable à
l’utilisation de la commande malloc en langage C et de
l’opérateur new en C++.
Programmation en Langage Java 31
Types de données composites: les
tableaux (3)
Initialisation
char[] grades = {‘A’, ‘B’, ‘C’, ‘D’, ‘F’};
float[][] coordonnees = {{0.0, 0.1}, {0.2, 0.3}};
Accès aux éléments du tableau
Premier Elément => grades[0]; //premier Elément = ‘A’
Cinquième Elément => grades[4]; //cinquième Elément = ‘F’
Ligne 2 Colonne 1 => coordonnees[1][0]; //ligne 2 Colonne 1 =
0.2
Autre exemple
int[] tableauInt = new int [5];
int index;
for (index = 0; index < 5; index++)
tableauInt [index] = index;
Programmation en Langage Java 32
Types de données composites: les
chaînes de caractères
Chaîne: suite de caractères.
Pour stocker des chaînes, Java utilise le type String. Ce type de
données fait partie du paquet [Link]
String s = new String (“Bureau");
Pour disposer d’un meilleur contrôle sur vos chaînes, utilisez la
classe StringBuffer.
fournit des méthodes permettant de modifier le contenu des chaînes.
Exemple
StringBuffer s = new StringBuffer ("Bureau");
[Link] (1, 'e'); //s a maintenant la valeur "Bereau"
Programmation en Langage Java 33
Opérateurs : Opérateurs
arithmétiques
Programmation en Langage Java 34
Opérateurs : Opérateurs
arithmétiques (2)
class IncDec {
public static void main(String args[]) {
int a = 1;
int b = 2;
int c = ++b;
int d = a++; La sortie du programme est :
c++; ???
[Link]("a = " + a);
[Link]("b = " + b);
[Link]("c = " + c);
[Link]("d = " + d);
}
}
Programmation en Langage Java 35
Opérateurs : Opérateurs entiers
sur les bits
On peut manipuler les bits des types entiers long, int,
short, char et byte à l’aide des opérateurs suivants :
Exemple
short i = 13; //i a la valeur 0000000000001101
i = i << 2; //i a la valeur 0000000000110100
i >> 3; //i a la valeur 0000000000000001
Programmation en Langage Java 36
Opérateurs : Opérateurs
relationnels
Tout type java, y compris les types primitifs et les références
à des instances d’objets peuvent être comparés avec ==
et !=
Seuls les types numériques peuvent être comparés avec les
opérateurs d’ordre. Les entiers, flottants et caractères
peuvent être comparés avec les opérateurs d’ordre strict.
Chaque opérateur renvoie un type boolean.
Programmation en Langage Java 37
Opérateurs : Opérateurs
booléens logiques
Programmation en Langage Java 38
Priorité des opérateurs
Programmation en Langage Java 39
Expressions
Une expression est une combinaison significative d’identificateurs, de
mots clés, de symboles et d’opérateurs qui a une valeur. De façon
générale, tout ce qui peut être mis du côté droit d’un signe
d’affectation est une expression.
Voici quelques exemples d’expressions :
s = "Bonjour à tous";
x = 123.4;
y = (x * 5) / 2;
valeur = obtenirValeur();
Mammifere m = new Mammifere();
Affectations de variables
Expressions d’opérateur
Affectation d’objet
… Programmation en Langage Java 40
Les instructions de contrôle :
Instruction switch
Instruction switch
switch (c){
Forme strictement analogue à case '1': case '3': case '5': case '7': case
celle du C '9':
[Link]("c est un chiffre
switch ( expression ) { impair");
case valeur1 : break;
break; case '0': case '2': case '4': case '6': case
case valeurN : '8':
break; [Link]("c est un chiffre pair");
default : break;
} default :
[Link]("c n’est pas un
chiffre");
}
Programmation en Langage Java 41
Les instructions de contrôle :
Instruction if-else
if ( expression-booleenne ) expression1;
[ else expression2; ]
expression1 peut être une expression composée
entourée de {}.
expression-booleenne est toute expression renvoyant
une valeur de type boolean.
if (condition1) {
//blocCode 1
}
else if (condition2) {
//blocCode 2
}
else {
//blocCode 3
}
Programmation en Langage Java 42
Les instructions de contrôle :
Instructions while/do-while/for
while
[ initialisation; ]
while ( terminaison ) {
corps;
[ iteration; ]
}
do-while
[ initialisation; ]
do {
corps;
[ iteration; ]
} while ( terminaison );
for
for (initialisation; terminaison; iteration)
Instructions;
Programmation en Langage Java 43
Les instructions de contrôle :
Instructions while/do-while/for (2)
int x = 1, z = 0;
while (x <= 20) {
z += x;
x++;
}
int x = 0; do{
[Link]("Bouclage");
x++;
}while (x < 10);
int z = 0;
for (int x=1; x <= 20; x++) {
z+= x;
}
Programmation en Langage Java 44
Instructions de contrôle des boucles
L’instruction break
L’instruction break permet de sortir d’une structure de boucle
lorsque que la condition de sortie est respectée,
Quand la boucle rencontre une instruction break, elle se termine
immédiatement en ignorant le code restant.
int x = 0;
while (x < 10){
[Link]("Bouclage");
x++;
if (x == 5)
break;
else
//faire quelque chose d’autre
}
Programmation en Langage Java 45
Instructions de contrôle des boucles (2)
L’instruction continue
L’instruction continue permet d’ignorer le reste de la
boucle et de reprendre l’exécution à l’itération
suivante de la boucle.
for ( int x = 0 ; x < 10 ; x++)
{
if(x == 5)
continue; //revient au début de la boucle avec
x=6
[Link]("Bouclage");
}
Cet exemple n’imprime pas “Bouclage” si x a la valeur
5.
Programmation en Langage Java 46
Les commentaires
Les commentaires sont des instructions écrites en langage naturel par
le programmeur pour ajouter des remarques concernant le code.
Dans Java, il y a trois styles de commentaires.
Le premier commence par /* et se termine par */ ;
il permet d’écrire des commentaires sur plusieurs lignes. Ce style est
identique à celui du langage C.
x = y + z; /* Ceci est un commentaire.*/
z = q / p; /*Ce commentaire
s’étend sur deux lignes*/
Le deuxième commence par /** et se termine par */.
Ce style est utilisé par l’outil javadoc du JDK pour générer
automatiquement une documentation à partir du code source.
Programmation en Langage Java 47
Les commentaires (2)
Le troisième style de commentaire est tiré du langage C++.
Il commence par // et ne peut être écrit que sur une ligne.
Voici un exemple :
x = y + z; //Ce commentaire ne peut pas être écrit sur
plusieurs lignes
Programmation en Langage Java 48
Exercice 1 - Compte à rebours
Ecrire un programme affichant les valeurs n, n - 1,n-2, : : :, 1, 0, n étant
un nombre entier.
Programmation en Langage Java 49
Exercice 2 – Création de tableaux et
affichage
Créer un tableau de 20 entiers, y placer les nombres de
1 à 20, inverser l'ordre des éléments et les afficher.
Programmation en Langage Java 50
Exercice 3 - Nombres parfaits
Un nombre parfait est un nombre égal à la somme de ses diviseurs
stricts. Par exemple, 6 a pour diviseurs stricts 1, 2 et 3, comme 1 + 2 + 3
= 6, alors 6 est parfait.
Ecrire un programme en langage Java qui dit si un nombre n est un
nombre parfait, ou non.
Programmation en Langage Java 51
Exercice 4 - Nombres amis
a et b sont des nombres amis si la somme des diviseurs stricts de a est
égale à b et si la somme des diviseurs stricts de b est égale à a.
Soient x et y, deux entiers strictement positifs. x est un diviseur strict de y si x
divise y et x est différent de y. Par exemple, 3 est un diviseur strict de 6.
Mais 6 n'est pas un diviseur strict de 6.
1. Ecrire une fonction public static int sommeDiviseursStricts(int n), elle
doit renvoyer la somme des diviseurs stricts de n.
2. Ecrire une fonction public static boolean sontAmis(int a, int b), elle
doit renvoyer true si a et b sont amis, false sinon.
3. Appeler dans la fonction principale, la fonction sontAmis avec
deux nombres entiers positifs pour savoir si ces deux nombres entiers
sont amis.
A titre indicatif
le plus petit couple de nombres amis connu est 220 et 284.
Programmation en Langage Java 52
Exercice 5 - Nombres premiers
Ecrire un programme en langage Java qui dit si un nombre entier
positif non nul est premier ou non.
NB: Un nombre entier positif non nul est dit premier lorsqu’il n’est
divisible que par lui-même et par 1.
Programmation en Langage Java 53
Exercice 6 – Somme des n premiers
nombres premiers
Ecrire un programme qui affiche la somme des n premiers nombres
premiers, n étant fixé dans le programme.
Par exemple, les 4 premiers nombres premiers sont : 2 3 5 7
Programmation en Langage Java 54
Bibliographie
Programmer en Java, Claude Delannoy
Java examples in a Nutshell, D. Flanagan,
Object Oriented Programming using Java, Simon Kendal
Java: Classes in Java Applications : An Introduction to Java
Programming, David Etheridge
Mieux programmer en Java : 68 astuces pour optimiser son
code, Petter Haggar
Programmation en Langage Java 55