Vous êtes sur la page 1sur 29

Pourquoi utiliser une plateforme

 Une plateforme est une base générique qui


 fournit un ensemble de fonctionnalités utiles pour une majorité
d’applications
se construit sur la base d’un ensemble de besoins génériques partagés entre
La plateforme Java 
plusieurs applications
Mahmoud EL HAMLAOUI  Parmi les avantages
Enseignant chercheur  facilité de prise en main des fonctionnalités de cette plateforme
 pas d’intérêt à recoder des fonctionnalités communes et récurrentes
 gain de temps et d’argent

"To persuade me of the merit of your language,


you must show me how to construct models in it."
03/01/2021 EL HAMLAOUI Mahmoud
1978 Turing Award Lecture 1 03/01/2021 EL HAMLAOUI Mahmoud 2

La nébuleuse JAVA Version de Java

 Java Framework est composé de trois éditions, destinées à des


usages différents
 Java Micro Edition
 développement d’applications embarquées
 Java Standard Edition
 développement d’applications classiques
 Java Entreprise Edition
 développement d’application d’entreprise

https://www.oracle.com/java/technologies/javase-downloads.html
03/01/2021 EL HAMLAOUI Mahmoud 3 03/01/2021 EL HAMLAOUI Mahmoud 4

Mahmoud EL HAMLAOUI 1
JVM Vs. JDK Vs. JRE Configuration JDK ou JRE

 JVM (Java Virtual Machine)  Démo


 Exécute les bytecodes Java  Inclure les variables d’environnement dans le $PATH.
 Implémentations spécifiques de la JVM pour différents OS.
 « write once, run anywhere ».
 JRE (Java Runtime Environnement)
 Fournit la JVM, les bibliothèques et autres composants.
 JDK (Java Development Kit)
 JRE + Compilateur (javac) + Outils (javadoc, jdb).

03/01/2021 EL HAMLAOUI Mahmoud 5 03/01/2021 EL HAMLAOUI Mahmoud 6

Librairies et programmes Compilation et exécution

API (Application Programming


Interfacce) : Bibliothèques Java
standards sur lesquelles peut
s’appuyer le programmeur.

03/01/2021 EL HAMLAOUI Mahmoud 7 03/01/2021 EL HAMLAOUI Mahmoud 8

Mahmoud EL HAMLAOUI 2
Premier programme IDEs Java

 Fichier Hello.java  Existe de nombreux IDE (Integrated Development


Environement) pour java
public class Hello {
 Editeur syntaxique, auto-complétion, compilateur, débogueur, …
public static void main(String[] args) {
System.out.println(“Mon programme”);
}
}
 Compilation :
 javac Hello.java
 Produit le bytecode dans un fichier
 Execution du bytecode
 java Hello
03/01/2021 EL HAMLAOUI Mahmoud 9 03/01/2021 EL HAMLAOUI Mahmoud 10

Demo

 Réaliser l’exercice précédent sous Eclipse.

Eléments de base du langage

03/01/2021 EL HAMLAOUI Mahmoud 11 03/01/2021 EL HAMLAOUI Mahmoud 12

Mahmoud EL HAMLAOUI 3
Commentaires Déclaration de variable

 // afficher un commentaire monoligne,  Pour pouvoir utiliser une variable, il faut la définir.
 /* commentaire  Lui donner un nom,
 Un type de donnée à stocker afin qu'un espace mémoire conforme au type
sur plusieurs de donnée qu'elle contient lui soit réservé.
lignes */
 /**
 * Ceci est un commentaire javadoc du professeur EL
HAMLAOUI.
 */

03/01/2021 EL HAMLAOUI Mahmoud 13 03/01/2021 EL HAMLAOUI Mahmoud 14

Types de données Types primitifs

Type Taille en bit Valleur Min. Valeur Max. Valeur


initiale
boolean 1 False
byte 8 -27 27-1 0
char 16 0 ('\u0000‘) 216-1 (‘\u0000’) '\u0000'
short 16 -215 215-1 0
int 32 -231 231-1 0
float 32 -231 231-1 0.0F
long 64 -263 263-1 0L
double 64 -263 263-1 0.0

03/01/2021 EL HAMLAOUI Mahmoud 15 03/01/2021 EL HAMLAOUI Mahmoud 16

Mahmoud EL HAMLAOUI 4
Nom de variable Nom de variable (mots réservés)

 Doit commencer par une lettre A-Za-z ou ‘_ ’,


abstract assert boolean break byte case
 Peut comporter des lettres, des chiffres et le caractère ‘_’;
catch char class const continue default
 Pas de limite sur le nombre de caractère, double do else enum extends false
 Toutefois le compilateur ne tiendra compte "que" des 247 premiers
final finally float for goto if
caractères.
implements import instanceof int interface long
 Sensible à la casse. native new null package private protected
public return short static strictfp super
switch synchronized this throw throws transient
true try void volatile while

03/01/2021 EL HAMLAOUI Mahmoud 17 03/01/2021 EL HAMLAOUI Mahmoud 18

Syntaxe Constantes

 Déclaration :  Déclaration de constantes avec le mot clé final.


 final String BASE_PATH = ‘’/Home’’;
int tata;
float tata, titi;  final N = 7;
boolean tutu;  Expression constante :
 final M = N +13;
 Déclaration & initialisation :
 L’initialisation d’une variable déclarée final peut être reportée
mais la variable ne reçoit de valeur qu’une seule fois.
int toto = 7;
float tata = 1,35, titi = 7,9;

03/01/2021 EL HAMLAOUI Mahmoud 19 03/01/2021 EL HAMLAOUI Mahmoud 20

Mahmoud EL HAMLAOUI 5
Bonnes pratiques Opérateurs de calcul

 Les opérateurs de calcul permettent de modifier


mathématiquement la valeur d'une variable.
Opérateur Dénomination Exemple Résultat
+ Opérateur d'addition x+3 3
- Opérateur de soustraction x-1 2
* Opérateur de multiplication x*3 6
/ Opérateur de multiplication x/3 2
% Opérateur modulo x%3 2
++ Incrémentation x++ 3
-- Décrémentation x-- 2

https://www.oracle.com/technetwork/java/codeconventions-150003.pdf

03/01/2021 EL HAMLAOUI Mahmoud 21 03/01/2021 EL HAMLAOUI Mahmoud 22

Opérateurs de comparaison Pre/Post incrementation

 Les opérateurs de calcul permettent de modifier  Pre-increment


mathématiquement la valeur d'une variable.  La valeur de la variable est d’abord augmentée, puis le résultat est calculé.
Opérateur Exemple Résultat  Exemple : ++a,
== x==3 Retourne True si X est égal à 3, sinon False  Post-increment
< x<3 Retourne True si X est inférieur à 3, sinon False
 La valeur de la variable est d’abord calculée, puis incrémentée.
<= Retourne True si X est inférieur ou égal à 3,
x<=3  Exemple : a++.
sinon False
> x>3 Retourne True si X est supérieur à 3, int x = 7:
sinon False
int y = x++;
>= x>=3 Retourne True si X est supérieur ou égal à 3,
sinon False int z = ++x;
!= x!=3 Retourne True si X est différent de 3,
sinon False

03/01/2021 EL HAMLAOUI Mahmoud 23 03/01/2021 EL HAMLAOUI Mahmoud 24

Mahmoud EL HAMLAOUI 6
Opérateurs logiques Opérateurs d’affectation
 Ces opérateurs effectuent des comparaisons sur leurs
opérandes.  Ces opérateurs permettent de simplifier des opérations.
 Le résultat renvoyé est false si la condition n’est pas vérifiée, Opérateur Equivalent à
 Il est égal à true dans le cas contraire. += a += b equivalent à a = a + b
-= a -= b equivalent à a = a - b
Opérateur Dénomination Exemple
*= a *= b equivalent à a = a * b
|| OU logique (a == b) || (c > d)
/= a /= b equivalent à a = a / b
&& ET logique (a == b) && (c > d)
%= a %= b equivalent à a = a % b
! NON logique !(a == b)
… …

variable = variable opérateur expression  variable opérateur = expression

03/01/2021 EL HAMLAOUI Mahmoud 25 03/01/2021 EL HAMLAOUI Mahmoud 26

Opérateurs de cast Opérateurs de cast

 2 seuls cas sont autorisés  Cast implicite possible s’il n’y a pas une perte de valeur
 Entre types primitifs, (Conversion élargissante),
 Entre classes mère et classe fille (héritage).  byte -> short -> int -> long -> float -> double,
 Cast entre types primitifs peut occasionner des pertes de
données,
 Conversion rétrécissante
 Int -> short.
 Cast peut provoquer une simple perte de précision.
 Conversion entre un long vers un float peut faire perdre des chiffres
significatifs mais pas l’ordre de grandeur,
 Les casts types flottants ver les types entiers tronquent les nombres.

03/01/2021 EL HAMLAOUI Mahmoud 27 03/01/2021 EL HAMLAOUI Mahmoud 28

Mahmoud EL HAMLAOUI 7
Tests : if … else
 Syntaxe
if (condition)
instruction
Instructions de contrôle [else
instruction]
 Exemple
int x = 3
if (x < 0)
{
System.out.println(“x < 0”);
}
else
System.out.println(“x > 0”);
03/01/2021 EL HAMLAOUI Mahmoud 29 03/01/2021 EL HAMLAOUI Mahmoud 30

Tests : switch Tests : switch


 Exemple
 Syntaxe int jours = 7;
switch (jours) {
switch (expression) {
case 1:
case constante_1 : [instruction]
System.out.println("Lundi"); break;
case constante_2 : [instruction]
case 2:
...
case constante_n : [instructio]  ExempleSystem.out.println("Mardi"); break;
 Exemple
[ default : instruction ]
case 3:
System.out.println("Mercredi"); break;
}
case 4:
System.out.println("Jeudi"); break;
case 5:
System.out.println("Vendredi"); break;
case 6:
case 7:
System.out.println("Weekend!"); break;
default:
System.out.println("Valeur erronée");
03/01/2021 EL HAMLAOUI Mahmoud 31 03/01/2021 } EL HAMLAOUI Mahmoud 32

Mahmoud EL HAMLAOUI 8
Tests : Opérateur ternaire Boucles : while
 Syntaxe  Syntaxe
( condition ? condition_true : condition_false) while (condition)
instruction
 Exemple
 Exemple
j = (i > 3 ? x : y)
int x = 3
while (x > 0)
{
System.out.println(x);
x--;
}

03/01/2021 EL HAMLAOUI Mahmoud 33 03/01/2021 EL HAMLAOUI Mahmoud 34

Boucles : do … while Boucles : for


 Syntaxe
 Syntaxe
do for ([initilalisation]; [condition]; [pas])
instruction instruction
while (condition)
 Exemple
 Exemple for (int i = 0 ; i < 8 ; i++) {
int x = 3 System.out.println(i);
do }
{ System.out.println(‘’Done ’’);
System.out.println(x);
x--;
} while (x>0);

03/01/2021 EL HAMLAOUI Mahmoud 35 03/01/2021 EL HAMLAOUI Mahmoud 36

Mahmoud EL HAMLAOUI 9
for vs. while Branchements : break

 Ecrire l’exemple ci-dessous avec la boucle while  Le mot clé break sert à interrompre le déroulement de la
boucle en passant à l’instruction suivante.
for (int i = 0 ; i < 8 ; i++) {
 Exemple :
System.out.println(i);
} for (int i = 0 ; i < 8 ; i++) {
System.out.println(‘’Done ’’); System.out.println(i);
if (i==1 || i = 7) break;
System.out.println(‘Buzz ’’);
}
System.out.println(‘’Done ’’);

03/01/2021 EL HAMLAOUI Mahmoud 37 03/01/2021 EL HAMLAOUI Mahmoud 38

Branchements : continue

 Le mot clé continue permet de passer à l’instruction suivante.


Exemple :

Tableaux
for (int i = 0 ; i < 8 ; i++) {
System.out.println(i);
if (i==1 || i = 7) continue;
System.out.println(‘Buzz ’’);
}
System.out.println(‘’Done ’’);

03/01/2021 EL HAMLAOUI Mahmoud 39 03/01/2021 EL HAMLAOUI Mahmoud 40

Mahmoud EL HAMLAOUI 10
Tableau Exemple : Affectation

 Un tableau est une structure de données contenant un groupe


d'éléments tous du même type.
 Déclaration
type [ ] tab1;
type tab2 [ ];

 Initialisation
type [ ] tab1 = new type [3];
type [ ] tab2 = {0, 1, 2};
type [ ] tab3 = new int [ ] {0, 1, 2};

03/01/2021 EL HAMLAOUI Mahmoud 41 03/01/2021 EL HAMLAOUI Mahmoud 42

Parcours d’un tableau Exemple : Parcours de tableaux


public static void main(String[] args) {
 L’accès à un élément du tableau en dehors des bornes provoque
float[] tab = new float[6];
la levée d’une exception ArrayIndexOutOfBoundsException
for (int i=0; i<tab.length; i++) {
 Un tableau possède un attribut length qui permet de connaître tab[i] = i + 2;
le nombre d’éléments d’un tableau.
}
}

03/01/2021 EL HAMLAOUI Mahmoud 43 03/01/2021 EL HAMLAOUI Mahmoud 44

Mahmoud EL HAMLAOUI 11
Boucle : Version améliorée du for Chaîne de caractères

 String != char [ ],
 Bibliothèque fournie,
 Comparaison de chaînes : Equals, compareTo( ),
 Recherche : indexOf ( ),
 Extraction : substring( ), StringTokenizer, split, regexp.

public static void main(String[] args) {


for (int i=0; i<args.length; i++) {
System.out.print(args[i] + " ");
}
}

03/01/2021 EL HAMLAOUI Mahmoud 45 03/01/2021 EL HAMLAOUI Mahmoud 46

Tableaux de chaîne de caractères Tableaux de tableaux : tableaux


multidimensionnels
 Classe String,  Déclaration
 Méthode main type [ ] [ ] tab1;
 public static void main(String[] args) type tab2 [ ] [ ];

public static void main(String[] args) {  Exemple


for (int i=0; i<args.length; i++) { tab1
int [ ] [ ] tab1 = { {1 , 3}, {5 , 7}};
ref 1 3
System.out.print(args[i] + " ");
ref 5 7
}
 Toutes les lignes d’un tableau à 2 dimensions n’ont pas
}
forcément le même nombre d’éléments.

03/01/2021 EL HAMLAOUI Mahmoud 47 03/01/2021 EL HAMLAOUI Mahmoud 48

Mahmoud EL HAMLAOUI 12
Objet

 Objet est une entité autonome :


Identité : Objet forme un tout identifiable,
Classes et Objets

 Etat : ensemble de propriétés (attributs) ayant une valeur,


 Comportement : Ensemble de traitements que peut accomplir l’objet.
 Relie l’objet au monde extérieur.

03/01/2021 EL HAMLAOUI Mahmoud 49 03/01/2021 EL HAMLAOUI Mahmoud 50

Classe Exemple
public class Personne {
private String nom, prenom;
 Classe est une description d’un ensemble d’objets,
private int nbParticipations = 0, nbOrganisations = 0;
 Classe peut être vue comme un modèle d’objet, public Personne(String n, String p) {
 Classe est un type (non primitif), nom = n; prenom = p;
 Une instance de classe est l’un des objets représentant la classe. }
@Override
public String toString(){
return "Personne␣" + nom + ",␣"+ prenom +",␣"+ nbOrganisations
+ ",␣" + nbParticipations ;
}
}

03/01/2021 EL HAMLAOUI Mahmoud 51 03/01/2021 EL HAMLAOUI Mahmoud 52

Mahmoud EL HAMLAOUI 13
Instance : Création d’objet Manipulation d’un objet

 Déclaration d’un objet  Accès à un attribut,


 nomObjet.nomAttribut
Personne p ;
 Appel d’une méthode
 nomObjet.nomMethode.
 Allocation de l’espace mémoire

p = new Personne (“Toto”,”Tata”);

03/01/2021 EL HAMLAOUI Mahmoud 53 03/01/2021 EL HAMLAOUI Mahmoud 54

Attribut (variable d’instance) Méthode d’instance

 Déclaré au sein de la classe,  Déclaré au sein de la classe,


 Caractérisé par :  Caractérisé par :
 Nom,  Signature,
 Type,  Visibilité,
 Visibilité,  Corps,
 Possède une valeur initiale implicite par défaut,  …
 Conseillé de faire l’initialisation explicitement.  Types de méthodes :
 Les constantes sont des attributs déclarés final.  Accesseurs, constructeurs,
 Méthodes métiers.
<visibilité><typeDeRetour> <NomMethode>(<paramètres>*) {
<instructions>...
}
03/01/2021 EL HAMLAOUI Mahmoud 55 03/01/2021 EL HAMLAOUI Mahmoud 56

Mahmoud EL HAMLAOUI 14
Visiblité Visibilité

 La visibilité d’un membre est définie par un mot clé qui peut
prendre trois valeurs :
 Public,
 Visibilité totale : accessible de toute classe.
 Private,
 Visibilité au sein de la classe.
 Protected
 Visibilité dans les classes filles (héritage).
 Par défaut
 Pas de mot-clé, accessible uniquement depuis les autres classes du paquetage.

03/01/2021 EL HAMLAOUI Mahmoud 57 03/01/2021 EL HAMLAOUI Mahmoud 58

Constructeur Constructeur

 La création d’objets se fait par allocation dynamique grâce à  Une classe peut ne disposer d’aucun constructeur.
l’opérateur : new,  Constructeur par défaut.
 Méthode qui porte le même nom que la classe,  Une classe peut avoir plusieurs constructeurs,
 Sans valeur de retour,  Surcharge,
 Un constructeur peut appeler un autre constricteur par this.
 Peut être public et privé,
 Syntaxe :
[portée] nomClasse ([paramètres]) {
}

03/01/2021 EL HAMLAOUI Mahmoud 59 03/01/2021 EL HAMLAOUI Mahmoud 60

Mahmoud EL HAMLAOUI 15
L’objet this L’objet this

 this permet de référencer l’instance courante,  Exemple :


 Est associé au concept d’auto-référence de l’objet,
this(“Toto”, “Tata”);
 this permet de décrire un attribut ou une méthode de l’instance
courante sans ambiguïté, this.variable;
methode(this);
 this(...) en tant que méthode fait appel à un constructeur.

03/01/2021 EL HAMLAOUI Mahmoud 61 03/01/2021 EL HAMLAOUI Mahmoud 62

L’objet this Méthode et attribut de classe


public class MyClass {
int test = 6;
public MyClass() {  Attribut de classe :
int test = 4;  Valeur de l’attribut est partagée entre toutes les instances de la classe.
System.out.println("Test = " + this.test);
 Attribut déclaré static,
System.out.println("Test = " + test);
 A ne pas confondre avec un attribut d’instance.
}
public MyClass(int test) {  Méthode de classe :
int test = this.test;  Méthode appelée sans construire d’objet,
System.out.println("Test = " + this.test);  Ne dépend pas d’un objet de la classe,
System.out.println("Test = " + test);  Classe.méthode (…).
}  Méthode déclarée static.
public static void main(String args[]) {
new MyClass();
newMyclass(8);
}
03/01/2021 } EL HAMLAOUI Mahmoud 63 03/01/2021 EL HAMLAOUI Mahmoud 64

Mahmoud EL HAMLAOUI 16
Exemple Variable de classe vs. Variable d’instance
public class Calculatrice {
public static int additionner(int... valeurs) {
int resultat = 0;
for (int valeur : valeurs) {
resultat += valeur;
}
return resultat;
}
}
// Dans la méthode main ()

//int resultat = Calculatrice.additionner(1, 2, 3, 4);

03/01/2021 EL HAMLAOUI Mahmoud 65 03/01/2021 EL HAMLAOUI Mahmoud 66

Variable de classe vs. Variable d’instance Méthode main & println

 Pourquoi la méthode main() est elle static ?


 System.out.println ?

03/01/2021 EL HAMLAOUI Mahmoud 67 03/01/2021 EL HAMLAOUI Mahmoud 68

Mahmoud EL HAMLAOUI 17
Bloc initialisation Encapsulation

 Permet d’initialiser les variables static trop complexes à faire par  Le fait de ne montrer et de ne permettre de modifier que ce qui
une simple instruction, est nécessaire à une bonne utilisation,
 Les instructions d’un bloc statique sont exécutées de façon  Masquer le plus possible les détails d’implémentation et le
automatique et une seule fois lorsque la classe est chargée. fonctionnement interne des objets,
class UneClasse {  Si on a besoin de connaître la valeur d’un attribut ou de le
private static int[] tab = new int[25]; modifier, on effectuera cette opération via une méthode (non
static { privée) dites d’accès :
 accesseur : méthode fournissant la valeur d’un attribut,
for (int i = 0; i < 25; i++) {
 modifieur : méthode transmettant une nouvelle valeur à un attribut.
tab[i] = i-1;
}
//Affichage dans une méthode main
}. 03/01/2021
.. EL HAMLAOUI Mahmoud 69 03/01/2021 EL HAMLAOUI Mahmoud 70

Encapsulation Encapsulation

03/01/2021 EL HAMLAOUI Mahmoud 71 03/01/2021 EL HAMLAOUI Mahmoud 72

Mahmoud EL HAMLAOUI 18
Encapsulation Enumération

 Un type énuméré est un type de données comportant un


ensemble fini d'états (de valeurs).
 On donne à chaque état un nom.
 Un type énuméré s'introduit avec le mot clé enum.
 Les valeurs d'une énumération sont les seules instances
possibles de cette classe.

03/01/2021 EL HAMLAOUI Mahmoud 73 03/01/2021 EL HAMLAOUI Mahmoud 74

Enumération Classe énumération public enum Feu {


VERT, ORANGE, ROUGE
public enum Feu { }
VERT, ORANGE, ROUGE
 Méthodes :
}
 Valueof()
public class Demo { Feu feu = Feu.valueOf(‘’VERT’);
public static void main(String[] args) throws Exception {
Feu feu = Enum.valueOf(Feu.class, ‘’VERT’);
Feu feu = Feu.ORANGE;
switch ( feu ) {  Values()
case VERT: Feu [ ]feu = Feu.values;
System.out.println( "On peut passer" );
 Ordinal()
break;
case ORANGE: int ordre = Feu.values;
System.out.println( "Attention..." );
break;
default:
System.out.println( "Faut absolument s'arréter !!!" );
}
}
03/01/2021 EL HAMLAOUI Mahmoud 75 03/01/2021 EL HAMLAOUI Mahmoud 76
}

Mahmoud EL HAMLAOUI 19
Enumération Enumération
public enum JourPlus {
public enum Jour { LUNDI(8), MARDI(8), MERCREDI(4), JEUDI(8), VENDREDI(7), SAMEDI(0), DIMANCHE(0);
LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE; private int nbHeures;
} JourPlus(int nb) {nbHeures = nb;}
//Une autre classe public int getNbHeures() {return nbHeures;}
class EssaiJour { public String action() {
public static void main(String[] arg) { switch(this) {
Jour jour = Jour.valueOf(arg[0]); case SAMEDI : return "cinema";
if (jour == Jour.SAMEDI) System.out.print("fin de semaine : "); case DIMANCHE : return "dormir";
switch(jour) { default : return "travailler";
case SAMEDI : }
case DIMANCHE : }
System.out.println("se reposer"); }
break; class EssaiJourPlus {
default : public static void main(String[] arg) {
System.out.println("travailler"); JourPlus unJour = JourPlus.SAMEDI;
break; System.out.println("numero de " + unJour + " : " + unJour.ordinal());
} System.out.println(unJour + " : " + unJour.action());
} for (JourPlus jour : JourPlus.values())
} System.out.println("nombre d'heures de " + jour + " : " + jour.getNbHeures());
}
03/01/2021 EL HAMLAOUI Mahmoud 77 03/01/2021 EL HAMLAOUI Mahmoud 78
}

Surcharge Exercice
class Printer {
static void print(Object object) {
 Les méthodes peuvent avoir le même nom :
System.out.println("Object : "+object);
 Pas le même nombre de paramètres,
}
 Pas le même type de paramètres
static void print(String string) {
 Exemple :
System.out.println("String : "+string);
void method (int i){ }
}
void method (int i, int j){ }
}
….
void method(int i){ }
String string = "message";
int method(int i){ }
Object object = string;
Printer.print(string);
Printer.print(object);
03/01/2021 EL HAMLAOUI Mahmoud 79 03/01/2021 EL HAMLAOUI Mahmoud 80

Mahmoud EL HAMLAOUI 20
Exercice Paramètres variables (Varargs)
public class Overloading {
public static void m(int i, long l) {
 Avant Varargs.
System.out.println("m(int, long)");
} public String format() { ... }
public static void m(long l, int i) { public String format(String value) { ... }
System.out.println("m(long, int)"); public String format(String val1, String val2) { ... }
}  Varargs permet de gérer automatiquement le nombre arbitraire
public static void main(String[] args) { de paramètres.
int i = 1; public String formatWithVarArgs(String... values) {
long l = 1L;
 Règles :
m(i,l);  Chaque méthode ne peut avoir qu’un seul paramètre varargs,
m(l,i);  L’argument varargs doit être le dernier paramètre.
m(i,i);
03/01/2021 }
EL HAMLAOUI Mahmoud 81 03/01/2021 EL HAMLAOUI Mahmoud 82

Exemple New et Delete ?


Public class Test1 {
static void fun(int ...a)  Pas de technique particulière pour détruire un objet,
{
 Objet détruit lorsqu’il n’est plus référencé,
System.out.println("Number of arguments: " + a.length);
 Utilisation d’un ramasse miettes,
for (int i: a)
 Le ramasse-miette (Garbage Collector) est un module de la
System.out.print(i + " ");
JVM qui désalloue les ressources non utilisées.
System.out.println();
}
public static void main(String args[ ]) {
fun(100);
fun(1, 2, 3, 4);
fun();
}
03/01/2021 EL HAMLAOUI Mahmoud 83 03/01/2021 EL HAMLAOUI Mahmoud 84
}

Mahmoud EL HAMLAOUI 21
Introduction
 Dans le cycle de vie d’un projet :
 le temps consacré au débogage et à la maintenance est très largement
supérieur au temps de développement,
Packages  les développeurs sont nombreux et changent souvent.
 Les sources du projet doivent donc :
 suivre les mêmes règles de syntaxe et de présentation ;
 ⇒ de nombreuses règles sont données dans ce cours
 être correctement structurées ;
 ⇒ il faut utiliser des packages hiérarchiques
 être suffisamment documentées ;
 ⇒ les sources doivent être annotées pour la javadoc
 se compiler et se distribuer simplement.
 ⇒ l’utilisation de l’outil ant simplifie les choses

03/01/2021 EL HAMLAOUI Mahmoud 85 03/01/2021 EL HAMLAOUI Mahmoud 86

Déclaration d’un package Organisation hiérarchique des


packages
 Un package est une bibliothèque d’objets, c’est-à-dire une  Les packages peuvent être organisé hiérarchiquement :
collection de classes rangées ensemble (dans un même  par exemple la classe Poum : ./pim/pam/Poum.java.
répertoire).  Pour éviter les conflits de nom lors la distribution des classes :
 Il y a trois raisons pour faire des packages :  on utilise comme racine une URL inversée,
 structuration des projets : chaque package est relié à un répertoire.  suivi des répertoires l’arborescence.
 conflits de nom : les packages définissent des espaces de nommage.
package ma.pack.pim.pam;
 affiner la visibilité : la notion de package est associée à un niveau de visibilité
intermédiaire.
 Un package par défaut est systématiquement attribué par le
package pim ; compilateur aux classes qui sont définies sans déclarer
public class Poum { explicitement une appartenance à un package.
...
}

03/01/2021 EL HAMLAOUI Mahmoud 87 03/01/2021 EL HAMLAOUI Mahmoud 88

Mahmoud EL HAMLAOUI 22
Organisation hiérarchique des Organisation hiérarchique des
packages packages
 Pour créer un package :  Lorsque l’on utilise un membre (de classe ou d’instance) d’une
 il suffit de créer un répertoire, classe A dans une méthode d’une classe B, le compilateur va
 le nom du répertoire, en minuscule, est le nom du package. chercher la classe A :
 Pour rattacher une classe à un package :  dans la classe B (notion de classe interne),
 on écrit sur la première ligne du fichier texte contenant la définition de la  parmi toutes les classes appartenant au même package que B,
classe le mot-clé package suivi du nom du package,  parmi toutes les classes du package java.lang.
 les classes d’un même package sont toutes rangées dans un même répertoire.
 Si la classe A n’est pas définie dans l’un de ces trois ensembles,
vous devez aidez le compilateur à la trouver en indiquant :
 soit à chaque utilisation de la classe A,
 soit une fois pour toute au début de la classe B.

03/01/2021 EL HAMLAOUI Mahmoud 89 03/01/2021 EL HAMLAOUI Mahmoud 90

Simplification d’accès Simplification d’accès

 Lorsque l’on utilise de nombreuses classes d’un package, on  L’utilisation de l’astérisque dans un import n’importe pas
peut simplifier l’importation en important simultanément toutes récursivement les sous-packages : seules les classes se trouvant
les classes du package grâce à une astérisque : directement dans le package sont importées
 import nomPackage.*

import java.io.*;
public class Test { import java.awt.*;
public static void main (String[] args) { import java.awt.event.*;
InputStream is = new InputStream(); public class MonListener {
DataInputStream dis = new DataInputStream(is); Dialog dialogue;
BufferedInputStream bdis = new public void windowClosing(WindowEvent e) {
BufferedInputStream(dis); dialogue.dispose();
... }
} }
}

03/01/2021 EL HAMLAOUI Mahmoud 91 03/01/2021 EL HAMLAOUI Mahmoud 92

Mahmoud EL HAMLAOUI 23
Simplification d’accès Simplification d’accès

 De nombreuses classes java sont des "boites à outils" :  De nombreuses classes java sont des "boites à outils" :
 elles offrent un ensemble de constantes et de méthodes de classe,  elles offrent un ensemble de constantes et de méthodes de classe,
 elles ne sont pas destinées à être instanciées.  elles ne sont pas destinées à être instanciées.
 Comment doit-on utiliser ces boites à outils, par exemple la  Comment doit-on utiliser ces boites à outils, par exemple la
classe Math ? classe Math ?
 Accès aux méthodes par une instance : Math m = new Math() ;
 Importer la classe Math,
 Accès aux méthodes par la classe,
 import static.

03/01/2021 EL HAMLAOUI Mahmoud 93 03/01/2021 EL HAMLAOUI Mahmoud 94

Boite à outils Les packages standards


 java.lang : Les classes de base et la gestion des processus (importer par
défaut)
 En utilisant des méthodes de classe :
 java.util : Des structures de données bien pratiques
public class Test {
double testTrigo (int i) {  java.io : La gestion des flux comme l’accès aux fichiers
Thread.sleep(3);
return Math.pow(Math.sin(i),2)+Math.pow(Math.cos(i),2);
 java.math : Calcul sur des nombres infinis
}  java.awt : Composants graphiques : boutons, fenêtres ...
}
 javax.swing : Une Alternative aux composants graphiques AWT
 En utilisant des import static :  java.applet : Tout pour faire des applets
import static java.lang.Thread.sleep;  java.net : Permet des connections réseau IP
import static java.lang.Math.*;  java.sql : Utilisation de bases de données relationnelles en SQL
public class Test {
double testTrigo (int i) {  java.security : Mécanismes assurant des transactions sécurisées
sleep(3);
return pow(Math.sin(i),2)+ pow(Math.cos(i),2);  javax.rmi : Objets distribués RMI propriétaire Java
}
 org.omg.corba : Objets distribués selon la norme CORBA
03/01/2021
} EL HAMLAOUI Mahmoud 95 03/01/2021 EL HAMLAOUI Mahmoud 96

Mahmoud EL HAMLAOUI 24
Introduction

 “An exception is an event, which occurs during the execution


of a program, that disrupts the normal flow of the program's
Gestion des exceptions instructions.”.

 Quand une exception est levée, l’exécution ”normale” est


interrompue. Le contrôle de l’exécution passe à un gestionnaire
d’erreur

03/01/2021 EL HAMLAOUI Mahmoud 97 03/01/2021 EL HAMLAOUI Mahmoud 98

Exception ? Contexte
Exception ?
ARGHH ! This is an exception  Nombreuses erreurs peuvent survenir lors de l’exécution d’un
programme.
Error ?  une division par 0 est réalisée,
... No, this is NOT
public void doSomething() { necessarily an error  l’indice d’accès à un élément de tableau sort des limites du tableau,
doSomeStuff();
doSomeOtherStuff();  un paramètre de fonction ne satisfait pas une pré-condition,
doItAgain();
}
 un fichier n’existe pas,
...  un fichier n’est pas accessible avec les droits requis,
 l’espace mémoire est insuffisant.
Le programme
s’excute mais
 Les exceptions sont des objets Java comme les autres
 Ils sont tous des sous-classes de Throwable.
03/01/2021 EL HAMLAOUI Mahmoud 99 03/01/2021 EL HAMLAOUI Mahmoud 100

Mahmoud EL HAMLAOUI 25
try … catch finally

 Le bloc try est utilisé pour encapsuler du code à risque  Une clause try/catch peut optionnellement être suivie d’une
susceptible de lever une exception. partie finally
 Le bloc catch est utilisé pour gérer l'exception  sera exécutée en toute circonstance (pas d’erreur ou une erreur capturée).
 Quoi faire à la place d’un crash.
public void doSomething() { try {
doSomeStuff(); doSomeStuff(); try {
doSomeOtherStuff(); doOtherStuff(); doSomeStuff();
public void doSomething() { doItAgain();
doSomeStuff();
} catch (IOException ioe) { doOtherStuff();
doSomeOtherStuff(); doHandleIOException(); } finally {
try {
doItAgain(); } finally { doSomethingInAnyCase();
int a = 2/0; int a = 2/0;
} } doSomethingInAnyCase(); }
}
catch (Exception e) {
e.printStackTrace();}

03/01/2021 EL HAMLAOUI Mahmoud 101 03/01/2021 EL HAMLAOUI Mahmoud 102

Traitement (avant Java 7) Traitement (AprèsJava 7)


 Java 7 introduit la notion de multi-catch
Code try { IOException ioe
Code peut lancer une Ne capture que les
exception. doSomeStuff(); IOExceptions et les try {
doOtherStuff(); sous-classes
} catch (IOException ioe) { doSomeStuff();
Encore du code
Ce code ne sera pas doHandleIOException(); doOtherStuff();
exécuté si
doSomeStuff () lève } catch (Exception e) {
Exception e } catch (IOException|SQLException ex) {
une exception. doHandleException(); Prend toutes les
} autres exceptions doHandleException();

03/01/2021 EL HAMLAOUI Mahmoud 103 03/01/2021 EL HAMLAOUI Mahmoud 104

Mahmoud EL HAMLAOUI 26
Hiérarchie Hiérarchie
 Les exceptions "classiques" (checked exceptions) nécessitent de
respecter le try
 i.e Toutes les exceptions sauf les exceptions de type java.lang.Error,
java.lang.RuntimeException et leurs sous-classes.
 Les Unchecked exception se produisent dans des conditions
exceptionnelles qui ne sont pas directement liées à l’application
(ex : java.lang.OutOfMemoryError , java.lang.VirtualMachineError)
 Elles ne sont généralement pas prises en comptent dans le code : il est
normal que le programme quitte dans ces cas là.
 Elles se produisent dans des conditions exceptionnelles qui sont
liées à l’application.
 ex : mauvaise utilisation d’une API, bug de programmation, etc.
 ex:java.lang.NumberFormatException,
03/01/2021 EL HAMLAOUI Mahmoud 105 03/01/2021java.lang.ArrayIndexOutOfBoundsException
EL HAMLAOUI Mahmoud 106

Throws Throws
 On peut utiliser une clause throws pour déclarer une méthode
public void methode1() {
dont on peut anticiper l’échec. try {
 la méthode ne gère pas l'exception localement methode2();
 Utile pour créer un système global de gestion des erreurs } catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
public void methode2() throws IOException {
methode3();
}

public void methode3() throws IOException {


throw new IOException("File missing");
}

03/01/2021 EL HAMLAOUI Mahmoud 107 03/01/2021 EL HAMLAOUI Mahmoud 108

Mahmoud EL HAMLAOUI 27
Throws VS. Throw Exceptions et entrée/sortie

 Le mot clé throw est toujours placé dans une méthode.


 Le mot clé throws est toujours placé sur la déclaration de la
méthode.

public void methode () throws IOException {


throw new IOException("File missing");
}

03/01/2021 EL HAMLAOUI Mahmoud 109 03/01/2021 EL HAMLAOUI Mahmoud 110

Créer sa propre exception Créer sa propre exception


public class NegativeNumberException extends
 Héritage de Exception si vous souhaitez créer une checked NumberException {
public NegativeNumberException(int num) {
exception. super("The number "+num+" is negative");
}
 Ou bien de RuntimeException }

public void throw2() {


try {
// ...
if (a == -2) throw new NegativeNumberException(a);
} catch (Exception e) {
e.printStackTrace();
}
}

03/01/2021 EL HAMLAOUI Mahmoud 111 03/01/2021 EL HAMLAOUI Mahmoud 112

Mahmoud EL HAMLAOUI 28
Créer sa propre exception
public class PotionMagiqueException extends Exception {
public PotionMagiqueException(){
super();
}
public PotionMagiqueException(String s){
super(s);
}
}

public class GourdePotionMagique {


private int quantite, gorgee=2,contenance=20;
public GourdePotionMagique(){ quantite=0;}

public boolean bois() throws PotionMagiqueException {


if (quantite-gorgee <0)
throw new PotionMagiqueException (” pas assez de potion
magique!”);
}
}

03/01/2021 EL HAMLAOUI Mahmoud 113

Mahmoud EL HAMLAOUI 29

Vous aimerez peut-être aussi