Copie de Introduction à Java_Rizki_2024
Copie de Introduction à Java_Rizki_2024
ADIL RIZKI
1
SOMMAIRE
Tableaux
2
INTRODUCTION : C’EST QUOI JAVA?
Partie 1
3
HISTOIRE DE JAVA
1. Java est un langage objet ressemblant au langage C++
2. Mis au point en 1991 par la firme Sun Microsystems
3. Le but était de constituer un langage de programmation pouvant être
intégré dans les appareils électroménagers (embarqué)
4. James Gosling décida de créer un langage orienté objet comme C++
5. Mais en éliminant les points difficiles de C++, et en le rendant moins
encombrant et plus portable
6. ce langage fut baptisé Java en l'honneur de la boisson préférée des
programmeurs, c'est-à-dire le café java.
4
HISTOIRE DE JAVA
7. A la même époque, le Web faisait son apparition, or Java possédait
toutes les caractéristiques faisant de lui un langage approprié pour le
Web.
Portabilité : Le réseau mondial comportaient des machines différentes, alors que
Java était conçu pour tourner sur n’importe quelle machine.
Le web était limité en bande passante: Java était conçu pour être petit.
5
COMPARAISON DE JAVA ET C
C JAVA
Création Dennis Ritchie 1972 Denis Ritchie 1991
Mots clés 52 50
8
SOURCE ET COMPILATION
Compilation d’un programme java : Génération du byte code
9
LA MACHINE VIRTUELLE
byte-code assure la portabilité des programmes Java
10
INTERPRÉTATION VS COMPILATION
Avec C et C++ Avec JAVA
Fichier
Source
Fichier
Source Précompilation
Compilation Pseudocode
(bytecode)
Fichier compilé Fichier compilé Fichier compilé
sous Windows sous Unix sous Mac OS
VM VM Unix VM Mac
Exécution Windows OS
Système Système Unix Système Mac Exécution
Windows OS
Système Système Système
Windows Unix Mac OS
11
NOTEZ BIEN !
1. Le fichier dont l’extension est .java c’est un simple fichier texte ouvrable
par un éditeur de texte
2. Le byte-code ou pseudo-code ou encore le code intermédiaire est un
fichier dont l’extension est .class
3. Le pseudo-code est généré par le compilateur java ( javac ), il ne
dépend pas de la plate forme.
4. La machine virtuelle dépend de la plate forme, elle est téléchargeable
à partir du site oracle, elle permet d’exécuter le pseudo-code.
5. La machine virtuelle est appelée aussi interpréteur.
12
FONCTIONNEMENT DE LA MACHINE VIRTUELLE
1. Chargement :
Chargement sélectif et dynamique des classes
Vérification statique du code
Secyrity
Class Loader Manager
Byte-Code
Interpreter
Verifier
13
FONCTIONNEMENT DE LA MACHINE VIRTUELLE
Interprétation (le mode le plus simple) : La JVM interprète le bytecode : décode
une instruction de bytecode à la fois et exécute l'opération correspondante
Le mode HotSpot :
La JVM traduit les instructions vers le langage machine
Conserver les instructions traduites pour limiter le nombre d'opérations de
traduction.
l'exécution est plus rapide mais nécessite une plus grande quantité de mémoire
Le mode adaptive compiler: la JVM traduit uniquement les instructions
fréquemment exécutées, utilisant alternativement les techniques de
l’interprétation ou de HotSpot selon les besoins
14
RAMASSE-MIETTES
17
QU’EST CE QUE LE JDK ?
Le Java Development Kit désigne un ensemble de bibliothèques
logicielles de base du langage de programmation Java, ainsi que
les outils avec lesquels le code Java peut être compilé, transformé
en bytecode destiné à la machine virtuelle Java.
18
QU’EST CE QUE LE JDK ?
JDK : comprend essentiellement :
Javac : le compilateur Java
Java : un interpréteur d'applications (machine virtuelle)
Applet viewer : un interpréteur d'applets
Jdb : un débogueur
Javap : un décompilateur, pour revenir du bytecode au code
source
Javadoc : un générateur de documentation
jar: l'éditeur d'archives Java
19
OU SE PROCURER JDK ?
Le JDK est disponible gratuitement en téléchargement sur le site de
la société Oracle :
Java SE Downloads
20
LES OUTILS JDK :
• Le compilateur
• L’interpréteur
• L’interpréteur d’applet
• Javadoc
• L’éditeur d’archive
•…
21
LES OUTILS JDK :
• Le compilateur Le compilateur javac transforme le
code source en bytecode, un fichier
• L’interpréteur d’extension .class intermédiaire
• L’interpréteur d’applet interprétable par la machine virtuelle
sur n'importe quelle plate-forme.
• Javadoc
Sous ligne de commande on utilise la
• L’éditeur d’archive syntaxe suivante :
•… Javac <option><fichier.java>
22
LES OUTILS JDK :
• Le compilateur L'interpréteur java est la machine
virtuelle permettant de lire le
• L’interpréteur bytecode.
• L’interpréteur d’applet Sous ligne de commande on utilise la
syntaxe suivante :
• Javadoc
Java <Nom du fichier sans
• L’éditeur d’archive extension >
•…
23
LES OUTILS JDK :
• Le compilateur
• L’interpréteur Appletviewer a pour but de pouvoir
visualiser l'exécution d'un applet (il
• L’interpréteur d’applet était aussi possible de la visualiser
sur la plupart des navigateurs
• Javadoc internet.
• L’éditeur d’archive
•…
24
LES OUTILS JDK :
• Le compilateur JavaDoc est un utilitaire permettant de
créer une documentation au format
• L’interpréteur HTML à partir de vos programmes,
• L’interpréteur d’applet grâce aux commentaires /** .... */
prévus à cet effet, et qui sont à
• Javadoc incorporer dans le code.
• L’éditeur d’archive
•…
25
LES DE OUTILS JDK :
• Le compilateur Jar permet de compresser toutes les
classes d'un même projet dans une
• L’interpréteur archive (un fichier zip avec l'extension
• L’interpréteur d’applet .jar) pour constituer une bibliothèque
de classes que l'on peut ensuite
• Javadoc importer comme bibliothèque externe à
un autre projet .
• L’éditeur d’archive
•…
Et la liste n’est pas exhaustive !! 26
LES OUTILS JDK
JRE
( L'environnement d'exécution
Java), est une famille de
logiciels qui permet
l'exécution des programmes
écrits en Java , sur
différentes plateformes
27
COMPILATION ET EXÉCUTION
On a deux choix :
Compiler et exécuter en utilisant les lignes de
commande
installer JDK
28
EDITEURS DE CODE
29
ENVIRONNEMENT DE DÉVELOPPEMENT INTÉGRÉ
Nombreux sont les IDE (Integrated Development Environment)
pour JAVA
Editeur de texte, compilateur, débogueur, exécution
30
JAVA AUJOURD’HUI
Maturité certaine
Technologie largement reconnue dans le monde industriel
Evolutions de JAVA contrôlées par organisation indépendante Java
Community Process (www.jcp.org)
Évolutions du langage
Nouvelles API
Passage de Java dans la communauté open source (2007) OpenJDK
Bataille avec C# .NET sur la plateforme Windows
Rachat de SUN par Oracle (avril 2009)
31
RETENEZ !
• La JVM est le cœur de Java, elle fait fonctionner vos programmes Java, précompilés
en byte code.
• Les fichiers contenant le code source de vos programmes ont l’extension .java.
• Les fichiers précompilés ont l’extension .class
• Le byte code est un code intermédiaire entre celui de votre programme et celui que
votre machine peut comprendre.
• Un programme Java, codé sous Windows, peut être précompilé sous Mac et enfin
exécuté sous Linux.
• Votre machine ne peut pas comprendre le byte code, elle a besoin de la JVM.
32
INITIATION AU LANGAGE JAVA Partie 2
33
INSTALLATION ET PRÉSENTATION
1. Installation du JDK
2. Installation d’Eclipse/NetBeans
3. Présentation rapide de l’interface Eclipse/NetBeans
34
CRÉATION D’UN NOUVEAU PROJET JAVA
35
CRÉATION D’UN NOUVEAU PROJET JAVA
36
CRÉATION D’UNE CLASSE
Une classe est un ensemble de codes
contenant plusieurs instructions que doit
effectuer votre programme. ( on va
détailler cette notion plus loin)
exécuter le code
écrire le code
Voir l’exécution
38
STRUCTURE D’UN PROGRAMME JAVA
• Toutes les applications JAVA sont composés d’au moins une classe spécifique
• Le nom de cette classe correspond au nom de l’application (Prog dans notre
cas)
• Cette classe doit contenir une méthode (fonction) appelé main()
• La méthode main() sera le point de démarrage de notre programme
• Dans cette partie on va travailler qu’avec une seule classe
Classe crée
Méthode main
39
PREMIER CODE : HELLO WORLD
On place le code entre les deux accolades de la méthode main()
}
Comme en langage C : le
commentaire et entre deux // ou
deux /* */ s’il comprend plusieurs
lignes 40
PREMIER CODE : Hello Word
42
System.out.println("")
Pour forcer un retour à la ligne on :
Utilise le caractère d’échappement « \n »
Ex : System.out.print("Hello Word\n");
45
COMPILATION EN LIGNE DE COMMANDE
Démo !
46
CRÉATION D'EXÉCUTABLES EN JAVA
-MODE CONSOLE-
1- Créer le fichier .java et le compiler pour obtenir le .class
Exmple: FichProg.java FichProg.class
2- Créer le fichier MANIFEST.MF avec deux lignes qui contiennent:
- ligne 1: Main-Class: FichProg
- ligne 2: Vide.
3- Créer le fichier archive (exécutable) ".jar" avec la commande:
jar cvmf MANIFEST.MF sortie.jar FichProg.class
48
CRÉATION D'EXÉCUTABLES EN JAVA -NETBEANS-
49
CRÉATION D'EXÉCUTABLES EN JAVA -ECLIPSE-
2
1
3
50
CRÉER UN .EXE À PARTIR DU .JAR
4
3
2
51
SCRIPT D’INSTALLATION D’APPLICATIONS
52
VARIABLE EN JAVA
Une variable est un objet repéré par son nom, pouvant contenir des
données, qui pourront être modifiées
Les variables en langage Java sont typées
les noms de variables peuvent être aussi long , toutefois le compilateur
ne tiendra compte que des 247 premiers caractères,
Les variables doivent répondre à certains critères:
un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_"
(pas par un chiffre)
un nom de variables peut comporter seulement des lettres, des chiffres et le
caractère _
Les noms de variables ne peuvent pas être les noms suivants Slide suivant (qui
sont des noms réservés)
53
MOTS RÉSERVÉS
Parmi les mots interdits pour les identificateurs, il faut ajouter les booléens
false et true ainsi que null . 54
DÉCLARATION D’UNE VARIABLE
Une variable se déclare de la façon suivante:
type Nom_de_la_variable;
ou bien s'il y a plusieurs variables du même type:
type Nom_de_la_variable1, Nom_de_la_variable2, ...;
55
DÉCLARATION D’UNE CONSTANTE
Exemple
final int REPONSE = 42;
Il s'agit là d'une utilisation restrictive du mot clé final, car celui-ci permet
d'affecter une valeur différente à chaque exécution du programme, tout en
garantissant que la variable, une fois initialisée avec une valeur, ne subira plus
aucune modification.
56
AFFICHER LE CONTENU D’UNE VARIABLE
Afficher une variable :
System.out.print(Nom_variable);
Afficher une variable concaténée avec une chaine de caractère :
System.out.print("Chaine de caractère" + Nom_variable);
57
TYPES DE DONNÉES ET OPÉRATEURS
Il existe deux types de données en java :
des données de type simple ou primitif
des données de type complexe ou des objets
58
TYPES DE DONNÉES (PRIMITIFS)
Primitive Signification Taille Plage de valeurs acceptée
valeur du jeu de caractères Unicode (65000 caractères
char Caractère 2
possibles)
byte Entier très court 1 -128 à 127
short Entier court 2 -32768 à 32767
int Entier 4 -2 147 483 648 à 2 147 483 647
59
EXEMPLES DE DÉCLARATION ET D’INITIALISATION
byte temperature;
byte temperature;
temperature = 32000 ;
int temperatureSoleil = 15600000 ;
long anneeLumiere;
anneeLumiere = 9460700000000000 ;
float pi=3.141592653f //faites attention au point et au f à la fin
double division;
division=0.333333333333333333333333333333333333333333334;
char caractere; caractere = ‘A’;
boolean question; question = true; 60
DÉCLARATION D’UNE CHAINE DE CARACTÈRES
Le type chaine de caractères n’est pas un type primitif c’est un type complexe (une
classe : possède des attributs et des méthodes)
La syntaxe :
String phrase ;
phrase="bonjour";
String str=new String();
str="tout le monde";
String chaine="ma chaine" ;
String Ch=new String("C\’est une chaine");
63
CONVERSION IMPLICITE – AJUSTEMENT DE TYPE
64
CONVERSION IMPLICITE – PROMOTION NUMÉRIQUE
les opérateurs numériques ne sont pas définis pour les types byte, char et short.
Java prévoit que toute valeur de l’un de ces deux types apparaissant dans une
expression est d’abord convertie en int.
Exemple: si p1, p2 et p3 sont de type short et x de type float, l’expression :
p1 * p2 + p3 * x
est évaluée comme l’indique ce schéma :
65
LES VALEURS ENTIÈRES CONSTANTES
appelées aussi entiers littéraux (integer literals)
peuvent être écrites simplement en base dix :
int earthRadius = 6371;
peuvent être séparés par des caractères souligné (_) pour faciliter la lecture :
int earthRadius = 6_371;
Les entiers littéraux ont toujours le type int, sauf si on leur ajoute le suffixe l ou L,
auquel cas ils ont le type long :
long earthPopulation = 7_130_000_000L;
(Aucun suffixe similaire n'existe pour byte ou short, il faut donc recourir à des
conversions, implicites ou explicites).
66
LES VALEURS ENTIÈRES CONSTANTES
-NOTATION BINAIRE-
- Les entiers littéraux peuvent être écrites en binaire (base deux),
- il suffit de leur ajouter le préfixe 0b ou 0B :
int twelve = 0b1100; // vaut 12
int maxInt = 0b01111111_11111111_11111111_11111111;
long twelveAsLong = 0b1100L; // vaut 12
Attention, ces entiers littéraux binaires peuvent être négatifs même en l'absence de signe de
négation (-) :
int minusOne = // vaut -1 0b11111111_11111111_11111111_11111111;
67
LES VALEURS ENTIÈRES CONSTANTES
- NOTATION OCTALE-
les entiers littéraux peuvent être écrits en octal (base huit) grâce au préfixe 0.
En effet, mettre un (ou plusieurs) 0 en tête d'un entier littéral change sa base, donc
généralement sa valeur.
Par exemple :
int thirty = 30; // vaut 30
int notThirty = 030; // vaut 24 (!)
68
LES VALEURS ENTIÈRES CONSTANTES
- NOTATION HEXADÉCIMALE-
Les entiers littéraux peuvent être écrits en hexadécimal (base seize) avec le préfixe
0x ou 0X.
Les lettres A à F — minuscule ou majuscule — sont utilisées pour représenter les
chiffres après 9 :
int twelve = 0xC; // vaut 12
int thirtyTwo = 0x20; // vaut 32
Long x = 0xDEAD_BEEFL; // vaut 3 735 928 559
long minusOne = // vaut -1 (long) 0xFFFF_FFFF_FFFF_FFFFL;
L'intérêt de la notation hexadécimale comparé à la notation décimale est que
chaque chiffre représente exactement quatre bits.
69
CONVERSION VERS LES AUTRES BASES
- Integer.toBinaryString(): La méthode toBinaryString() fonction intégrée Java
qui renvoie une chaîne sous la forme d’un entier non signé dans la base binaire.
- Integer.toOctalString(): La méthode toOctalString() fonction intégrée Java qui
renvoie une chaîne sous la forme d’un entier non signé dans la base 8.
- Integer.toHexString() : La méthode toHexString() fonction intégréeen Java qui
renvoie une chaîne sous la forme d’un entier non signé dans la base 16.
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("Entrez un nombre décimal : ");
int nbr = sc.nextInt();
String str = Integer.toOctalString(nbr);
System.out.println("Le nombre octal est : "+str);
} } 70
CONVERSION CHAÎNE→ENTIER
Chaque classe d'entiers offre deux variantes d'une méthode statique
permettant de transformer une chaîne en l'entier signé correspondant.
Par exemple, Integer offre :
– int parseInt(String s, int b) : retourne l'entier dont la représentation en base b (2 ≤ b ≤ 36)
est la chaîne s, ou lève une exception si la chaîne est invalide ;
– int parseInt(String s) : idem pour la base 10.
Les classes Byte, Short et Long offrent des méthodes similaires, nommées
respectivement parseByte, parseShort et parseLong
71
CONVERSION ENTIER→CHAÎNE
Les classes Integer et Long offrent deux variantes d'une méthode statique permettant
de convertir un entier en chaîne de caractères.
Par exemple, Integer offre :
– String toString(int i, int b) : retourne la chaîne représentant l'entier i en base b (2 ≤
b ≤ 36),
– String toString(int i) : idem pour la base 10.
Les classes Byte et Short offrent uniquement la seconde variante.
72
APPLICATION
Confectionner une application graphique permettant d'afficher en Binaire, Octal et
en Héxadécimal un entier saisi dans une zone de texte. Copier l'interface suivant
73
COMPTAGE DE BITS
Integer et Long offrent des méthodes statiques permettant de compter certains types
de bits.
Par exemple, Integer offre :
– int bitCount(int i) : retourne le nombre de bits à 1 dans i ;
– int numberOfLeadingZeros(int i) : retourne le nombre de bits à 0 en tête (à gauche) de i ;
– int numberOfTrailingZeros(int i) : retourne le nombre de bits à 0 en queue (à droite) de i.
Les méthodes de Long sont identiques mais prennent un argument de type long
74
POSITION DES BITS
Integer et Long offrent des méthodes statiques permettant de déterminer la position
de certains bits.
Par exemple, Integer offre :
int lowestOneBit(int i) : retourne 0 si i vaut 0, ou une valeur ayant un seul bit à 1, dont la
position est celle du bit à 1 de poids le plus faible de i,
int highestOneBit(int i) : idem, mais pour le bit de poids le plus fort.
Ainsi :
Integer. lowestOneBit(0b1110) == 0b0010
Integer.highestOneBit(0b1110) == 0b1000
75
ROTATION
Les classes Integer et Long offrent chacune des méthodes statique permettant
d'effectuer une rotation des bits.
Par exemple, Integer offre :
int rotateLeft(int i, int d) : retourne l'entier obtenu par rotation des bits de i de d positions
vers la gauche ;
int rotateRight(int i, int d) : idem, mais vers la droite.
Une rotation est similaire à un décalage, mais les bits qui sont éjectés d'un côté sont
réinjectés de l'autre.
76
INVERSION DE BITS ET OCTETS
Les classes Integer et Long offrent des méthodes statiques permettant d'inverser
l'ordre des bits ou des octets d'un entier.
Par exemple, Integer offre :
int reverse(int i) : retourne l'entier obtenu en inversant l'ordre des bits de i ;
int reverseBytes(int i) : retourne l'entier obtenu en inversant l'ordre des octets de i.
Short offre également reverseBytes.
77
CONVERTIR EN CHAINE DE CARACTÈRE
Examinons le code suivant :
int i=12154;
String j=new String() ;
j=j.valueOf(i);
80
LES OPÉRATEURS DE CALCUL
Résultat (avec x
Opérateur Dénomination Effet Exemple
valant 7)
+ opérateur d'addition Ajoute deux valeurs x+3 10
opérateur de
- Soustrait deux valeurs x-3 4
soustraction
opérateur de
* Multiplie deux valeurs x*3 21
multiplication
plus: opérateur de
/ Divise deux valeurs x/3 2.3333333
division
opérateur Affecte une valeur à Met la valeur 3
= x=3
d'affectation une variable dans la variable x
81
LES OPÉRATEURS D’ASSIGNATION
Opérateurs Effets
addition deux valeurs et stocke le résultat dans la
+=
variable (à gauche)
soustrait deux valeurs et stocke le résultat dans la
-=
variable
multiplie deux valeurs et stocke le résultat dans la
*=
variable
divise deux valeurs et stocke le résultat dans la
/=
variable
82
LES OPÉRATEURS D’INCRÉMENTATION
Résultat (avec x
Opérateur Dénomination Effet Syntaxe
valant 7)
Augmente d'une unité la
++ Incrémentation x++ 8
variable
Diminue d'une unité la
-- Décrémentation x-- 6
variable
83
LES OPÉRATEURS DE COMPARAISON
Opérateur Dénomination Effet Exemple Résultat
opérateur Compare deux valeurs et vérifie Retourne Truesi X est égal à 3,
== x==3
d'égalité leur égalité sinon False
opérateur Vérifie qu'une variable est Retourne Truesi X est inférieur à
< x<3
d'infériorité stricte strictement inférieure à une valeur 3, sinon False
opérateur Vérifie qu'une variable est Retourne Truesi X est inférieur
<= x<=3
d'infériorité inférieure ou égale à une valeur ou égal à 3, sinonFalse
opérateur de Vérifie qu'une variable est Retourne Truesi X est supérieur
> x>3
supériorité stricte strictement supérieure à une valeur à 3, sinon False
opérateur de Vérifie qu'une variable est Retourne Truesi X est supérieur
>= x>=3
supériorité supérieure ou égale à une valeur ou égal à 3, sinonFalse
opérateur de Vérifie qu'une variable est Retourne True si X est différent
!= x!=3
différence différente d'une valeur de 3, sinon False
84
LES OPÉRATEURS LOGIQUES
Opérateur Dénomination Effet Syntaxe
Vérifie qu'une des conditions est ((condition1)||(conditio
|| OU logique
réalisée n2))
Vérifie que toutes les conditions sont ((condition1)&&(conditio
&& ET logique
réalisées n2))
85
LES OPÉRATEURS BIT-À-BIT
Opérateur Dénomination Effet Syntaxe Résultat
Retourne 1 si les deux bits de
& ET bit-à-bit 9 & 12 (1001 & 1100) 8 (1000)
même poids sont à 1
Retourne 1 si l'un ou l'autre des
| OU deux bits de même poids est à 1 9 | 12 (1001 | 1100) 13 (1101)
(ou les deux)
Retourne 1 si l'un des deux bits de
^ OU exclusif même poids est à 1 (mais pas les 9 ^ 12 (1001 ^ 1100) 5 (0101)
deux)
NB: L'inversion (~) est une opération unaire (à un seul argument), toutes les autres sont binaires (à
deux arguments).
86
LES OPÉRATEURS DE ROTATION DE BIT
Opérateur Dénomination Effet Syntaxe Résultat
Décale les bits vers la gauche (multiplie par 2 à
chaque décalage). Les bits qui sortent à gauche 6 << 1
<< Rotation à gauche 12 (1100)
sont perdus, tandis que des zéros sont insérés à (110 << 1)
droite
Décale les bits vers la droite (divise par 2 à
Rotation à droite
chaque décalage). Les bits qui sortent à droite 6 >> 1
>> avec conservation 3 (0011)
sont perdus, tandis que le bit non-nul de poids (0110 >> 1)
du signe
plus fort est recopié à gauche
Décale les bits vers la droite (divise par 2 à
Rotation à droite
chaque décalage). Les zéros qui sortent à droite 3 >>> 1
>>> avec remplissage 1 (0001)
sont perdus, tandis que des zéros sont insérés à (0011 >>> 1)
de zéros
gauche
87
NOTION DE MASQUE
Pour manipuler un ou plusieurs bits d'un entier sans toucher aux autres, on construit
tout d'abord un entier — appelé masque — dont seuls les bits à manipuler sont à 1.
Ensuite, on utilise l'opération bit à bit appropriée (&, | ou ^), appliquée au masque et
à la valeur.
Un masque peut soit s'écrire directement sous forme d'entier littéral — généralement
en base 2 ou 16 — soit se construire en combinant décalages et disjonctions :
int mask13 = 1 << 13; // uniquement bit 13 !!!! Attention le premier bit est le bit 0
int mask17 = 1 << 17; // uniquement bit 17
int mask13_17 = mask13 | mask17; // bits 13 et 17
88
TEST DE BIT(S)
Pour tester si un ou plusieurs bits d'un entier sont à 1, on utilise le « et bit à bit » entre
le masque et l'entier, puis on regarde si la valeur obtenue est égale au masque.
Par exemple, pour tester si les bits 13 et 17 de l'entier x sont à 1, on écrit :
boolean bits13_17Set = (x & mask13_17) == mask13_17;
Pour tester si tous ces bits sont à 0, on écrit :
boolean bits13_17Cleared = (x & mask13_17) == 0;
Pour tester si au moins l'un de ces bits est à 1, on écrit :
boolean bit13OrBit17Set = (x & mask13_17) != 0;
89
MISE À 1 DE BIT(S) MISE À 0 DE BIT(S)
Pour mettre à 1 un ou plusieurs bits d'un entier sans toucher aux autres, on utilise le
« ou bit à bit » appliqué au masque et à l'entier.
Par exemple, pour mettre à 1 les bits 13 et 17 de l'entier x, on écrit :
int xWithBits13_17Set = x | mask13_17;
Pour mettre à 0 un ou plusieurs bits d'un entier sans toucher aux autres, on utilise le
« et bit à bit » appliqué au complément du masque et à l'entier.
Par exemple, pour mettre à 0 les bits 13 et 17 de l'entier x, on écrit :
int xWithBits13_17Cleared = x & ~mask13_17;
90
INVERSION DE BIT(S)
Pour inverser un ou plusieurs bits d'un entier sans toucher aux autres, on utilise le « ou
exclusif bit à bit » appliqué au masque et à l'entier.
Par exemple, pour inverser les bits 13 et 17 de l'entier x, on écrit :
int xWithBits13_17Toggled = x ^ mask13_17;
91
DÉCALAGE ET ROTATION DE BITS A COMPLÉTER
System.out.println(~4);
System.out.println(Integer.toBinaryString(0b101111000111000111111100011100
01 >> 2));
System.out.println(Integer.toBinaryString(0b101111000111000111111100011100
01 >>> 2));
System.out.println(Integer.toBinaryString(0b101111000111000111111100011100
01 << 2));
92
LECTURE DE LA SAISIE CLAVIER
93
LIRE LES ENTRÉES CLAVIER
• On va utiliser une classe nommée Scanner
• Il faut au début l’importer avec import java.util.Scanner;
Nb : pour importer toutes les classes du package util on écrit :import java.util.*
94
LIRE LES ENTRÉES CLAVIER
La méthode nextInt() pour récupérer
une valeur entière, toutefois il existe
pour chaque type une méthode.
Pour récupérer une chaine de
caractère on utilise nextLine()
95
LIRE LES ENTRÉES CLAVIER
Méthode Description
nextDouble() Récupère l'entrée en tant que Double
nextInt() Récupère l'entrée en tant que int
Récupère la ligne de données suivante et la renvoie sous forme de chaîne
nextLine()
(String)
nextShort() Récupère l'entrée en tant que Short
nextByte() Récupère l'entrée en tant que octet (Byte)
nextFloat() Récupère les entrées sous forme de float.
nextLong() Récupère l'entrée en tant que long.
96
LIRE LES ENTRÉES CLAVIER – EXEMPLE -
97
LIRE LES ENTRÉES CLAVIERS – LECTURE D’UN CHAR-
il y a un type de variables primitives qui n’est pas pris en compte par la
classe Scanner : il s’agit du type char.
Pas de nextChar()
Voici comment on pourra récupérer un caractère :
System.out.println("Saisissez une lettre : ");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); // on a récupéré la chaine saisie
char carac = str.charAt(0); // on a récupéré le premier caractère
98
LA CLASSE JOPTIONPANE
La classe JOptionPane est utilisée pour fournir des boîtes de dialogue standard
telles que la boîte de message, la boîte de confirmation et la boîte de saisie.
Ces boîtes de dialogue sont utilisées pour afficher des informations ou obtenir des
informations de l’utilisateur.
La classe JOptionPane hérite de la classe Jcomponent
Elle nécessite d'être importée pour être utilisée import javax.swing.JOptionPane;
JOptionPane est une alternative aux entrées/Sorties classiques (System.out.println,
Scanner.nextInt, ……)
Elle permet de créer des dialogues élémentaires modaux en spécifiant un message,
un titre, une icône, et un type de message ou un type d’option.
99
JOPTIONPANE -TYPES DE DIALOGUES-
L’utilisation typique de cette classe consiste à des appels à une des méthodes
statiques de la forme showXxxDialog qui suivent :
100
JOPTIONPANE -ASPECT-
Titre
Message
La disposition générale de ces boîtes de dialogue icône
ressemble à l’image ci-contre. Valeur à saisir
Boutons d'options
Les paramètres de ces méthodes sont comme suit :
parentComponent: La composante qui est le parent de la boîte
de dialogue. Si ce paramètre est "null", la boîte de dialogue
sera centrée à l’écran. Si c'est "this" la boîte sera centrée sur la
fenêtre appelante
Message : Le message affiché sur la boîte de dialogue.
Titre : Le titre de la boîte de dialogue.
messageType : Le style de message, souvent associé à une
icône par défaut.
101
DIALOGUE D’INFORMATION - SHOWMESSAGEDIALOG -
L’appel de la méthode showMessageDialog de la classeJOptionPane permet de faire
apparaître des messages
Exemple:
JOptionPane.showMessageDialog( laFrame, "le message", "le titre", messageType);
Le type de message est l’une des valeurs suivantes :
MessageType Icône par défaut Valeur numérique
ERROR_MESSAGE 0
INFORMATION_MESSAGE 1
WARNING_MESSAGE 2
QUESTION_MESSAGE 3
PLAIN_MESSAGE Aucun -1
102
DIALOGUE D’INFORMATION - SHOWMESSAGEDIALOG -
showMessageDialog possède plusieurs signatures
Exemple:
JOptionPane.showMessageDialog(this, "message\n Attention", " titre ", JOptionPane.WARNING_MESSAGE);
103
ARGUMENTS DES SHOWXXXDIALOGUES
Exemple:
105
SHOWINPUTDIALOG - EXEMPLE -
106
SHOWCONFIRMDIALOG -VALEUR RETOURNÉE-
107
SHOWCONFIRMDIALOG -EXEMPLE-
Exemple:
108
LES STRUCTURES DÉCISIONNELLES
109
LES STRUCTURE « IF » « ELSE »
Comme en langage C, l’alternative double s’exprime ainsi :
if (//condition)
{ ... //Exécution des instructions si la condition est remplie }
else
{... //Exécution des instructions si la condition n'est pas remplie }
110
IMBRICATION DES « IF »
L’imbrication des if :
if (//condition1)
{ ... //Exécution des instructions si la condition 1 est remplie }
else if (//condition2)
{ ... //Exécution des instructions si la condition 1 est remplie }
else if (//condition3)
{ ... //Exécution des instructions si la condition 1 est remplie }
/. . ./
else
{... //Exécution des instructions si les conditions ne sont pas remplies } 111
IMBRICATION DES « IF »
Exemple :
int i = 0;
if (i < 0)
System.out.println("Ce nombre est négatif !");
else if (i > 0)
System.out.println("Ce nombre est positif !");
else
System.out.println("Ce nombre est nul !");
112
CONDITION TERNAIRE
Exemple 1:
int x = 10, y = 20;
int max = (x < y) ? y : x ; //Maintenant, max vaut 20
Exemple 2:
int x = 10, y = 20;
int max = (x < y) ? y * 2 : x * 2 ; //Ici, max vaut 2 * 20 donc 40
113
LA STRUCTURE SWITCH
Switch (<variable>)
{
case <val1> : <trait 1> ; break ;
case <val2> : <trait 2> ; break ;
/ . . . /
case <valn> : <trait n> ; break ;
default : <trait par défaut >
}
114
« SWITCH » IMBRIQUÉE
switch (<variable 1>)
{
case <val1> : <trait 1> ; break ;
case <val2> :
Switch (<variable 2>);
{
case <val1> : <sous-trait 1>; break; Switch
case <val2> : <sous-trait 2>; break ; imbriquée
/ . . . /
default : <sous-trait par défaut >
}
break ;
case <val3> : <trait 3> ; break ;
/ . . . /
case <valn> : <trait n> ; break ;
default : <trait par défaut >
}
115
THE NEW SWITCH STRUCTURE
NOUVELLE SYNTAXE à partir de JDK 14
-------------- A compléter
116
LA STRUCTURE ITÉRATIVE
117
LA STRUCTURE « WHILE »
while(<condition>)
{
<instructions>
}
Exemple :
int i = 1 ; // initialisation du compteur
while (i <= 5)
{
System.out.println(i) ;
i++;
}
118
LA STRUCTURE « DO … WHILE »
Do
{
<instructions>
}
while(<condition >) ; // n’oublier pas ;
120
LA BOUCLE « FOR »
Exemple :
for (int i=1;i<=5 ;i++)
{ System.out.print(i) ; }
Exemple:
For (int i=0,j=2; (i<10 && j<6); i++,j+=2)
{System.out.println("i = " + i + ", j = " + j);}
lorsque on a qu'une instruction dans notre boucle, on peut enlever les
accolades, car elles deviennent superflues, tout comme pour les instructions if,
else if ou else.
121
LES TABLEAUX
122
TABLEAUX : TABLEAUX À UNE DIMENSION
Déclaration d’un tableau avec valeur initiales :
<type du tableau>[] <nom du tableau> = new <type du tableau>[] {<contenu du tableau>};
int[] portes = new int[]{1,2,3,4};
char tableauCaractere[]={'a','b','c','d','e','f','g'};
String tableauChaine[]={"chaine1","chaine2","chaine3", "chaine4"};
123
TABLEAUX : TABLEAUX À UNE DIMENSION
Déclaration incorrecte:
double notes[6]; //Erreur: On ne peut pas indiquer de dimension ici
124
TABLEAUX : TABLEAUX À UNE DIMENSION
-EXEMPLE-
125
MEMORY MANAGEMENT
double[] notes = new double[8];
126
ACCÈS AUX ÉLÉMENTS :
Pour accéder au premier élément : tableEntier[0]
Pour accéder au deuxième élément : tableEntier[1]
..
Pour accéder au nième (dernier) élément : tableEntier[n-1]
un tableau contenant N éléments aura comme indices possibles 0,
1, 2 ou 3 …. N-1 .
127
EXCEPTION DE DÉBORDEMENT D'INDICE
Si, lors de l'exécution, un indice est négatif ou trop grand que la taille du
tableau une erreur d'exception de type ArrayIndexOutOfBoundsException est
générée
Il faut prévoir une interception de cette Exception pour éviter l'arrêt de
l'exécution du programme
128
AFFICHER LES ÉLÉMENTS D’UN TABLEAU
char tableauCaractere[]={'a','b','c','d','e','f','g'};
for(int i = 0; i < tableauCaractere.length; i++)
{ System.out.println("A l'emplacement " + i +" du tableau
nous avons = "+ tableauCaractere[i]); }
A l’exécution on aura:
129
NOUVELLE SYNTAXE (JDK1.5) ½
-- FOR….. EACH --
130
TABLEAU EN ARGUMENT OU EN RETOUR
Lorsqu'on transmet un tableau en argument d'une méthode, on transmet en fait
(une copie de) la référence au tableau.
La méthode agit alors directement sur le tableau concerné et non sur une copie.
Le même phénomène est retrouvé sur les objets ( à voir dans la suite du cours)
Exemple de deux méthodes statiques permettant:
D'afficher les valeurs des éléments d'un tableau d'entiers ( méthode affiche)
De mettre à zéro les éléments d'un tableau d'entiers( méthode raz)
131
LE TABLEAU STRING DE LA MÉTHODE STATIQUE
MAIN
la définition de l’en-tête de la fonction main() : Exemple: Démo
public static void main(String [] args) {
Netbeans: Propriétés du
…………. projet/Run/Arguments
} Eclipse: Run As/Run Configuration
132
TABLEAU : TABLEAU À DEUX DIMENSIONS
Déclarations :
int premiersNombres[][]={{0,2,4,6,8},{1,3,5,7,9}};
133
TABLEAU : TABLEAU À DEUX DIMENSIONS
1 t[0] [0]
Les lignes peuvent être de tailles différentes t[0] [1]
2
int t[][]={{1,2,3},{5,7,9,0},{5,1}} 3 t[0] [2]
8 t[2] [0]
4 t[2] [1]
134
TABLEAU : TABLEAU À DEUX DIMENSIONS
-- MANIPULATION--
public class tab2DimClassicAffich{
public static void main(String args[]){
int t[][]={{1,2,3},{5,7,9,0},{5,1}}
for(int i=0;i<t.length;i++)
{
for(int j=0;j<t[i].length;j++)
System.out.print(" " + t[i][j]);
System.out.print("\n");
}
}
}
135
NOUVELLE SYNTAXE (JDK1.5) 2/2
TABLEAU À DEUX DIMENSIONS
136
EXEMPLES DE MANIPULATION DES TABLEAUX
-- Méthode sort() --
java.util.Arrays fournit plusieurs méthodes sort. Celles prenant un tableau de
primitives en paramètre trient selon l’ordre naturel des éléments.
int[] tableau = {1, 5, 4, 3, 2};
java.util.Arrays.sort(tableau);
System.out.println(java.util.Arrays.toString(tableau));
Il est également possible de trier certains tableaux d’objets. Par exemple, il est
possible de trier des tableaux de chaînes de caractères.
String[] tableau = {"premier", "deuxième", "troisième", "quatrième"};
java.util.Arrays.sort(tableau);
System.out.println(java.util.Arrays.toString(tableau));
137
EXEMPLES DE MANIPULATION DES TABLEAUX
-- LE TRI BULLE --
1.PROCEDURE tri_bulle ( TABLEAU a[1:n])
2.passage ← 0
3.REPETER
4. permut ← FAUX
5. POUR i VARIANT DE 1 A n - 1 - passage FAIRE
6. SI a[i] > a[i+1] ALORS
7. echanger a[i] ET a[i+1]
8. permut ← VRAI
9. FIN SI
10. FIN POUR
11. passage ← passage + 1
12.TANT QUE permut = VRAI
138
EXEMPLES DE MANIPULATION DES TABLEAUX
-- LE TRI BULLE --
139
EXEMPLES DE MANIPULATION DES TABLEAUX
-- LE TRI BULLE --
1.void tri_bulle(int* tab) {
2. int passage = 0;
3. bool permutation = true;
4. while ( permutation) {
5. permutation = false;
6. passage ++;
7. for (int i=0;i<tab.length-passage;i++) {
8. if (tab[i]>tab[i+1]){
9. permutation = true;
10. // on echange les deux elements
11. int temp = tab[i];
12. tab[i] = tab[i+1];
13. tab[i+1] = temp;
14. }
15. }
16. }
17. }
140
EXEMPLES DE MANIPULATION DES TABLEAUX
-- LE TRI BULLE – À
METTRE EN FORME
1.public class TriBulles{
2.public static void main(String[] args){
3.int tab[]={12, -4,27,8,39,3,-32},i,passage=0,temp;
4.boolean permut=true;
5.do{
6. permut=false;
7. for(i=0;i<tab.length-1-passage;i++){
8. if(tab[i]>tab[i+1]){
9. temp=tab[i];
10. tab[i]=tab[i+1];
11. tab[i+1]=temp;
12. permut=true;
13. }
14. }
15. passage++;
16.}while(permut==true);
17.for( i=0;i<tab.length; i++)
141
18. System.out.println("tab["+i+"]= "+tab[i]);
EXEMPLES DE MANIPULATION DES TABLEAUX
-- LE TRI INSERTION --
142
LES COLLECTIONS
143
LES COLLECTIONS
Java Collections est une collection d'interfaces et classes qui aident à stocker,
ordonner et traiter les données efficacement.
Ce framework contient plusieurs classes utiles qui contiennent à leur tour des
centaines de méthodes, ce qui rend la programmation simple et facile.
Les collections réduisent le temps de programmation et augmentent la qualité et
les performances.
144
HIÉRARCHIE DES COLLECTIONS
145
LES TABLEAUX DYNAMIQUES
146
LES ARRAYLISTS
Un tableau dynamique est une collection de données homogènes dont le nombre peut
changer au cours de déroulement du programme
Les tableaux dynamiques sons définis en java par le biais du type ArrayList
Pour les utiliser il faut tout d’abord importer les définitions associées à l’aide de la
directive suivante:
Import java.util.ArrayList;
147
DÉCLARATION D’UN TABLEAU DYNAMIQUE
Une variable correspondant à un tableau dynamique se déclare de la façon suivante
ArrayList<type> identificateur
Où identificateur est le nom du tableau et type correspond au type des éléments du
tableau.
148
QUE FAIRE POUR LES TYPES PRIMITIFS
149
INITIALISATION D’UN TABLEAU DYNAMIQUE
Un tableau dynamique initialement vide ( Sans aucun élément ) s’initialise comme suit:
ArrayList<type> identificateur = new ArrayList<type>();
Où identificateur est le nom du tableau et type correspond au type des éléments du
tableau.
Exemple:
151
MÉTHODES SPÉCIFIQUES
Quelques fonctions disponibles pour un ArrayList:
ArrayList<type> tableau = new ArrayList <type>();
tableau.add(valeur): ajoute un nouvel élément ‘valeur’ en tableau vide. Pas de retour
tableau.remove( i ): supprime l’élément d’indice i.
tableau.contains(Object o) La valeur de b vaut true si l'objet o appartient à la liste.
tableau.get(i): renvoie l’élément à l’indice i dans le tableau ( i est un entier compris
entre 0 et tableau.size() – 1
tableau.set(i,valeur): affecte valeur à la case i du tableau ( cette case doit avoir été
créé au préalable)
tableau.isEmpty( ): détérmine si le tableau est vide ou non (retourne un boolean ).
Tableau.clear( ): supprime tous les éléments de l’ArrayList et le transforme en tableau
vide 152
EXEMPLE DE QUELQUES MANIPULATIONS
{}
{" un " }
{" un " , "deux"}
153
EXEMPLE
Ecrivons un programme qui (ré)initialise un ArrayList dynamique d'entiers en les demandant à
l'utisateur, qui peut:
• Ajouter des nombres strictement positifs au tableau
• Recommencer au début en entrant 0
• Effacer le dernier élément en entrant un nombre négatif
• Saisie de 3 valeurs:
• Entrer la valeur 0 : 5 {5}
• Entrer la valeur 1 : 2 { 5,2 }
• Entrer la valeur 2 : 0 {}
• Entrer la valeur 0 : 7 {7}
• Entrer la valeur 1: 2 { 7, 2 }
• Entrer la valeur 2 : -4 {7}
• Entrer la valeur 1 : 4 { 7,4 }
• Entrer la valeur 2 : 12 { 7,12 }
154
EXEMPLE Exécution
155
{ réf 1 }
{ réf 1,réf 2 }
2000
2000
2000
156
ARRAYLIST
--APPLICATIONS--
157
YOU CAN ALSO LOOP THROUGH AN ARRAYLIST WITH
THE FOR-EACH LOOP:
1. public class Main {
2. public static void main(String[] args) {
3. ArrayList<String> cars = new ArrayList<String>();
4. cars.add("Volvo");
5. cars.add("BMW");
6. cars.add("Ford");
7. cars.add("Mazda");
8. for (String i : cars)
9. System.out.println(i);
10. } }
158
EXEMPLE
1. import java.util.ArrayList;
2. import java.util.Collections; // Import the Collections class
3. public class ArrayListSort{
4. public static void main(String[] args) {
5. ArrayList<String> cars = new ArrayList<String>();
6. cars.add("Volvo"); cars.add("BMW");
7. cars.add("Ford"); cars.add("Mazda");
159
SORT AN ARRAYLIST OF INTEGERS:
1. import java.util.ArrayList;
2. import java.util.Collections; // Import the Collections class
3. public class Main {
4. public static void main(String[] args) {
5. ArrayList<Integer> myNumbers = new ArrayList<Integer>();
6. myNumbers.add(33); myNumbers.add(15); myNumbers.add(20);
myNumbers.add(34); myNumbers.add(8); myNumbers.add(12);
7. Collections.sort(myNumbers); // Sort myNumbers
8. for (int i : myNumbers) {
9. System.out.println(i);
10. } }}
160
LES CHAINES DE CARACTÈRES -COMPARAISONS-
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0
int compareTo(Object o)
==0 ou > 0
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0
int compareTo(String anotherString)
==0 ou > 0. La comparaison est une comparaison lexicographique.
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0
int compareToIgnoreCase(String str) ==0 ou > 0. La comparaison est une comparaison lexicographique,
ignorant la casse.
String substring(int d, int f) Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.
169
LES CHAINES DE CARACTÈRES
-CONVERSIONS-
String toLowerCase() Retourne une chaîne égale à la chaîne convertie en minuscules.
String toLowerCase(Locale locale) Retourne une chaîne égale à la chaîne convertie en minuscules.
String toUpperCase(Locale locale) Retourne une chaîne égale à la chaîne convertie en majuscules.
Retourne une chaîne égale à la chaîne sans les espaces de début et de
String trim()
fin.
Retourne une chaîne ou tous les ac ont été remplacé par des nc. S’il n’y a
String replace(char ac, char nc)
pas de remplacement, la chaîne elle-même est retournée.
char[] toCharArray() Retourne un tableau char composé des caractères d'une chaine.
170
LES CHAINES DE CARACTÈRES
-RECHERCHE-
int indexOf(int ch) Retourne l’indice de la première occurrence du caractère
int indexOf(int ch, int Retourne l’indice de la première occurrence du caractère à
fromIndex) partir de fromIndex
171
DES MÉTHODES CONCERNANT LES CHAÎNES DE
CARACTÈRES
toLowerCase() : Cette méthode permet de transformer tout caractère alphabétique
en son équivalent minuscule.
toUpperCase() : Elle transforme une chaîne de caractères en capitales, et s'utilise
comme suit :
length() : renvoie la longueur d'une chaîne de caractères (en comptant les espaces).
172
DES MÉTHODES CONCERNANT LES CHAÎNES DE
CARACTÈRES
equals() : Cette méthode permet de vérifier (donc de tester) si deux chaînes de
caractères sont identiques, elle renvoie une valeur booléenne.
173
DES MÉTHODES CONCERNANT LES CHAÎNES DE
CARACTÈRES
substring() : extrait une partie d'une chaîne de caractères. Elle prend deux entiers en
arguments : le premier définit le premier caractère (inclus) de la sous-chaîne à extraire, le
second correspond au dernier caractère (exclu) à extraire.
trim(): Renvoie une nouvelle chaîne en éliminant tous les espaces qui auraient pu se
trouver devant ou derrière la chaîne d’origine.
174
DES MÉTHODES CONCERNANT LES CHAÎNES DE
CARACTÈRES
indexOf() : explore une chaîne de caractères à la recherche d'une suite donnée
de caractères, et renvoie la position (ou l'index) de la sous-chaîne passée en
argument.
175
STRING VS STRINGBUILDER (STRINGBUFFER)
Une chaîne (String) est immuable, tandis qu'un StringBuilder est
modifiable en Java.
Une fois que l'objet String est créé, ses données ou son état ne "Bonjour"
peuvent pas être modifiés, mais un nouvel objet chaîne est créé puis
recopié dans la variable.
Exple1: "Bonjour Ali"
mot
String mot="Bonjour "; // Un objet chaîne est créé.
"Au revoir"
mot = mot + "Ali !"; // Un nouvel objet chaîne est créé puis copié dans 'mot'
mot="Au revoir"; // L'ancien contenu sera récupéré par le
garbage collector
L'utilisation des String est consommatrice de ressources si l'opération
de concaténation est répétitive. Mémoire
176
EFFET DE LA MÉTHODE "CONCAT" SUR UNE CHAÎNE
Exple 2:
String mot="Bonjour "; // Un objet chaîne est créé.
mot.concat("Ali !"); // Un nouvel objet chaîne est créé mais 'mot' ne change pas.
System.out.println(mot); // Affichera [ Bonjour ].
mot "Bonjour"
Un objet immuable est un objet dont le contenu ne peut pas être modifié après sa création.
"Bonjour Ali"
Mémoire
177
STRINGBUILDER
Exemple:
StringBuilder mot= new StringBuilder("Bonjour");
// Un objet StringBuider est créé contenant la chaîne "Bonjour"
mot.append("Ali !"); // la même chaîne est ajoutée à "Ali"
mot= "Au revoir";
// l'ancienne chaîne est écrasée par la nouvelle chaîne "Au revoir"
// le tout se passe dans le même emplacement mémoire. "Bonjour"
mot "Bonjour Ali"
System.out.println(mot); // Affichera [ Au revoir] "Au revoir"
Mémoire
178
STRING VS STRINGBUILDER (STRINGBUFFER)
Info utile:
La méthode System.currentTimeMillis();
Cette méthode calcule la différence de temps écoulée, mesurée en millisecondes, entre l'instant
présent et le 1er janvier 1970 à minuit.
Elle nous permet d'évaluer la durée d'un traitement.
179
STRINGBUILDER – NOTION DE CAPACITÉ
Création:
StringBuilder sb1= new StringBuilder(); //crée une chaîne vide
StringBuilder sb2= new StringBuilder("toto"); //déclaration avec initialisation
StringBuilder sb2= new StringBuilder("toto tu es mon ami");
Rem: La capacité par défaut d'un StringBuilder est de 16. si la longueur du contenu de la
chaîne dépasse 16 alors le système rajoute 16 à cette longueur.
System.out.println( sb1.capacity()); //16
System.out.println( sb2.capacity()); // 18+16=34 in the first time it's current length + 16
sb2.append("et le restera toujours");
System.out.println( sb2.capacity()); //34x2+ 2= 70 after the first time :
i.e (oldcapacity*2)+2
180
EXEMPLE : CRÉATION ET CONCATÉNATION
class StringBuilderExample{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello ");
sb.append("Java");//now original string is changed
System.out.println(sb);//prints Hello Java
sb.insert(2,"World");//now original string is changed
System.out.println(sb);//prints HJavaello
}
}
Output:
Hello Java
HeWorldlloJava
181
MÉTHODES DES STRINGBUILDER
1.StringBuilder append(X x): appends the string representation of the X type argument to the sequence.
3.char charAt(int index): returns the char value in this sequence at the specified index.
4.StringBuilder delete(int start, int end): This method removes the characters in a substring of this
sequence.
5.StringBuilder deleteCharAt(int index): This method removes the char at the specified position in this
sequence.
6.void ensureCapacity(int minimumCapacity): This method ensures that the capacity is at least equal to
the specified minimum.
7.int indexOf(): This method returns the index within this string of the first occurrence of the specified
substring.
182
MÉTHODES DES STRINGBUILDER
8.int lastIndexOf(): This method returns the index within this string of the last
occurrence of the specified substring.
9.int length(): This method returns the length (character count).
10.StringBuilder replace(int start, int end, String str): This method replaces the
characters in a substring of this sequence with characters in the specified String.
183
MÉTHODES DES STRINGBUILDER
14. CharSequence subSequence(int start, int end): This method returns a
new character sequence that is a subsequence of this sequence.
17.void trimToSize(): This method attempts to reduce storage used for the
character sequence.
184
STRING VS STRINGBUILDER
No. String StringBuilder
1) La classe String est immuable La classe StringBuilder est modifiable.
2) String est lente et consommé plus de mémoire StringBuilder est rapide et consommé
quand on fait des concatenations multiples moins de mémoire lors de
dechaînes parceque à chaque fois une nouvelle concatenations multiples.
instance est créée.
3) La classe String surcharge la méthode equals() StringBuilder class doesn't override the
de la clqsse Object. equals() method of Object class.
4) String class uses String constant pool. StringBuilder uses Heap memory
185
WHEN TO USE WHICH ONE:
Si une chaîne doit rester constante tout au long du programme,
utilisez l'objet de classe String car un objet String est immuable.
Si une chaîne peut changer plusieurs fois et ne sera accessible qu'à
partir d'un seul thread, l'utilisation d'un StringBuilder est meilleure.
Si une chaîne peut changer et sera accessible à partir de plusieurs
threads, utilisez un StringBuffer car StringBuffer est synchrone, vous
avez donc la sécurité des threads.
186
LES MÉTHODES DE CLASSE-POO
187
LES MÉTHODES DE CLASSE
o Méthode en POO Fonction en Programmation procédurale
o Exemple:
Méthode main()
Méthode somme()
188
MÉTHODE DE CLASSE
Nom de la méthode
Argument de la méthode
Variable locale
189
MÉTHODE DE CLASSE
o Les méthodes qui ne renvoient rien. Les méthodes de ce type n'ont pas
d'instruction return , et elles sont de type void
o Les méthodes qui retournent des types primitifs (double, int. . .). Elles sont
de type double, int, char . . . Celles-ci possèdent une instruction return ;
o Les méthodes qui retournent des objets. Par exemple, une méthode qui
retourne un objet de type String. Celles-ci aussi comportent une instruction
return.
o les méthodes ajoutées après main doivent être déclarées static
190
LA SURCHARGE DES MÉTHODES
191
LA SURCHARGE DES MÉTHODES
Arguments différents
192
LA SURCHARGE DES MÉTHODES
La machine virtuelle va
invoquer la première
méthode puisque le
paramètre passé lors de
l’appel et de « type
String »
193
TRAVAUX DIRIGÉS
Ecrire des méthodes ayant le même nom et qui permettent de
saisir les éléments d’un tableau de type :
int
char
String
byte
194
DES MÉTHODES MATHÉMATIQUES
196