0% ont trouvé ce document utile (0 vote)
20 vues188 pages

Copie de Introduction à Java_Rizki_2024

Transféré par

gayounassima7
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
20 vues188 pages

Copie de Introduction à Java_Rizki_2024

Transféré par

gayounassima7
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 188

INTRODUCTION AU LANGAGE JAVA Par :

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

Type Compilé Interprêté

Langage parent Assembleur C

Type de programmation Procédurale Orientée Objet

Mots clés 52 50

Résultat de la compilation .exe .class

Exécution sur la destination directe JVM

Structures supportées Oui Non

Concepts Orientés Objet Non Oui

Pointeurs supportés Oui Non

Automatique : Garbage Collector ou Ramasse-


Gestion de la mémoire Malloc, calloc, free, ….
miettes

Gestion des exceptions Non sauf (if else) Oui

Directives du préprocesseur #Include, #Define, #header # import


6
COMPARAISON DE JAVA ET C++
1. Java est très proche du langage C++ (ils ont presque la même syntaxe)
2. Java est plus simple que C++
3. Les caractéristiques critiques du langage C++ (celles qui sont à
l'origine des principales erreurs) ont été supprimées.
• Les pointeurs
• La surcharge d'opérateurs
• L'héritage multiple
• La libération de mémoire est transparente pour l'utilisateur (grâce à un
ramasse-miettes)
• Une meilleure gestion des erreurs
• Les chaines et les tableaux sont désormais des objets faisant partie
intégrante du langage
7
COMPARAISON JAVA ET C++
4. Toutefois Java est moins rapide que le langage C++, il perd en
rapidité ce qu'il gagne en portabilité...

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

2. Protection lors de l’exécution


 Le Security Manager possède un droit de veto (accès sauvage aux système de fichier …)
 Cette protection peut être modulée

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

La machine virtuelle est également équipée


d'un ramasse-miettes (en anglais : garbage
collector) qui permet de libérer la mémoire qui
n'est plus utilisée par le programme Java.
Son principe :
 Déterminer quels objets ne peuvent plus être utilisés par
le programme
 Récupérer l'espace utilisé par ces objets
 en C++ cette tâche était assurée par le programmeur en
libérant la mémoire, et c’est une action qui était l’origine de plusieurs
erreurs. Illustration d'un ramasse-miette compactant.
15
TYPES DE PROGRAMME JAVA
Java permet de créer deux types de programmes :
Les applications indépendantes : programmes tels qu'on les
connaît, c'est-à-dire s'exécutant dans le système
d'exploitation à condition d'avoir installé une machine
virtuelle.
Les applets : petites applications destinées à fonctionner sur
un navigateur.
Les servlets Java: sont exécutés sur le serveur, permettant
de répondre à une requête d'un client http. elle renvoie une
réponse sous la forme d'une page web dynamique.

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

 Utiliser un IDE comme Eclipse


installer JRE et Eclipse

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

Cliquez sur finish

35
CRÉATION D’UN NOUVEAU PROJET JAVA

Cliquez sur restore

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)

Saisir le nom de la Cochez cette option


classe ex : prog
Cliquez sur Class
37
CRÉATION D’UNE CLASSE

exécuter le code

écrire le code

Voir l’exécution

Pour gérer les projets

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()

public class Prog {

public static void main(String[] args){


/* Code à insérer */
}

}
Comme en langage C : le
commentaire et entre deux // ou
deux /* */ s’il comprend plusieurs
lignes 40
PREMIER CODE : Hello Word

On place le code entre les deux accolades de la méthode main()


public class Prog
{
public static void main(String[] args)
{
System.out.print("Hello Word");
}
}
On exécute le programme en cliquant sur :

Sur la console on visualise le résultat :


41
System.out.print( "")
System : C’est une classe utilitaire qui permet d’utiliser l’entrée et la sortie standard.
out : objet de la classe System qui gère la sortie standard.
print : méthode qui écrit dans la console le texte passé en paramètre.
Exemple :

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");

 On utilise la méthode println()


Ex : System.out.println("Hello Word");

Pour afficher un guillemet double ou apostrophe dans la


sortie standard, vous devrez « l'échapper » avec un \
Ex : System.out.println("Coucou mon \"chou\" ! "); 43
COMPILATION EN LIGNE DE COMMANDE
1. Installez JDK
2. Ouvrez le dossier JDK situé dans le dossier Programmes
3. Ouvrez le dossier bin
4. Copiez le chemin d’accès
5. Rendez-vous sur « Panneau de configuration »  « Système »  « paramètres système
avancés »  « Variables d’environnement »
6. La boite « variables d’environnement » s’affiche dans la liste « variables système » cliquez
sur la variable Path , une fois sélectionnée, cliquez sur « Modifier »
7. Une petite boîte s’affiche, qui contient le nom de la variable et sa valeur
8. Allez jusqu’au bout de la valeur , ajoutez-y un point-virgule ( ; ) s’il n’y en a pas, et ajoutez
alors le chemin d’accès au répertoire bin de votre JDK, en terminant celui-ci par un point-
virgule
9. Valider les modification, désormais vous pouvez compiler et exécuter en ligne de
commande. 44
REMARQUES:
Le nom du fichier java doit être le même que celui de la classe qui contient la fonction
principale main.
Pour compiler le programme source, il faut faire appel au programme javac.exe qui
se trouve dans le dossier c:\jdkX\bin.
Pour rendre accessible ce programme depuis n ’importe quel répertoire, il faut
ajouter la commande : path c:\jdkX\bin dans le fichier autoexec.bat.
Après compilation du programme PremierProgramme.java, il y a génération du
fichier PremierProgramme.class qui représente le ByteCode du programme.
Pour exécuter ce programme en byte code, il faut faire appel au
programme java.exe qui représente l'interpréteur du bytecode.

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

Create Verbose Manifest File

4- l'exécution se fait dans une console:


java - jar sortie.jar
47
CRÉATION D'EXÉCUTABLES EN JAVA
-MODE CONSOLE-

Pour exécution directe (double clic) :


- créer un fichier batch (.bat) pour lancer une console et y exécuter l'archive .jar
Contenant la commande : java - jar sortie.jar
- Ajouter l'instruction pause en fin de fichier pour bloquer l'affichage jusqu'à l'appui
sur une touche clavier
- Ajouter @echo off en 1ère ligne pour désactiver l'affichage des instructions.

48
CRÉATION D'EXÉCUTABLES EN JAVA -NETBEANS-

 Cliquer sur le bouton "Clean And Build"


 Dans l'arborescence du projet un
nouveau dossier "dist" (Distribution) est
créé.
 On y trouve le fichier " .jar ".

49
CRÉATION D'EXÉCUTABLES EN JAVA -ECLIPSE-

2
1
3

50
CRÉER UN .EXE À PARTIR DU .JAR
4

3
2

1- Choisir le fichier .jar en question et la destination ".exe"


2- Choisir une icone au besoin
3- Définir la version minimale du JRE
4- Lancer la création

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, ...;

Java impose que les variables soient impérativement déclarées.


Java permet de définir une variable à n'importe quel endroit du
code, afin de le rendre plus lisible.

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

Les types de données complexe sont appelés également


enveloppeur ou Wrapper, ils ont été introduits pour satisfaire la
philosophie de l’orienté objet : puisque tous les élément manipulés
par JAVA sont des classes .

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

long Entier long 8 -9223372036854775808 à 9223372036854775807

float flottant (réel) 4 -1.4*10-45 à 3.4*1038


double flottant double 8 4.9*10-324 à 1.7*10308
0 (False) ou 1 (true) : en réalité, toute autre valeur
boolean booléen 1
que 0 est considérée égale à true.

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");

Attention ! String commence par une Majuscule


61
CONVERSION DES TYPES DE DONNÉE (CASTING)
le fait de modifier le type d'une donnée en un autre
Ex : float X=12.354f
int i; i=X;  génère une erreur  il faut faire la conversion
i = (int)X;
A savoir :
Conversion implicite : effectuée par le compilateur
Ex: double x; int a=1; x=a; on aura 1.0 dans X
Conversion explicite (obligatoire) : une modification du type de donnée
forcée à l’aide d’un opérateur de cast
EX : float f=64.12f; char C =(char)f;
62
CONVERSION IMPLICITE – AJUSTEMENT DE TYPE

int -> long -> float -> double


Exemple: si n est de type int, p de type long et x de type float, l’expression :

63
CONVERSION IMPLICITE – AJUSTEMENT DE TYPE

Résumé des conversions sans perte d'information.

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;

et, dès lors, positifs même en présence d'une négation :


int one = // 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);

on a transformé une valeur entière


en chaine de caractère en utilisant
la méthode valueOf() de la classe
String
78
LES OPÉRATEURS
79
LES OPÉRATEURS
1. Les opérateurs de calcul
2. Les opérateurs d’assignation
3. Les opérateurs d’incrémentation
4. Les opérateurs de comparaison
5. Les opérateurs logiques
6. Les opérateurs bit à bit
7. Les opérateurs de rotation de bit

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))

Inverse l'état d'une variable


booléenne (retourne la valeur True si
! NON logique (!condition)
la variable vaut False, False si elle
vaut True)

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)

Retourne le complément à 1 d’un


~ Non ~4 -5
binaire

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.*

• Instancier un objet Scanner : Scanner sc = new Scanner(System.in);

• On récupère la valeur saisie en écrivant : int d = sc.nextInt();


// désormais la valeur tapée se trouve dans la variable d

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 :

Méthodes Description Description Retourne


showMessageDialog Transcrit un message à l’usager. Rien

showInputDialog Demande de taper une réponse. String (Objet)


showConfirmDialog Demande une question qui se répond par oui/non/annulé. Option
showOptionDialog Une méthode générale réunissant les 3 précédentes. Option

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

optionType Indique les boutons par défaut qui seront affichés:


 DEFAULT_OPTION
 YES_NO_OPTION
 YES_NO_CANCEL_OPTION
 OK_CANCEL_OPTION
options Si l’affichage par défaut n’est pas approprié, il est possible de fournir un tableau
d’objets (habituellement String) qui seront affichés à la place du libellé par défaut.
icon L’icône qui sera affiché sur la boîte de dialogue. Un icône par défaut est
associé au paramètre messageType.
title Le titre de la boîte de dialogue.
initialValue La valeur par défaut.
104
SHOWINPUTDIALOG - EXEMPLE -

showInputDialog est surchargée à plusieurs signatures

Exemple:

La valeur saisie sera stockée dans la variable de type String 'name'

105
SHOWINPUTDIALOG - EXEMPLE -

106
SHOWCONFIRMDIALOG -VALEUR RETOURNÉE-

Si une méthode showXxxDialog retourne un entier, les valeurs possibles sont :


 YES_OPTION
 NO_OPTION
 CANCEL_OPTION
 OK_OPTION
 CLOSED_OPTION

107
SHOWCONFIRMDIALOG -EXEMPLE-

Les signatures de la méthode showConfirmDialog:

Exemple:

Le choix effectué par l'utilisateur sera stocké dans la variable 'a'.


Exercice:
faire un test pour afficher les valeurs correspondantes à 'Oui', 'Non' et 'Annuler'

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 ;

 la condition est évaluée après chaque passage dans la boucle.


 On exécute le corps de la boucle tant que la condition est vérifiée.
 La boucle « do... while » s'exécutera au moins une fois
119
LA BOUCLE « FOR »
For (<initialisation>;<condition>;<pas>)
{
<instructions>
}

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};

<type du tableau> <nom du tableau>[] = {<contenu du tableau>};


int tableauEntier[] = {0,1,2,3,4,5,6,7,8,9};

char tableauCaractere[]={'a','b','c','d','e','f','g'};
String tableauChaine[]={"chaine1","chaine2","chaine3", "chaine4"};

Déclaration d’un tableau vide:


int tableEntier[] = new int[6]; //Ou encore
int [] tableEntier = new int[6];

123
TABLEAUX : TABLEAUX À UNE DIMENSION
Déclaration incorrecte:
double notes[6]; //Erreur: On ne peut pas indiquer de dimension ici

Déclaration sans initialisation:


double notes[];
ou
double[] notes; // ceci déclare une référence vers un
tableau dont la taille est inconnue

// @ est l'adresse de la première case du tableau


dont la taille est inconnue.

124
TABLEAUX : TABLEAUX À UNE DIMENSION
-EXEMPLE-

125
MEMORY MANAGEMENT
double[] notes = new double[8];

L'opérateur new réserve le nombre de cases mémoire demandé [8]


et mémorise l'adresse de la première case mémoire dans la
variable notes grâce au signe d'affectation.

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 --

String tab[] = {"toto", "titi", "tutu", "tete", "tata"};

for(int i=0; i<tab.length;i++) for(String str : tab)


{ System.out.println(str);
System.out.println(tab[i]); On peut utiliser cette syntaxe pour
plusieurs types de tableaux
}

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

un paramètre défini comme tableau de type String.


Ce paramètre est utilisé pour passer des données en ligne de commande lors du
lancement de la commande d’exécution du programme.

132
TABLEAU : TABLEAU À DEUX DIMENSIONS
Déclarations :
int premiersNombres[][]={{0,2,4,6,8},{1,3,5,7,9}};

int Table[][]= new int[6][6];


int t[][]={{1,2,3},{5,7,9,0},{5,1}}

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]

t[0] 5 t[1] [0]


t [1] 7 t[1] [1]
t
t [2] 9 t[1] [2]
0 t[1] [3]

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.

Le type des éléments doit nécessairement correspondre à un type évolué


Exemple:
ArrayList <String> names;

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:

ArrayList<String> phrase = new ArrayList<String>();


ArrayList<Integer> notes= new ArrayList<Integer>();
150
MÉTHODES SPÉCIFIQUES
Un certain nombre d’opérations (méthodes) sont directement attachées au type
ArrayList;
L’utilisation de ces méthodes spécifiques se fait avec la syntaxe suive:
nomDeTableau.nomdeMéthode(arg1, arg2, ….);
Exemple:
ArrayList<String> voitures = new ArrayList<String>;
System.out.println(voitures.size()); //Affiche 0

La méthode size() renvoie la taille du tableau.

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"}

Les valeurs 'un ' et 'deux' s'afficherons sur


l'écran

La valeur 'deux' s'affichera sur l'écra

{" premier " , "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--

1- Moyenne des Entiers contenus dans une ArrayList.


2- Trier une ArrayList contenant des chaines de caractères

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");

8. Collections.sort(cars); // Sort cars with the help of "Collections" class


9. for (String i : cars) {
10. System.out.println(i); } } }

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.

Compare la chaîne a un objet et retourne true en cas d’égalité


boolean equals(Object anObject)
et false sinon
Compare la chaîne a un objet et retourne true en cas d’égalité
boolean equalsIgnoreCase(Object anObject)
et false sinon ( on ignore la casse)
boolean regionMatches(boolean ignoreCase, int
Teste l’égalité de deux parties de chaînes
toffset, String other, int ooffset, int len)
boolean regionMatches(int toffset, String other,
Teste l’égalité de deux parties de chaînes
int ooffset, int len) 168
LES CHAINES DE CARACTÈRES
-CARACTÈRE ET SOUS-CHAÎNE-

char charAt(int i) Retourne le caractère à l’indice spécifié en paramètre.

String substring(int d) Sous-chaîne depuis d jusqu’à la fin

String substring(int d, int f) Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.

boolean startsWith(String prefix) Renvoie true si prefix est un préfixe de la chaîne

boolean startsWith(String prefix,


Renvoie true si prefix est un préfixe de la chaîne à partir de i.
int i)

boolean endsWith(String suffix) Retourne true si suffix est un suffixe de la chaîne

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 toString() Retourne une chaîne égale à la chaîne

String toUpperCase() Retourne une chaîne égale à la chaîne convertie en majuscules.

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

int indexOf(String str) Retourne l’indice de la première occurrence de la chaîne


int indexOf(String str, int Retourne l’indice de la première occurrence de la chaîne à
fromIndex) partir de fromIndex
int lastIndexOf(int ch) Retourne l’indice de la dernière occurrence du caractère
int lastIndexOf(int ch, int Retourne l’indice de la dernière occurrence du caractère à
fromIndex) partir de fromIndex
int lastIndexOf(String str) Retourne l’indice de la dernière occurrence de la chaîne
int lastIndexOf(String str, int Retourne l’indice de la dernière occurrence de la chaîne à
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.

2.int capacity(): returns the current capacity.

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.

11.StringBuilder reverse(): This method causes this character sequence to be


replaced by the reverse of the sequence.
12.void setCharAt(int index, char ch): In this method, the character at the specified
index is set to ch.
13.void setLength(int newLength): This method sets the length of the character
sequence.

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.

15.String substring(): This method returns a new String that contains a


subsequence of characters currently contained in this character sequence.

16.String toString(): This method returns a string representing the data in


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:

L’appel de la fonction somme()

Méthode main()

Méthode somme()

188
MÉTHODE DE CLASSE
Nom de la méthode

Argument de la méthode

Variable locale

Valeur retournée par la fonction

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

o La surcharge de méthode consiste à donner le même nom à


des méthodes comportant des paramètres différents (en type
et/ou en nombre) .
o En effet, une méthode est déterminée par ce que l'on appelle
sa signature, c'est-à-dire:
o Son nom
o Ses paramètres

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

Toutes ces méthodes retournent un double. 195


EXERCICES

196

Vous aimerez peut-être aussi