LOGO
Université Saad Dahlab
de Blida
Eléments de base de Java
Disponible sur: [Link]
Mme BOUTOUMI (b_boutoumi@[Link])
L2
2014 - 2015
Plan du cours
1. Présentation du langage Java
2. Les caractéristiques du langage Java
3. La plateforme Java
4. Compilation d’un programme java
5. Syntaxe de Java
6. Les variables dans Java
7. Références
2
1. Présentation du langage JAVA
• Une technologie développée par SUN Microsystems
lancée en 1995.
• Java est à la fois un langage de programmation et une
plateforme d’exécution ou environnement d’exécution.
• Une machine virtuelle JVM « Java Virtual Machine » qui
permet aux programmes Java de s’exécuter sur n’importe
quelle plateforme.
• JAVA est un langage de programmation orientée objet.
• Java hérite partiellement la syntaxe de C++ mais non ses
défauts (pointeurs, allocation, désallocation, héritage
multiple,...).
• Java 8 est la version actuelle de Java avec une
bibliothèque de 4000 classes.
3
2. Les caractéristiques de JAVA
• Java utilise les classes et les types de base.
•Java est facile à apprendre (syntaxe proche du C/C++
mais plus simple).
•Java est portable (indépendant de toute plate-forme).
•Java est fiable(fortement typé et pas de pointeurs en
apparence).
•Java est sûr (Mécanisme d’exception, vérification du code
à l’exécution et des accès réseau et/ou fichiers).
• Récupération automatique de la mémoire inutilisée
(Garbage Collector).
•Interdiction de manipulation des adresses via des pointeurs
qui est souvent source d'erreurs.
• Des contrôles lors de l'exécution (exemple : dépassement
de la taille d'un tableau). 4
3. La plateforme de JAVA (1)
• Plateforme = environnement matériel ou logiciel sur lequel le
programme est exécuté.
• La plateforme Java se compose de:
la Java Virtual Machine (JVM) ou la machine virtuelle
Java.
l’interface de programmation Java ou Java Application
Programming Interface (Java API)
Programme Java
API Java
Plateforme
Machine Virtuelle Java Java
Plateforme de base matériel
5
3. La plateforme de JAVA (2)
• API Java
• Une vaste collection de composants logiciels (classes et
interfaces).
• Organisée en bibliothèques (packages).
• Offre de nombreux services de manière standard
(indépendamment de la plateforme matérielle).
• Exemple de packages
•[Link]: gestion des chaînes de caractères (String), interaction
avec l’OS (System), programmation parallèle (Thread).
• [Link]: parseur de chaîne, Liste, Dictionnaires, HashTable,…
• [Link]: gestion des entrées/Sorties (écran, clavier, fichier).
• [Link]: gestion des applets.
•[Link] et [Link]: gestion de l’interface graphique:
Fenêtres, boutons, boites de dialogue, événements souris,..
6
3. La plateforme de JAVA (3)
• La Machine Virtuelle Java (JVM) se charge
d'abstraire le comportement d'une machine.
• Le programme n’est pas traduit en langage machine, mais dans
un pseudo langage universel qui dispose de toutes les
fonctionnalités communes à toutes les machines: byte code.
Le byte code est un langage proche du langage machine,
indépendant de la plateforme (Matériel + Système
d’exploitation)
• Pour exécuter un programme java sur une machine, il suffit
qu’elle dispose d’un programme approprié , machine virtuelle,
pour interpréter le bytecode.
• La machine virtuelle (JVM pour Java Virtual Machine) sert de
passerelle entre le byte code et le langage machine.
7
3. La plateforme de JAVA (4)
Dans la technologie Java, on a donc besoin :
• Langage de programmation,
• Compilateur,
• JVM,
• APIs Java,
Les différentes éditions de Java:
• Java SE (Java Platform, Standard Edition): J2SE pour
applications classiques, desktop Compilateur,
• Java EE (Java Platform, Enterprise Edition): J2EE pour
développer et déployer des applications serveur, Web services,
etc. APIs Java
• Java ME (Java Platform, Micro Edition): J2ME pour les
applications embarquées, PDA, téléphones, etc.
• On veut juste exécuter, il suffit du JRE (Java Runtime
Execution) par opposition au JDK (Java Developpement Kit).
8
4. Compilation d’un programme Java
Interprétation
Compilation Windows
[Link] [Link]
Code source Byte Code Linux
Mac
9
5. Syntaxe de Java (1)
• S’appuie sur la syntaxe du langage C Chaque objet, classe, programme ou
• Structure: variable est associé à un nom :
l'identificateur, qui peut se composer
//déclaration des bibliothèques de tous les caractères
import nom_bib; alphanumériques et des caractères _ et
// Tout en Java est une classe $. Le premier caractère doit être une
lettre, le caractère de soulignement ou
class Nom_de_la_classe le signe dollar.
{//début
//déclaration des attributs & variables globales
…
// méthodes (fonction) utilisés
..
//le programme principale (celui qui s’exécute) doit contenir une
méthode main Règles de base:
public static void main (String[] args) { - Les blocs de code sont
encadrés par des accolades.
// liste des instructions séparées par « ; » - Chaque instruction se termine
} par un caractère ';' (point virgule).
- Java est sensible à la casse:
} // fin 10
void<>Void
5. Syntaxe de Java (2)
Exemple :
• Lancer Eclipse
• Creér :le workspace, le projet et la classe Hello on cochant la case
indiquant que l'on souhaite qu'elle contienne une méthode main :
public class Hello
{
public static void main(String[] args) {
// afficher
[Link]("Hello World!");
} // fin du main
} // fin de la classe Hello
• Compléter la méthode main par « [Link]("Hello World!");»
• Exécuter.
• Java Hello
11
6. Les variables dans Java
• Déclaration
• Une variable possède un identificateur, un type et une
valeur.
• La déclaration d'une variable doit donc contenir deux choses :
un nom et le type de données qu'elle peut contenir.
• Type
• Soit un type élémentaire, primitif , déclaré sous forme :
• type_élémentaire variable;
• Soit un objet appartenant à une classe, sous la forme:
• classe variable ;
• Exemple
• long nombre;
• int compteur;
• String chaine;
• int jour, mois, annee; 12
7. Les types élémentaires de Java
Type Désignation Longueur Valeurs Commentaires
pas de conversion
valeur logique :
boolean 1 bit true ou false possible vers un autre
true ou false
type
byte octet signé 8 bits -128 à 127
short entier court signé 16 bits -32768 à 32767
caractère entouré de cotes simples
char 16 bits \u0000 à \uFFFF
Unicode dans du code Java
int entier signé 32 bits -2147483648 à 2147483647
virgule flottante
float 32 bits 1.401e-045 à 3.40282e+038
simple précision
virgule flottante 2.22507e-308 à
double 64 bits
double précision 1.79769e+308
-9223372036854775808 à
long entier long 64 bits
9223372036854775807
NAN
Not A Number Ce sont des valeurs
Infinity,
Infinie spéciales
-Infinity
13
7. Les types élémentaires de Java
• Excercice 1
public class Excep Infinity divise par 0.0 = Infinity
{ 15.0 divise par 0.0 = Infinity
public static void main (String args[]) 0.0 divise par 0.0 = NaN
{
double x1 = 1e200, x2 = 1e210 , y, z ;
NaN+1 = NaN
y = x1*x2 ; Infinity/-Infinity = NaN
[Link] ("valeur de y " + y) ;
x2 = x1 ;
z = y/(x2-x1) ;
[Link] (y + " divise par " + (x2-x1) + " = " + z) ;
y = 15 ;
z = y/(x2-x1) ;
[Link] (y + " divise par " + (x2-x1) + " = " + z) ;
z = (x2-x1)/(x2-x1) ;
[Link] ((x2-x1) + " divise par " + (x2-x1) + " = " + z) ;
[Link] (z + "+1 = " + (z+1)) ;
x1 = Float.POSITIVE_INFINITY ;
x2 = Double.NEGATIVE_INFINITY ;
z = x1/x2 ;
[Link] (x1 + "/" + x2 + " = " + z) ;
}
}
14
7. Les types élémentaires de Java
Remarques
En Java aucune opération sur les flottants ne conduit à
un arrêt de l’exécution.
Les nombres flottants respectent les conventions IEEE
754 qui imposent l’existence d’un motif particulier
représentant les valeurs infinies, lequel s’imprime sous
la forme Infinity ou -Infinity. Les constantes
correspondantes se notent [Link] ou
[Link].
De même, il existe un motif particulier représentant une
valeur non calculable ; il peut s’obtenir par [Link] ou
[Link] et il s’imprime sous la forme NaN.
15
8. Initialisation des variables
En Java, toute variable est initialisée avec une valeur par
défaut en accord avec son type.
Les valeurs par défaut lors de l'initialisation automatique
sont :
Type Valeur par défaut
boolean false
byte, short, int, long 0
float, double 0.0
char \u000
classe null
16
9. Affectation
Le signe = est l'opérateur d'affectation et s'utilise avec
une expression de la forme variable = expression.
Exemple : x = y = z = 0;
Si opération sur des opérandes de types différents, le
compilateur détermine le type du résultat en prenant le
type le plus précis des opérandes.
Exemple:
• une multiplication d'une variable de type float avec
une variable de type double donne un résultat de
type double.
• une opération entre un opérande entier et un
flottant, le résultat est du type flottant.
17
Exercice 2
Soit ces déclarations :
byte b1 = 10, b2 = 20 ;
short p = 200 ;
int n = 500 ;
long q = 100 ;
float x = 2.5 f;
double y = 2.0 ;
char c = 60, ce = 'e', cg = 'g' ;
Donner le type et la valeur des expressions suivantes :
1. b1+b2
2. p+b1
3. b1*b2
4. q+p*(b1+b2)
5. x+q*n
6. b1*q/x
7. b1*q*y/x
8. c+1
9. 2*c
10. cg – ce
11. b 1* c
18
Solution
1. b1+b2 = 30
L’opérateur + soumet les valeurs de b1 et b2 à la promotion numérique de byte en int.
Le résultat est de type int
2. p+b1 = 210
de short en int pour p et de byte en int pour b1. Le résultat est de type int.
3. b1*b2 = 200 de byte en int. Le résultat est de type int.
4. q+p*(b1+b2) = 6100 Le résultat final est de type long.
5. x+q*n =50002.5 Le résultat est de type float.
6. b1*q/x=400.0 Le résultat est de type float.
7. b1*q*y/x=800.0 Le résultat est de type double.
8. c + 1 = 61
c de char en int, ce qui fournit la valeur 60. ( la valeur de la variable c est non pas
60, mais l’entier dont le code (Unicode) est égal à 60).
Le résultat est de type int.
9. 2 * c = 120 Le résultat est de type int.
10. cg – ce =2
un résultat de type int représente l’écart entre les codes des caractères g et e (dans le
code Unicode, les lettres consécutives d’une même casse ont des codes consécutifs).
b 1* c = 600
b1 de byte en int, c de char en int. Le résultat est de type int.
19
Exercice 3
Soit ces déclarations :
byte b ; short p ; char c ; int n ; float x ;
Parmi les expressions suivantes, lesquelles sont
incorrectes et pourquoi ?
1. c=c+1
2. c++
3. c +=3
4. b += c
5. p += b
6. p=p+b
7. n += x
8. n=n+x
9. x++ ;
20
Solution
byte b ; short p ; char c ; int n ; float x ;
1. c=c+1 Erreur
L’expression c+1 est du type int qui ne peut pas être converti en char par affectation.
2. c++ OK
Ici, l’opérateur ++ applique son incrémentation de 1 directement à la variable c de type char.
Aucune conversion n’est mise en jeu.
3. c += 3 OK
Cette expression est en fait équivalente à c=(char) (c+3) et non simplement à c=c+3. Dans ces conditions,
elle évalue bien l’expression c+3 dans le type int mais elle en force ensuite la conversion en char. Notez
bien que l’affectation c=c+3 serait illégale.
4. b += c OK
Cette expression est équivalente à b = (byte) (b+c).
5. p += b OK
Cette expression est équivalente à p = (short) (p+b).
6. p=p+b Erreur
La valeur de l’expression p+b est de type int (les deux opérandes de + sont soumis aux promotions
numériques en int).
Elle ne peut pas être convertie en short par affectation. Notez la différence avec l’expression précédente.
7. n += x OK
Cette expression est équivalente à n = (int) (n+x). Notez cependant qu’on emploie rarement l’opérateur +=
de cette manière.
8. n=n+x Erreur
L’expression n+x est de type float et sa valeur ne peut pas être convertie par affectation en int.
9. x++ OK
Cette expression joue le même rôle que x=x+1. En pratique, on emploie rarement les opérateurs
d’incrémentation ou de décrémentation sur des variables flottantes. 21
9. Les structures de contrôles
Les boucles
While
while ( boolean )
{
... // code a exécuter dans la boucle
}
Do..While
do {
...
} while ( boolean )
22
9. Les structures de contrôles
Les boucles
For
for (initialisation; condition; modification) {
...
}
Exemple :
for (i = 0 ; i < 10; i++ ) { ....}
for (int i = 0 ; i < 10; i++ ) { ....}
Il est possible d'inclure plusieurs traitements dans l'initialisation et la
modification de la boucle : chacun des traitements doit être séparé
par une virgule.
Exemple : for (i = 0 , j = 0 ; i * j < 1000;i++ , j+= 2) { ....}
23
Exercice 4
Soit le programme suivant :
public class Exo4
{
public static void main(String[] args)
{
int i, som ;
som = 0 ;
for (i=0 ; i<4 ; i++)
{
som += i ;
}
[Link] ("Somme : " + som) ;
}
}
Écrire un programme réalisant la même chose en employant à la
place de for :
une instruction while,
une instruction do... while.
24
Solution
Avec une instruction while : Avec une instruction do... while :
public class Exo4 public class Exo4
{ {
public static void main(String[] args) public static void main(String[] args)
{ {
int i, som ; int i, som ;
som = 0 ; som = 0 ;
i=0; i=0;
while (i<4) do{
{ som += i ;
som += i ; i++ ;
i++ ; }
}
while (i<4) ;
[Link] ("Somme : " + som) ;
[Link] ("Somme : " + som) ;
}
}
}
}
25
9. Les structures de contrôles
Le Conditionnel (IF – ELSE)
La structure "if" ("si") La structure "else-if"
if (condition) { if (condition1) {
instruction 1; …
… }
}
else if (condition 2) {
La structure "if-else" ("si-
sinon") …
if (condition) { }
… else if (condition 2) {
} …
else }
{ else {
… …
} } 26
Exercice 5
Quels résultats fournit ce programme ?
public class Exo5
{
public static void main (String args[]) Résultats
{
int i=10, j=5 ; &&1 faux
if (i<5 && j++<10) [Link] ("&&1 vrai") ; i = 10 j = 5
else [Link] ("&&1 faux") ;
[Link] ("i = " + i + " j = " + j) ; &&2 vrai
if (i<5 & j++<10) [Link] ("& vrai") ; i = 10 j = 7
else if (i<15 && j++<10) [Link] ("&&2 vrai") ;
else if (i<15 || j++<10) [Link] ("|| vrai") ;
else [Link] ("|| faux") ;
[Link] ("i = " + i + " j = " + j) ;
}
}
27
9. Les structures de contrôles
Le Conditionnel (SWITCH)
On ne peut utiliser
switch( expression ) { switch qu'avec des types
case valeur1: primitifs d'une taille
... maximum de 32 bits
break; (byte, short, int, char).
case valeur2:
... Si une instruction case
break; ne contient pas de break
… alors les traitements
associés au case
default: suivant sont exécutés.
...
} Il est possible
d'imbriquer des switch
28
Exercice 6
Soit le programme suivant : Résultats
import [Link];
public class Exo6 // avec la valeur 0
{ Nul
public static void main(String[] args)
Petit
{
Scanner sc = new Scanner([Link]);
n= [Link](); // avec la valeur 1
switch (n) Petit
{
case 0 : [Link] ("Nul") ; // avec la valeur 4
case 1 : Moyen
case 2 : [Link] ("Petit") ;
Grand
break ;
case 3 :
case 4 : // avec la valeur 10
case 5 : [Link] ("Moyen") ; Grand
default : [Link] ("Grand") ;
} // avec la valeur -5
}
Grand
}
Quels résultats affiche-t-il lorsqu’on lui fournit en donnée : 0, 1, 4, 10, -5.
29
10. Les tableaux
Les tableaux a une dimension
Déclaration d'une variable de type tableau :
int [ ] table1; OU int table1[ ];
char [ ] table2;
float [ ] table3;
...
String [ ] tableStr;
Déclaration d'une variable de tableau avec
définition explicite de taille :
int [ ] table1 = new int [5];
char [] table2 = new char [12];
float [ ] table3 = new float [8];
...
String [ ] tableStr = new String [9];
30
10. Les tableaux
Les tableaux a une dimension
La déclaration et la définition de taille peuvent être séparés,
La définition peut être mise n'importe où dans le corps d'instruction,
mais elle doit être utilisée avant toute manipulation du tableau. Cette
dernière instruction de définition peut être répétée plusieurs fois
dans le programme, il s'agira alors à chaque fois de la création
d'un nouvel objet (donc un nouveau tableau), l'ancien étant
détruit et désalloué automatiquement par le ramasse-miettes
(garbage collector) de Java.
int [ ] table1; char [ ] table2;
float [ ] table3; String [ ] tableStr;
……..
table1 = new int [5];
table2 = new char [12];
table3 = new float [8];
tableStr = new String [9];
31
10. Les tableaux
Les tableaux a une dimension
Déclaration et initialisation d'un tableau avec définition
implicite de taille :
int [ ] table1 = {17,-9,4,3,57};
char [ ] table2 = {'a','j','k','m','z'};
float [ ] table3 = {-15.7f,75,-22.03f,3,57};
String [ ] tableStr =
{"chat","chien","souris","rat","vache"};
Dans cette éventualité Java crée le tableau, calcule sa taille
et l'initialise avec les valeurs fournies.
Il existe un attribut général qui contient la taille d'un tableau
quelque soit son type, c'est l'attribut length.
Le premier élément d'un tableau est numéroté 0, le dernier
length-1.
32
10. Les tableaux
Les tableaux a plusieurs dimensions
En Java la notion de tableau à plusieurs dimension n’existe pas.
Pour manipuler un tableau à à plusieurs dimensions : il faut
déclarer un tableau de tableau.
Exemple : float tableau[][] = new float[10][10];
Cela permet de déclarer des tabelaux irréguliers, c’est-à-dire, la
taille des tableaux de la seconde dimension peut ne pas être
identique pour chaque occurrence.
Exemple :
int dim1[][] = new int[3][];
dim1[0] = new int[4];
dim1[1] = new int[9];
dim1[2] = new int[2];
int tableau [3][2] = {{5,1},{6,2},{7,3}};
int[][] tabEntiers = {{1,2,3,4,5,6}, {1,2,3,4}, {1,2,3,4,5,6,7,8,9}};
33
10. Les tableaux
Parcours et argument
Parcours d’un tableau
for (int i = 0; i < [Link] ; i ++) { ... }
• La variable length retourne le nombre d'éléments du tableau.
• Un accès a un élément d'un tableau qui dépasse sa capacité, lève une
exception du type [Link].
Tableau en argument
• Pour passer un tableau à une méthode, il suffit de déclarer les
paramètres dans l'en tête de la méthode
Exemple : public void printArray(String texte[]){ ... }
• Les tableaux sont toujours transmis par référence puisque ce sont des
objets (à voir plus tard)
34
Exercice 7
Écrire un programme qui :
Déclare un tableau T de 10 valeurs
entières,
Calcule et affiche le minimum, le
maximum et la moyenne de T,
35
Solution
public class Tabint
{
public static void main (String args[])
{
int T [] = {10, 5, 30, 10,50,15,25,25,80,40};
int i ;
int Max = T[0], Min = T[0], somme=0 ;
Taille=[Link];
for (i=0 ; i<Taille ; i++)
{
if (T[i] > Max) Max = T[i] ;
if (val[i] < Min) Min = T[i] ;
somme += T[i] ;
}
[Link] ("valeur maximale = " + Max) ;
[Link] ("valeur minimale = " + Min) ;
double Moy = somme/Taille ;
[Link] ("moyenne " + Moy) ;
}
} 36
11. Les chaines de caractères
• Le type de données String (chaîne de caractère) est une classe.
• Une chaîne de type String est un objet.
• Les chaînes de caractère figurent entre guillemets.
• Un objet String n'est utilisable qu'à travers les méthodes de la
classe String.
• Il est impossible de modifier le contenu d'un objet String construit
à partir d'une constante. Cependant, il est possible d'utiliser les
méthodes qui renvoient une chaîne pour modifier le contenu de la
chaîne.
Exemple : String texte = ''Java Java Java'';
texte = [Link]('a','o');
• Java fonctionne avec le jeu de caractères Unicode (Universal
Code). Ceci concerne les types char et les chaînes de caractères.
•Le jeu de caractères Unicode code un caractère sur 2 octets. Les
caractères 0 à 255 correspondent exactement au jeu de caractères
ASCII.
37
11. Les chaines de caractères
Jeu de caractères spéciaux
Caractères spéciaux Affichage
\' Apostrophe
\'' Guillemet
\\ anti slash
\t Tabulation
\b retour arrière (backspace)
\r retour chariot
\f saut de page (form feed)
\n saut de ligne (newline)
38
11. Les chaines de caractères
Concaténation
L'opérateur + permet de concaténer plusieurs chaînes.
String texte = "Hello"+ " ";
texte += "World";
Cet opérateur sert aussi à concaténer des chaînes avec
tous les types de bases. La variable ou constante est
alors convertie en chaîne et ajoutée à la précédente.
[Link](" La valeur de Pi est : " +[Link]);
int duree = 121;
[Link](" durée = " +duree);
39
11. Les chaines de caractères
Autres Opérations
Comparaison de deux chaines: Il faut utiliser la méthode equals()
String texte1 = " texte 1 ";
String texte2 = " texte 2 ";
if ( [Link](texte2) ) ...
Détermination de la longueur d'une chaîne
La méthode length() permet de déterminer la longueur d'une chaîne.
Exemple: String texte = " texte ";
int longueur = [Link]();
Modification de la casse d'une chaîne
toUpperCase() permet d'obtenir une chaîne tout en majuscule
toLowerCase() permet d'obtenir une chaîne tout en minuscule.
Exemple: String texte = " texte ";
String textemaj = [Link]();
40
12. Les conversions de types
Conversion d'un entier int en chaîne de caractères String
Exemple : int i = 10;
String texte = new String();
texte = [Link](i);
valueOf est également définie pour des arguments de type boolean,
long, float, double et char
Conversion d'une chaine de caractères String en entier int
Exemple : String texte = new String(« 10 »);
Integer nombre = new Integer(texte);
int i = [Link](); //convertion d'Integer en int
Conversion d'un entier int en entier long
Exemple int i=10;
Integer monnombre=new Integer(i);
long j=[Link]();
41
13. Les entrées sorties
Affichage sur console
• Affichage sur la console
[Link](chaîne de caractères à afficher)
[Link](chaîne de caractères à afficher)
• chaîne de caractères peut être :
• une constante chaîne de caractères (String)
[Link]("coucou");
• une expression de type String
[Link](age);
• une combinaison (concaténation) de constantes et d'expressions
de type String. La concaténation est exprimée à l'aide de
l'opérateur +
[Link]("L'age de la personne est " + age + " son
poids " + poids);
42
13. Les entrées sorties
Lecture à partir du clavier
• La classe Scanner simplifie la lecture de données sur l’entrée
standard clavier.
• Pour utiliser la classe Scanner, il faut d’abord l’importer:
import [Link];
• Ensuite il faut créer un objet de la classe Scanner :
Scanner sc = new Scanner([Link]);
43
13. Les entrées sorties
Lecture à partir du clavier
Méthodes de l’objet Désignation
string
String next() donnée de la classe String qui forme un mot,
String nextLine() donnée de la classe String qui forme une ligne,
boolean nextBoolean() donnée booléenne,
int nextInt() donnée entière de type int,
double nextDouble() donnée réelle de type double.
44
13. Les entrées sorties
Exemple:
import [Link];
public class Addition
{
public static void main( String args[] ) {
Scanner sc = new Scanner( [Link] );
int n1,n2,somme;
[Link](" Donner le premier entier: " );
n1 = [Link]();
[Link](" Donner un deuxième entier: " );
n2 = [Link]();
somme = n1 + n2;
[Link]( "Somme est %d\n", sommme );
}}
45
6. Références bibliographiques
[Link]
[Link]
[Link]
/JCours/[Link]