Académique Documents
Professionnel Documents
Culture Documents
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
Mahmoud EL HAMLAOUI 2
Premier programme IDEs Java
Demo
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.
*/
Mahmoud EL HAMLAOUI 4
Nom de variable Nom de variable (mots réservés)
Syntaxe Constantes
Mahmoud EL HAMLAOUI 5
Bonnes pratiques Opérateurs de calcul
https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
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)
… …
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.
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
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--;
}
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 ’’);
Branchements : continue
Mahmoud EL HAMLAOUI 10
Tableau Exemple : Affectation
Initialisation
type [ ] tab1 = new type [3];
type [ ] tab2 = {0, 1, 2};
type [ ] tab3 = new int [ ] {0, 1, 2};
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.
Mahmoud EL HAMLAOUI 12
Objet
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 ;
}
}
Mahmoud EL HAMLAOUI 13
Instance : Création d’objet Manipulation d’un objet
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.
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]) {
}
Mahmoud EL HAMLAOUI 15
L’objet this L’objet this
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 ()
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
Mahmoud EL HAMLAOUI 18
Encapsulation Enumération
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
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
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.
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();
... }
} }
}
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.
Mahmoud EL HAMLAOUI 24
Introduction
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();}
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();
}
Mahmoud EL HAMLAOUI 27
Throws VS. Throw Exceptions et entrée/sortie
Mahmoud EL HAMLAOUI 28
Créer sa propre exception
public class PotionMagiqueException extends Exception {
public PotionMagiqueException(){
super();
}
public PotionMagiqueException(String s){
super(s);
}
}
Mahmoud EL HAMLAOUI 29