Professional Documents
Culture Documents
Langage Java
Sources principales :
Sites : www.java.sun.com
Livres : 1- Au cœur de Java 2 : Notions fondamentales
2- Au cœur de Java2 : Foctions avancées
De Cay S.Horstmann & Gary Cornell
3-Java 2 Codes_en_stock de Loic Fieux
(1, 2, 3 Edition Campus Press)
1
JAVA
c'est quoi ?
• Une technologie développée par SUN Microsystems™ lancée
en1995
– Un langage de programmation
– Une plateforme , environnement logiciel dans lequel les
programmes java s'exécutent.
2
Le Langage Java
D’après SUN
http://java.sun.com/docs/white/langenv/
3
Exemple de programme en
Le code de la classe doit être
enregistré dans un fichier de JAVA Tout code java doit être défini à
même nom (casse comprise) l'intérieur d'une classe
que la classe
1
5
Compilation en Java → bytecode
6
La compilation fournit du bytecode
Compilateur
javac HelloWorld.java
javac SousRep/HelloWorld.java
8
Le langage Java
Un langage compilé & interprété
• Compilation d'un programme JAVA : génération de byte-code
9
Exécution du bytecode
10
Exécution avec java
11
Les JVM
12
Le bytecode peut être exécuté par
n'importe quelle JVM
Bytecode
UneClasse.class
WRITE ONCE
RUN EVERYWHERE
14
Une certaine lenteur...
15
Java et les autres langages
16
Spécifications de Java
17
Plate-forme Java
♠ Compilateur (javac)
♠ Débogueur (jdb)
20
Votre environnement de
développement
♠ Nombreux IDE (Integrated Development Environment)
commerciaux
JDeveloper
Oracle
Java Studio WebSphere Studio JBuilder
Creator Application Developper Borland Visual J++
Sunsoft (VisualAge) IBM Microsoft
22
Une classe Point
/** Modélise un point de coordonnées x, y */
public class Point {
private int x, y;
public Point(int x1, int y1) { // un constructeur
x = x1;
y = y1;
}
25
2 classes dans 2 fichiers
/** Modélise un point de coordonnées x, y */
public class Point {
private int x, y;
public Point(int x1, int y1) { Fichier Point.java
x = x1; y = y1;
}
27
Chargement dynamique des classes
28
Types de programmes Java
1- Applications indépendantes
29
Application indépendante
♠ Application doit posséder une classe principale
– classe possédant une méthode de signature
Tableau de chaînes de caractères
(équivalent à argc, argv du C)
public static void main(String[] args)
java TestPoint
30
Applet
♠ Classe ne possédant pas de méthode main()
• Elle est véhiculée vers un client http (navigateur Web) via une
page HTML qui contient son url
<html>
<head>
<title>Utilsation des applets</title>
</head>
<body>
<h1 align = "center">Utilisation des applets</h1>
<p align=center>
<applet code="Checkerboard.class"
height=640 width=640>
</applet>
</p>
</body>
<html> 33
Étapes pour l’exécution d’une applet
html
Client 2. Chargement de la page Web Serveur
http html
3. Demande chargement de l’applet
Navigateur HTTP
intégrant une référencée dans la page
machine .class
virtuelle Java 4. Chargement du bytecode de
La classe .class
3. Exécution de l’applet
dans la JVM du client
34
Exécution de l'applet
35
Utilité des applets
♠ Les applets permettent de faire des pages Web plus
riches (grâce aux possibilités offertes par Java)
SANS OBJETS
37
Lesson 1: Eléménts de base du langage
(Language Basics)
1. Variables (Variables)
2. Opérateurs (Operators)
Un identificateur est une séquence non limitée de caractères Unicode qui commence
par une lettre.
Le nom d’une variable est utilisé pour référencer la donnée que la variable contient
Le type d’une variable détermine quelles sont les valeurs que la variable peut contenir
et quelles opérations peuvent être effectuées sur la variable.
40
Variables
type name
En plus du nom et du type, une variable à un domaine de visibilité ou
SCOPE
41
Variables
Les sections ci-dessous explorent les différents aspects d’une variable
42
Types de données
(Data Types)
Par exemple:
Une variable de type int ne peut contenir que des valeurs entières (négatives ou
positives).
Sur une variable entière nous pouvons effectuer des opérations arithmétiques
(addition, soustraction …etc)
43
Types de données
Le langage Java contient deux catégories de types de données:
Types primitifs
Type référence
Types primitifs
Une variable de type primitif contient une valeur simple
(nombre, caractère, ou booléen).
Cette valeur est stockée en mémoire sur un nombre de bits déterminé et selon
un format bien précis.
Exemple:
Une variable de type int mémorise sa valeur sur 32 bits et utilise
la représentation en complément à 2
Une variable de type char mémorise sa valeur sur 16 bits et utilise le format Unicode
A variable of primitive type contains a value of a particular size and format. 44
Plus grandes valeurs des types primitifs
//real numbers
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
45
Plus grandes valeurs des types primitifs
} //fin de main
} // fin de la classe 46
Types de données primitifs
MotClé Description Taille/Format
Entiers
byte Entier signé sur un octet 8-bits : Complément à 2
short Entier signé sur 2 octets 16-bit : Complément à 2
int Entier signé sur 4 octets 32-bit : Complément à 2
long Entier signé sur 8 octets 64-bit : Complément à 2
Nombres réels
Réel en virgule flottante simple
float 32-bit IEEE 754
précision
Réel en virgule flottante double
double 64-bit IEEE 754
précision
Autres types
char Un seul caractère 16-bit : Unicode
boolean Valeur boolèene (true or false) true or false
47
Valeurs Litterales
Il est possible d’écrire directement une valeur littérale dans
votre programme.
Par exemple, pour assigner la valeur 20 à une variable de
type entier, vous pouvez écrire :
I = 20 ;
20 est une valeur littérale.
La valeur d’une variable de type référence est une référence (adresse de) à la
valeur à ou à l’ensemble des valeurs représenté par la variable.
Objet
Nom d’objet Référence Ou
tableau
Une référence est appelé Pointeur ou adresse dans les autres langages(C, …)
Le Langage Java n’autorise pas l’utilisation explicite des pointeurs.
1. Il doit consister en une suite illimitée de caractères unicode qui commence par
une lettre
2. Il ne doit pas être un mot clé, une valeur booléenne (true ou false) ou le mot
réservé null
3. Il doit être unique dans son Scope. Une variable peut avoir le même nom que
d’autres variables déclarées dans des Scopes différents.
51
Noms de variables
Par convention :
• Le nom d’une variable commence par une lettre minuscule, alors que celui
d’une classe commence par une lettre majuscule.
52
Scope d’une variable
54
Variable membre
(member variable)
Elle est déclarée à l’intérieur d’une classe mais en dehors de toute méthode ou
constructeur.
Nous étudierons en détail les variables membres dans une leçon ultérieure.
55
Variable locale
(local variable)
Le Scope d’une variable locale s’étend de l’endroit où elle est déclarée jusqu’à la
fin du bloc où elle est déclarée.
Toutes les variables déclarées dans la méthode main sont des variables locales.
Le Scope de ces variables s’étend de leur lieu de déclaration jusqu’à la fin de la
méthode main indiquée par l’accolade fermante }.
56
Paramètre de méthode
(method parameter)
Les paramètres sont utilisés pour passer des valeurs aux méthodes et aux
constructeurs.
57
Paramètres de gestionnaire d’exception
(exception-handler parameter)
58
Exemples de variables locales
Considérons le code ci-dessous:
if (...)
{
int i = 17; ...
}
System.out.println(« La valeur de i = " + i); // erreur
60
Variables « Finales »
(Final Variables )
On peut déclarer une variable de n’importe quel Scope comme étant final.
La valeur d’une variable final ne peut pas être modifié après son initialisation.
Pour déclarer une variable final, utilisez le mot clé final dans la déclaration de la
variable juste avant le type.
Exemple:
Final int aFinalVariable = 0
Cette instruction déclare une variable final et l’initialise une fois pour toute.
Si on essaie de lui assigner une autre valeur dans la suite du programme, le
compilateur engendrera une erreur.
61
Variables « Finales »
(Final Variables )
Une variable locale final qui a été déclarée sans être initialisée est appelé
variable « blank final ». Une fois cette variable est initialisée, toute tentative
future pour lui assigner une autre valeur engendrera une erreur lors de la
compilation.
62
Récapitulatif sur les variables
(Summary of Variables)
Lorsque vous déclarez une variable, vous devez spécifier explicitement son
type et son nom.
- types primitifs
- type références
63
Récapitulatif sur les variables
(Summary of Variables)
Il est possible d’affecter une valeur initiale à une variable lors de sa déclaration
à l’aide de l’opérateur d’affectation (=).
64
Questions et Exercises
Sur les Variables
Questions
Parmi les noms suivants soulignez ceux qui sont des noms de variables valides?
int
anInt
i
i1
1
thing1
1thing
ONE-HUNDRED
ONE_HUNDRED
something2do
65
Opérateurs
(Operators)
Un opérateur effectue une opération (ou fonction) sur un, deux ou trois
opérandes.
Un opérateur qui requiert un seul opérande est appelé opérateur unaire.
Par exemple, ++ est un opérateur unaire qui incrémente la valeur de son
opérande de 1.
66
Opérateurs
(Operators)
Tous les opérateurs binaires utilisent la notation infix, qui signifie que l’opérateur
apparaît entre ses opérandes.
Op1 opérateur op2 //notation infix
67
Opérateurs
(Operators)
Par exemple, les opérateurs arithmétiques tels que les opérateurs d’addition et
de soustraction retournent comme résultat un nombre dont le type dépend de
type de leurs opérandes.
68
Opérateurs
(Operators)
Opérateurs arithmétiques
Opérateurs d’affectation
Autres opérateurs
69
Opérateurs arithmétiques
(Arithmetic operators)
//subtracting numbers
System.out.println("Subtracting...");
System.out.println(" i - j = " + (i - j));
System.out.println(" x - y = " + (x - y));
//multiplying numbers
System.out.println("Multiplying...");
System.out.println(" i * j = " + (i * j));
System.out.println(" x * y = " + (x * y));
//dividing numbers
System.out.println("Dividing...");
System.out.println(" i / j = " + (i / j));
System.out.println(" x / y = " + (x / y));
72
//computing the remainder resulting
//from dividing numbers
System.out.println("Computing the remainder...");
System.out.println(" i % j = " + (i % j));
System.out.println(" x % y = " + (x % y));
//mixing types
System.out.println("Mixing types...");
System.out.println(" j + y = " + (j + y));
System.out.println(" i * x = " + (i * x)); } }
73
This is the output from the program.
Variable values...
i = 37
j = 42
x = 27.475
y = 7.22
Adding...
i + j = 79
x + y = 34.695
Subtracting...
i - j = -5
x - y = 20.255
Multiplying...
i * j = 1554
x * y = 198.37
Dividing...
i/j=0
x / y = 3.8054
Computing the remainder...
i % j = 37
x % y = 5.815
Mixing types...
j + y = 49.22
74
i * x = 1016.58
Types des résultats des Opérations Arithmétiques
75
Types des résultats des Operations Arithmétiques
Type du
Type des Opérandes
Resultat
Aucun opérande n’est de type float ou double (Arithmétique
long
entière); au moins un opérande est de type long.
Aucun opérande n’est de type float ou double (Arithmétique
int
entière); aucun opérande n’est de type long.
double Au moins un opérande est de type double.
Au moins un opérande est de type float; aucun opérande n’est
float
de type double.
76
Opérateurs Arithmétiques Unaires
77
Opérateurs d’incrémentation (++)
Et de décrémentation (--)
Chacun de ces deux opérateurs peut apparaître avant (prefix) ou après (postfix)
son opérande.
78
Exemple de programme utilisant ++ et
--
Le programme suivant, appelé SortDemo , utilise ++ deux fois -- une fois.
Ce programme place 10 valeurs entières dans un tableau qui est une structure
à longueur fixe et qui mémorise plusieurs valeurs de même type. Par la suite, le
programme les classe par ordre croissant à l’intérieur du dit tableau.
La ligne du code écrite en gras déclare un tableau de nom arrayOfInts, crée le
tableau puis l’initialise par les 10 valeurs entières.
Le programme utilise arrayOfInts.length pour obtenir le nombre d’éléments
dans le tableau.
Chaque élément est accessible par cette notation : arrayOfInts[index], où
index indique la position de l’élément à l’intérieur du tableau.
Notez que les indices commencent à 0. Vous trouverez plus de détails sur les
tableaux dans la section Tableaux.
Ce qui est important ici est le code qui est mis en gras, qui permet de répéter
l’exécution du corps de la boucle tant que la valeur retournée par --i est supérieur
ou égale à 0.
82
Détails sur le programme Précédent
Ce qui cause une erreur puisque i est utilisé comme indice du tableau,
Dans les deux cas, la version utilisée n’a pas réellement d’importance parce
que la valeur retournée par l’opérateur n’est utilisée pour aucune autre chose.
83
Récapitulatif sur les opérateurs d’incrémentation(++)
et de décrémentation (--)
84
Operateurs Relationnels et Logiques
Operateurs Relationnels
Opérateurs Relationnels pour les comparer. Ces opérateurs sont écrits en gras.
//greater than
System.out.println("Greater than...");
System.out.println(" i > j = " + (i > j)); //false
System.out.println(" j > i = " + (j > i)); //true
System.out.println(" k > j = " + (k > j)); //false , they are equal 86
//greater than or equal to
System.out.println("Greater than or equal to...");
System.out.println(" i >= j = " + (i >= j)); //false
System.out.println(" j >= i = " + (j >= i)); //true
System.out.println(" k >= j = " + (k >= j)); //true
//less than
System.out.println("Less than...");
System.out.println(" i < j = " + (i < j)); //true
System.out.println(" j < i = " + (j < i)); //false
System.out.println(" k < j = " + (k < j)); //false
//equal to
System.out.println("Equal to...");
System.out.println(" i == j = " + (i == j)); //false
System.out.println(" k == j = " + (k == j)); //true
87
//not equal to
System.out.println("Not equal to...");
System.out.println(" i != j = " + (i != j)); //true
System.out.println(" k != j = " + (k != j)); //false
}
}
88
Less than...
i < j = true
j < i = false
k < j = false
Less than or equal to...
i <= j = true
j <= i = false
k <= j = true
Equal to...
i == j = false
k == j = true
Not equal to...
i != j = true
k != j = false
89
Operateurs Logiques (ou conditionnels)
Les opérateurs relationnels sont souvent utilisés avec les opérateurs logiques
Le langage Java fournit six opérateurs logiques, 5 sont binaires et un est unaire
90
Operateurs Logiques (ou conditionnels)
91
Opérateurs de décalage et bit à bit
Operateurs de décalage
Le tableau ci-dessous présente les quatre opérateurs logiques fourni par Java pour
Effectuer des opérations bit à bit sur leurs opérandes
Operateurs Logiques
95
Opérateurs d’affectation
Le langage Java utilise l’opérateur = pour affecter une valeur à une variable.
l’opération d’affectation.
Supposez que vous voulez ajouter un nombre à une variable, et puis affecter le
i = i + 2;
Vous pouvez écrire de façon plus concise cette instruction en utilisant l’opérateur
+=.
96
Operateurs d’affectation
Le tableau suivant présente les différents opérateurs d’affectation fournis par Java.
97
Autres Opérateurs
Le langage Java fourni d’autres opérateurs qui sont fournis dans le tableau ci-dessous.
Operateur Utilisation Description
?: op1 ? op2 : op3 si op1 est true, retourne op2; sinon, reoturne op3
Voir Création et Utilisé pour déclarer un tableau, pour créer un
[] utilisation des tableau, et pour accéder aux éléments d’un
tableaux tableau.
Voir Utilisation des Utilisé pour former des noms longs (ou nom
.
Objets qualifiés)
Voir Définition des Delimite une liste de paramètres séparés par
(params)
méthodes des virgules
Convertit op vers le type spécifié; une
(type) (type) op exception est relevée si le type de op n’est pas
compatible avec type
Voir Utilisation des
Objets et Création
new Crée un nouveau objet ou tableau.
et Utilisation des
tableaux
instanceof op1 instanceof op2 Retourne true si op1 est une instance de op2.
98
Operateurs Java
Le tableau ci-dessous donne la liste complète des opérateurs du langage Java.
|| op1 || op2 Returns true if either op1 or op2 is true; conditionally evaluates op2
101
= op1 = op2 Assigns the value of op2 to op1
+= op1 += op2 Equivalent to op1 = op1 + op2
-= op1 -= op2 Equivalent to op1 = op1 - op2
*= op1 *= op2 Equivalent to op1 = op1 * op2
%= op1 %= op2 Equivalent to op1 = op1 % op2
&= op1 &= op2 Equivalent to op1 = op1 & op2
|= op1 |= op2 Equivalent to op1 = op1 | op2
^= op1 ^= op2 Equivalent to op1 = op1 ^ op2
<<= op1 <<= op2 Equivalent to op1 = op1 << op2
>>= op1 >>= op2 Equivalent to op1 = op1 >> op2
>>>= op1 >>>= op2 Equivalent to op1 = op1 >>> op2
102
If op1 is true, returns op2; otherwise, returns
?: op1 ? op2 : op3
op3
Voir Création et
Used to declare arrays, to create arrays, and
[] utilisation des
to access array elements
tableaux
Voir utilisation des
. Used to form long names
objets
Voir Définition des Delimits a comma-separated list of
(params)
méthodes parameters
Casts (converts) op to the specified type; an
(type) (type) op exception is thrown if the type of op is
incompatible with type
Voir utilisation des
objets et création
new Creates a new object or array
et utilisation
destableaux
Expressions
Les expressions sont utilisées pour calculer et affecter des valeurs aux variables.
d’un programme
104
Ordre de priorité des opérateurs
Soit l’expression:
4+7*2
Quel est le résultat de son évaluation? :
11 * 2 = 22 //évaluation du + en premier
ou
4 + 14 = 18 // évaluation de * en premier
Pour éviter cette ambiguité on peut utiliser les parenthèses: Par exemple :
(4 + 7) * 2 : donnera comme résultat 22 car l’expression entre parenthèse est
évaluée en premier
105
Ordre de Priorité des opérateurs dans l’ordre décroissant
Type d’opérateurs Priorité
postfix expr++ expr--
unaire ++expr --expr +expr -expr ~ !
multiplicatif * / %
additif + -
décalage << >> >>>
relationnel < > <= >= instanceof
egalité == !=
AND bit à bit &
XOR bit à bit ^
OR bit à bit |
AND logique &&
OR logique ||
Conditionnel ?:
Affectation = += -= *= /= %= &= ^= |= <<= >>= >>>=
106
Ordre de Priorité des opérateurs
Les opérateurs qui ont une priorité plus élevée s’évaluent avant ceux qui ont une
priorité relativement plus faible.
Les opérateurs qui se trouvent sur la même ligne ont la même priorité.
Lorsqu’une expression contient des opérateurs de même priorité, les opérateurs binaires,
excepté les opérateurs d’affectation, sont évalués de la gauche vers la droite ;
Exemple : 14 / 2 * 3 = 7 * 3 = 21
par contre les opérateurs d’affectation sont évalués de la droite vers la gauche.
107
Fonctions Mathématiques
3.To invert the value of a boolean, which operator would you use?
- Expressions d’affectation
- Appels de méthodes
111
De telles expressions sont appelées des instruction-expressions
Un bloc est un groupe d’instructions placées entre crochet {} et peut être utilisé
n’importe où une instruction simple est autorisée. Le code qui suit présente deux
else {
113
Instructions de contrôle d’exécution
Lorsque vous écrivez un programme, vous écrivez une suite d’instructions que vous
dans l’ordre ou elles apparaissent dans le fichier de gauche à droite et du haut en bas
114
Par exemple, dans la partie du code ci-dessous, l’instruction if exécute l’instruction
char aChar;
...
if (Character.isUpperCase(aChar)) {
115
Instructions de contrôle d’exécution
116
Format général d’une instruction de contrôle
Instruction(s)
Cependant, il est recommandé de toujours utiliser les accolades parce qu’elles rendent
le code plus facile à lire, et aident à éviter de faire des erreurs lorsqu’on modifie le
programme.
117