0% ont trouvé ce document utile (0 vote)
30 vues59 pages

CH - 1 - Fondements Du Langage Java - Complet

Le document présente une introduction au langage Java, son histoire, ses caractéristiques et son évolution depuis sa création en 1990. Java, développé par Sun Microsystems, a été conçu pour être simple, robuste et portable, et a gagné en popularité grâce à son orientation vers le développement web. Il est maintenant largement utilisé dans divers domaines et soutenu par une vaste bibliothèque d'API et des environnements de développement intégrés.

Transféré par

hakimazagriri41
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)
30 vues59 pages

CH - 1 - Fondements Du Langage Java - Complet

Le document présente une introduction au langage Java, son histoire, ses caractéristiques et son évolution depuis sa création en 1990. Java, développé par Sun Microsystems, a été conçu pour être simple, robuste et portable, et a gagné en popularité grâce à son orientation vers le développement web. Il est maintenant largement utilisé dans divers domaines et soutenu par une vaste bibliothèque d'API et des environnements de développement intégrés.

Transféré par

hakimazagriri41
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/ 59

12/11/2024

PROGRAMMATION JAVA
POUR LES SCIENCES DE DONNÉES
Partie 1 : Java
Chapitre 1 : Fondements du langage Java
Pr. A. DARGHAM
Département de Mathématiques & Informatique
ENSA, Khouribga

Introduction au langage Java


Éléments de base du langage Java
12/11/2024

1990
• Lancement du projet Java chez Sun Microsystems.
• Sous la direction de James Gosling, Mike Sheridan et
Patrick Naughton.
• Objectif  Développer un langage de
programmation simple, robuste et portable.

1991 : Oak
• Initialement, le langage fut nommé « Oak » et visait à
développer un langage pour les appareils
électroniques embarqués, comme les décodeurs de
télévision ou les appareils domestiques intelligents.
• Il s’agit d’un petit interprète fiable, indépendant de
l'architecture et réalisé au départ par extension du
langage C++. 2

Extension de C++
• James Gosling a utilisé C++ comme langage de base
pour écrire Oak en 1991.
• Il a voulu améliorer certains aspects de C++, en
particulier pour le rendre plus simple et plus sécurisé.
• Or, C++ n’était pas à la hauteur.

3
12/11/2024

Problèmes du C++
• Recompilation dès qu'une nouvelle puce arrive.
• Complexité de programmation pour l’écriture de
logiciels fiables  C++ n’est pas sécurisé.
• Pas de gestion automatique de la mémoire (pas de
ramasse-miettes).
• Aucune gestion de la concurrence (absence de
threads avant la version C++.11). 4

Motivations de Gosling
• Créer un langage qui élimine certaines des erreurs
courantes associées à la gestion manuelle de la
mémoire et aux pointeurs.
• Résultats  la gestion automatique de la mémoire
(Garbage collector, ramasse-miettes) et l’absence de
pointeurs explicites.
5

Orientation vers le Web


• Due à un manque d’intérêt de la part de l’industrie
des appareils électroniques, Sun a réorienté le projet
vers le développement Web, où les fonctionnalités
multiplateformes du langage Oak se sont révélées
très attractives.
• En 1995, Oak a été renommé Java.
6
12/11/2024

Orientation vers le Web


• Sun a officiellement lancé Java avec le slogan :
« Write Once, Run Ayherre »
• Cette capacité à rendre le code portable et à
fonctionner sur n’importe quel appareil équipé de la
Java Virtual Machine (JVM) a été révolutionnaire à
l’époque.
7

1995-96
• Hotjava  Lancement du 1er navigateur Web (écrit en
Java) capable de charger de petits programmes Java
(appelés applets) à partir d’Internet et de les exécuter
dans le navigateur
• 1996  Sortie de la 1ère version du JDK.

Java
• L’engouement pour Java a été amplifié par l’essor
d’Internet.
• Au fil du temps, Java s’est imposé comme l’un des
langages de programmation les plus utilisés dans
tous les domaines.
• En 2009, Oracle a racheté Sun Microsystems et a pris
en charge le développement de Java. 9
12/11/2024

• Portabilité  Java est indépendant de la plate-forme


sur laquelle s’exécute.
• Le code source Java est premièrement compilé
(commande javac) en « bytecode » (code
intermédiaire).
• Le « bytecode » fonctionne sur tout ordinateur sur
lequel existe un logiciel spécial : la machine virtuelle
Java (JVM, Java Virtual Machine).
10

• La JVM est désormais disponible pour tous les


systèmes d’exploitation courants.
• Elle représente une couche entre le bytecode et la
plate-forme matérielle.
• Un interpréteur traduit les commandes du
« bytecode » en commandes de processeur
spécifiques à la plate-forme (commande java).
11

12
12/11/2024

• La JVM contrôle l’exécution des programmes Java et


peut empêcher l’exécution de commandes mettant en
danger la sécurité du système.
• La JVM charge les classes à la demande, fait l’édition
de lien et exécute le code.

13

• Java est un langage orienté objet : il prend en charge


tous les aspects clés de la POO comme :
• Les classes.
• L’encapsulation des données.
• L’héritage.
• Le polymorphisme, etc.
• Les concepts essentiels de la POO en Java ont été
adoptés des langages C, C++ et Smalltalk.
14

• Java est volontairement simple : contrairement au


langage C++, Java n’a pas de pointeurs explicites,
pas de fichiers d’en-tête et pas d’héritage multiple.
• Les classes utilisées dans un programme peuvent être
localisées sous forme de fichiers à différents
emplacements  Ils ne sont chargés que lorsque le
programme est en cours d’exécution, si nécessaire.
15
12/11/2024

• Garbage collector  la gestion de la mémoire en


Java est automatique : pendant l’exécution d’un
programme, l’espace de stockage pour les objets qui
ne sont plus nécessaires peut être libéré par le
système d’exécution.
• Codage Unicode  Java utilise la norme
internationale Unicode (16 bits) pour représenter les
caractères.
16

• Typage fort  des contrôles de type de données sont


effectués et les incohérences de type sont détectées
dès que les données sont traduites en bytecode.
• Gestion des exceptions (Exception Handling)  Java
offre un mécanisme pour gérer les erreurs à
l’exécution d’un programme. Par exemple, le respect
des limites d’indices lors de l’accès aux tableaux est
surveillé pendant l’exécution.
17

• Parallélisme  Java prend en charge l’exécution


parallèle d’instructions (Threads) au sein de
programmes (Multithreading).

18
12/11/2024

• Nécessite l’installation d’un interpréteur pour pouvoir


exécuter un programme Java.
• L’interprétation du code ralentit l’exécution.
• Les applications ne bénéficient que du dénominateur
commun des différentes plate-formes  limitation, par
exemple, des interfaces graphiques.
• Gestion gourmande de la mémoire.
• Impossibilité d’opérations de « bas niveau » liées au
matériel.
19

• De nombreuses versions de Java depuis 1995 :


• Java 1.0 en 1995
• Java 1.1 en 1996
• Java 1.2 en 1999 (Java 2, version 1.2)
• Java 1.3 en 2001 (Java 2, version 1.3)
• Java 1.4 en 2002 (Java 2, version 1.4)
• Java 5 en 2004
• Java 6 en 2006
• Java SE 7 2011
• Java SE 8 2014
• Java SE 9, 2017
• Java SE 10, 20 mars 2018
• Java SE 11, 25 septembre 2018
• Java SE 12, 19 mars 2019
• Java SE 13, 17 septembre 2019 20
….

• Évolution très rapide et succès du langage.


• Une certaine maturité atteinte avec Java 1.2

21
12/11/2024

• Les bibliothèques de classes Java fournissent un


certain nombre d’API (Application Programming
Interfaces) utiles sous la forme de classes et
d’interfaces pour la programmation d’applications.

22

• JFC (Java Foundation Classes).


• AWT (Abstract Window Toolkit).
• API Java 2D.
• Java Swing.
• API Java 3D.
• JAI (Java Advanced Imaging).
• API d’accessibilité.
• API de sécurité.
• JNI (Java Native Interface).
• Java RMI (Remote Method Invocation Interface).
• Java IDL (Java Interface Definition Language).
• Java servlets.
• Java Beans.
• API JDBC (Java Database Connectivity). 23

JSE
• Java Standard Edition  principalement pour les
applications client sur PC et postes de travail.
JEE
• Java Entreprise Edition  avec des API importantes
pour les applications Web d’entreprise basées sur des
architectures client-serveur.
24
12/11/2024

JME
• Java Micro Edition  pour les petits appareils tels
que les ordinateurs de poche et pour les systèmes
embarqués.
Smartcard Edition
• Java Entreprise Edition  pour utilisation sur les
cartes à puce.
25

SDK
• Standard Software Development Kit  ensemble
d’outils pour le développement d’applications pour
une plateforme spécifique (Java, Android, iOS, etc)

26

• Divers fabricants proposent des environnements de


développement intégrés pour prendre en charge des
projets complexes avec des outils conviviaux :
• Eclipse
• Visual Age for Java d’IBM
• JBuilder de Borland
• Visual Café de Symantec
• IntelliJ IDEA de JetBrains
• … 27
12/11/2024

• Java fournit de nombreuses librairies de classes


remplissant des fonctionnalités très diverses : c’est
l’API Java.
• Une API contient un ensemble de bibliothèques de
classes permettant une programmation plus aisée car
les fonctions deviennent indépendantes du matériel.
• Ces classes sont regroupées, par catégories, en
paquetages (packages).
28

• Les principaux paquetages :


• [Link]  classes pour la gestion des SD classiques.
• [Link]  classes pour la gestion des E/S.
• [Link]  classes les fonctionnalités de base de java (chaînes de
caractères, nombres, threads, exceptions) ainsi que les classes utilitaires pour
manipuler les objets.
• [Link]  interfaces graphiques, images et dessins.
• [Link]  composants « légers » pour la création des GUI.
• [Link]  classes pour la gestion des sockets et des URL.
• [Link]  classes pour la gestion des appel de méthodes à distance.
• [Link]  classes pour la gestion d’une base de données via JDBC.
29

• La documentation de Java est standard, que ce soit


pour les classes de l’API ou pour les classes
utilisateur.
• Possibilité de génération automatique avec l’outil
« Javadoc ».
• Elle est au format HTML  intérêt de l’hypertexte
pour naviguer dans la documentation.
30
12/11/2024

• Pour chaque classe, il y a une page HTML contenant :


• La hiérarchie d’héritage de la classe.
• Une description de la classe et son but général.
• La liste des attributs de la classe (locaux et hérités).
• La liste des constructeurs de la classe (locaux et hérités).
• La liste des méthodes de la classe (locaux et hérités).
• Puis, chacune de ces trois dernières listes, avec la
description détaillée de chaque élément.
31

• Où trouver les informations sur les classes de l’API :


• Sous le répertoire jdk1.x/docs/api dans le JDK :
• Les documentations de l’API se téléchargent et s’installent (en
général) dans le répertoire dans lequel on installe java.
• Par exemple si vous avez installer Java dans le répertoire
C:/Apps/jdk1.7/, vous décompresser le fichier zip contenant les
documentations dans ce répertoire.
• Les docs de l’API se trouveront alors sous :
C:/Apps/jdk1.7/docs/api/[Link]
• Sur le site d’Oracle, on peut la retrouver à
[Link] 32

33
12/11/2024

• JDK  c’est un environnement de développement fourni par Oracle


(spécifique à Java et contient tout ce qui est nécessaire pour
développer des programmes Java (compilateur, JRE, outils de
débogage). Il contient :
• Les classes de base de l’API java.
• La documentation au format HTML.
• Le compilateur « javac ».
• La JVM « java ».
• Le visualiseur d’applets « appletviewer ».
• Le générateur de documentation « javadoc »,
• … 34

Commentaires
• Java reconnaît trois types de commentaires :
• Commentaires sur une seule ligne  //…
• Commentaires sur plusieurs lignes : /* … */
• Commentaires sur la documentation : /** … **/ (
utilisés par l’outil SDK « javadoc » pour générer
automatiquement la documentation du
programme). 35
12/11/2024

Identificateurs
• Permettent de nommer les entités d’un programme
(variables, classes, interfaces, méthodes et packages).
• Ils peuvent être constitués de plusieurs lettres, traits
de soulignement « _ », symboles « $ » (considérés
comme des lettres) et chiffres.
• Le 1er caractère d’un identificateur doit être une lettre.
36

Identificateurs
• Java est sensible à la casse  une distinction est
faite entre majuscules et minuscules.
• Un identificateur ne doit pas correspondre à un mot-
clé (keyword) du langage.
• Un identificateur doit être différent des littéraux
« true », « false » et « null ».
37

Unicode
• L’Unicode est un « jeu de caractères standardisé » qui
peut être utilisé pour représenter les caractères de
toutes les langues courantes.
• Un caractère Unicode est codé sur 16 bits  ce qui
permet d’écrire 65 536 caractères différents.
• Les 128 premiers caractères du jeu de caractères
Unicode sont les caractères ASCII (7 bits). 38
12/11/2024

Mots-clés

39

Variables
• Les données sont représentées dans les programmes
par des variables.
• Une variable correspond à un espace de stockage
dans la mémoire principale dans lequel est stockée la
valeur actuelle de la variable.
• Les variables ne peuvent contenir que des valeurs très
spécifiques. 40

Variables
• Ceci est déterminé par le type de données.
• Une variable est déclarée sous la forme suivante :

• La variable peut se voir attribuer une valeur via une


initialisation explicite en utilisant l’opérateur
d’affectation « = »
41
12/11/2024

Variables

• Il est possible d’effectuer plusieurs variables en une


seule ligne en utilisant le symbole « , » :

42

Types primitifs

43

Littéraux
• Littéral  valeur constante.
• Le type « boolean » possède deux littéraux : « true »
et « false ».
• Impossible de convertir les valeurs de vérité en
valeurs entières.

44
12/11/2024

Littéraux
• Le type « char » est utilisé pour stocker des caractères
individuels du jeu de caractères Unicode.
• Les littéraux sont placés entre guillemets simples « ' »
et spécifiés sous forme de caractères Unicode ou de
séquences d’échappement.

45

Littéraux

46

Littéraux
• Les types « byte », « short », « int », « long » sont
signés.
• Les littéraux peuvent être écrits sous forme
• Décimale : chiffres de 0 à 9.
• Octale : préfixe « 0 », chiffres de 0 à 7.
• Hexadécimale : préfixes « 0x » ou « 0X », chiffres
de 0 à 9, plus les littéraux abcdef ou ABCDEF. 47
12/11/2024

Littéraux
• Les nombres négatifs sont représentés en les faisant
précéder du signe moins « - ».
• Les littéraux entiers sont de type « int », sauf si la
lettre « l » ou « L » est ajoutée comme suffixe.
• Dans ce cas, ils sont de type « long ».

48

Littéraux
• Les littéraux des types « float » et « double » sont
écrits en notation décimale.
• Ils se composent d’une partie pré-virgule, d’un point
décimal « . », d’une partie décimale, d’un exposant et
d’un suffixe.
• Au moins le point décimal « . », l’exposant ou le
suffixe doivent être présents. 49

Littéraux
• La partie pré-virgule (ou la partie post-virgule) peut
être omise.
• La partie pré-virgule et l’exposant peuvent être
précédés d’un signe « + » ou « - ».
• L’exposant introduit par « e » ou « E » et le suffixe
sont facultatifs.
50
12/11/2024

Littéraux
• Le suffixe « f » ou « F » désigne un littéral flottant, le
suffixe « d » ou « D » désigne un littéral double.
• Si aucun suffixe n’est précisé, il s’agit d’un littéral
double.
• Voici quelques exemples :

51

Littéraux
• Les chaînes constantes sont des séquences de
caractères littéraux entourées de guillemets doubles
« " ».
• Exemple :

52

Littéraux
• Cependant, il n’y a pas de type de données primitif
associé, mais plutôt une classe « String » qui peut être
utilisée pour créer des chaînes de caractères.
• L’opérateur « + » peut être utilisé pour concaténer des
chaînes de caractères.

53
12/11/2024

Opérateurs & Expressions


• Les opérateurs peuvent être utilisés pour effectuer des
affectations et des calculs, ainsi que pour formuler et
vérifier des conditions.
• Les opérateurs font partie des expressions.
• Une expression est une combinaison d’opérandes
(littéraux, variables ou méthodes), d’opérateurs et de
parenthèses. 54

Opérateurs & Expressions


• Chaque expression a une valeur de retour dont le
type est déterminé par les types des opérandes et le
type de l’opérateur.
• Les règles de priorité déterminent l’ordre d’évaluation
lorsque plusieurs opérateurs apparaissent dans
l’expression.
55

Opérateurs arithmétiques

56
12/11/2024

Opérateurs arithmétiques
• Ils ont des opérandes numériques (entiers ou réels) et
renvoient une valeur de retour numérique.
• Si les opérandes sont de types différents, une
conversion de type « ascendante » est
automatiquement effectuée.

57

Opérateurs arithmétiques
• Le plus petit type des deux opérandes est converti
dans le type du plus grand.
• Le type de résultat correspond au plus grand des
deux opérandes.
• Lors de la division de nombres entiers, le résultat est
le quotient entier des deux nombres (13/5 vaut 2).
58

Opérateurs arithmétiques
• L’opérateur modulo « % » calcule le reste « r = a %
b » d’une division entière (ou réelle) de « a » par
« b ».
• Exemples :
• « 13 % 5 » vaut 3
• « 13.8 % 5.6 » vaut 2.6.
59
12/11/2024

Opérateurs arithmétiques
• Comme en C++, Java offre les opérateurs
d’incrémentation « ++ » et de décrémentation « -- »
qui ne peut être utilisé que sur des variables.
• Une distinction est faite entre « préfixe » et
« postfixe », selon que l’opérateur est avant ou après
l’opérande : « a++ », « ++a », « a-- » ou « --a ».
60

Opérateurs relationnels
• Ils comparent deux expressions entre elles  le
résultat est de type booléen.

61

Opérateurs logiques
• Ils relient les valeurs de vérité entre elles.
• Java fournit les opérations logiques : la négation, la
conjonction, la disjonction inclusive et la disjonction
exclusive.
• La conjonction et la disjonction inclusive sont
disponibles en deux versions.
62
12/11/2024

Opérateurs logiques
• Dans la variante dite courte, le deuxième opérande
n’est plus évalué lorsque le résultat de l’expression
globale a déjà été déterminé.
• Par exemple, « A && B » est faux si « A » est faux,
quelle que soit la valeur de vérité de « B ».
• L’expression « ! a » renvoie false si « a » est vrai
et true si « a » est faux. 63

Opérateurs logiques

64

Opérateurs logiques

65
12/11/2024

Opérateurs bit-à-bit
• Ils travaillent sur la représentation binaire des
opérandes (8, 16, 32 ou 64 bits) qui doivent être de
types entiers (char, byte, short, int ou long).
• Par exemple, « ~a » est le complément à un du
nombre « a » : il est créé à partir du nombre « a » en
inversant tous les bits de « a » : « 0 »  « 1 » et « 1 »
 « 0 ». 66

Opérateurs bit-à-bit
• Avec les opérateurs de décalage, tous les bits du
premier opérande sont décalés vers la gauche ou la
droite d’autant de places que spécifié dans le
deuxième opérande.
• Lors d’un décalage à gauche, des « 0 » sont ajoutés à
partir de la droite.
67

Opérateurs bit-à-bit
• Lors d’un décalage à droite, des « 0 » sont ajoutés
depuis la gauche si le premier opérande est positif.
• S’il est négatif, des « 1 » sont ajoutés.
• Avec l’opérateur « >>> », les « 0 » sont toujours
ajoutés à partir de la gauche.

68
12/11/2024

Opérateurs bit-à-bit

69

Opérateurs bit-à-bit

70

Opérateurs d’affectation
• Java offre l’opérateur d’affectation simple et
plusieurs opérateurs d’affectation composée.
• Avec l’affectation simple « = », l’expression de droite
est évaluée et affectée à la variable de gauche.
• Les types des deux côtés doivent être compatibles.
• Une conversion automatique du côté droit vers le type
de la variable est effectuée si nécessaire. 71
12/11/2024

Opérateurs d’affectation
• Une affectation composée « a op= b » correspond à
« a = a op b ».
• Par exemple « a += b » signifie « a = a + b ».

72

Opérateur ternaire
• L’opérateur conditionnel « ?: » nécessite trois
opérandes : une condition et deux expressions.
• Il est présenté sous la forme :
Condition ? Expression_1 : Expression_2
• La condition est une expression booléenne.

73

Opérateur ternaire
• Si la condition est vraie, la valeur de
« Expression_1 » est obtenue, sinon c’est la valeur de
« Expression_2 » qui est obtenue.
• L’opérateur de condition a la priorité 12.

74
12/11/2024

Opérateur ternaire
• Exemples :
• Valeur absolue de x  x > 0 ? x : -x
• Maximum de x et y  x > y ? x : y

75

Conversion implicites
• Une expression mixte contient des opérandes de
types différents  3 + 2.5.
• Dans ce cas le compilateur procède à une conversion
implicite de types.
• La conversion de types suit la hiérarchie suivante :

76

Exemple :
• Soit l’expression « a * b + c », où « a » de type int,
« b » de type long et « c » de type float.
• « a » est convertie en long.
• « a * b » de type long  sera convertie en float.
• Le résultat final est de type float.

77
12/11/2024

Promotion numérique
• Les opérateurs arithmétiques ne sont pas définis pour
les types char, byte et short.
• Java prévoit que toute valeur de l’un de ces trois
types apparaissant dans une expression est d’abord
convertie en int.

78

Conversions par affectation

79

Cas des expressions constantes


• D’une manière générale, il est possible d’affecter
n’importe quelle expression constante entière à une
variable de type char, byte ou short à condition que sa
valeur soit représentable dans le type voulu.

80
12/11/2024

Conversion explicites : opérateur de cast


• L’opérateur de « cast » permet d’effectuer une
conversion explicite d’un type vers un autre.
• La syntaxe d’utilisation de cet opérateur est :

81

Exemples :

82

Bloc d’instructions
• En java, une instruction simple doit se terminer par
« ; ».
• Un bloc d’instructions est une suite d’instructions (de
toutes sortes) placées entre accolades « { » et « } ».
• Les instructions d

83
12/11/2024

Instruction « if »

• Condition  expression booléenne.


• Les instructions peuvent être simples,
structurées ou des blocs.

84

Instruction « switch »

85

Instruction « switch »
• Expression : doit être de type char, byte, short, int,
énumération ou String.
• Les instructions sont simples, structurées ou des
blocs.

86
12/11/2024

Instruction « for »

• Expression_1  déclaration, suite d’expressions


quelconques séparées par des virgules « , ».
• Cette expression est le plus souvent une initialisation
du compteur de la boucle.
87

Instruction « for »
• Expression_2  expression booléenne quelconque
(sert pour tester l’arrêt d’exécution de la boucle).
• Expression_3  suite d’expressions quelconques
séparées par des virgules « , ». C’est le plus souvent
une incrémentation ou décrémentation du compteur
de la boucle.
88

Instruction « for »
• Instruction  simple, structurée ou un bloc.
• Elle constitue le corps de la boucle.

89
12/11/2024

Instruction « while »

• Condition  expression booléenne.


• Les instructions peuvent être simples, structurées
ou des blocs.
90

Instruction « do-while »

• Condition  expression booléenne.


• L’instruction peut être simple, structurée ou un
bloc.
91

Instruction « break »

• Elle permet d’interrompre l’exécution d’un switch


ou d’une boucle.
• Cependant, elle ne permet de ne sortir que du
niveau le plus interne.
92
12/11/2024

Instruction « break »

• Pour sortir d’une structure plus externe, on peut


utiliser l’instruction break avec une étiquette
préalablement placée devant la structure.

93

Instruction « continue »

• Elle permet de passer prématurément à


l’itération suivante d’une boucle.
• Cependant, elle ne réalise ceci que pour la
boucle la plus interne.
94

Instruction « break »

• Pour provoquer le passage à l’itération suivante


d’une boucle plus externe, on peut utiliser
l’instruction continue avec une étiquette
préalablement placée devant la boucle.
95
12/11/2024

Écriture sur la sortie standard


• L’affichage standard à l’écran est effectué à l’aide des
méthodes « print() » et « println() » de la classe
« PrintStream » (classe de l’objet [Link]).
• La méthode « print » ne fait pas retour à la ligne alors que la
méthode « println » effectue un retour à la ligne suivante.
• Java offre également une méthode « printf() » similaire à la
fonction « printf() » du langage C.
96

Écriture sur la sortie standard


• Si tous les arguments sont de types primitifs ou String,
les valeurs de types primitifs sont converties vers le
type String par l’appel des méthodes statiques
« valueOf() » de la classe « String ».
• Si un argument est un objet, alors l’objet sera
convertit en une valeur de type « String » par l’appel
de la méthode « toString() ». 97

Exemple :

98
12/11/2024

Lecture sur l’entrée standard


• Java offre plusieurs possibilité pour réaliser la lecture
sur l’entrée standard (le clavier).
• L’une de ces possibilités est la classe « Scanner »
(package [Link]).
• Cette classe offre des méthodes pour extraire des
valeurs à partir du clavier (ou une chaîne de
caractères, etc). 99

Lecture sur l’entrée standard


• Ces méthodes « scannent » le flot d’entrée caractère
par caractère (analyse lexicale) en utilisant des
expressions régulières spécifiques.
• Si le flot d’entrée ne correspond pas à cette
expression régulière, le compilateur Java énonce une
erreur.
100

Exemples :

101
12/11/2024

Lecture sur l’entrée standard


• Chacune de ces méthodes arrête la lecture :
• Si une erreur est rencontrée.
• Lorsqu’un caractère blanc est rencontré (espace,
tabulation, retour à la ligne).

102

Exercice 1
• Écrire un programme Java qui lit :
• une chaîne de caractères désignant le nom et le
prénom d’une personne.
• un entier désignant l’âge de cette personne.
• un réel (float) désignant la taille en mètres de cette
personne.
103

104
12/11/2024

Lecture sur l’entrée standard


• Techniquement, il est possible de créer plusieurs
objets scanner dans un programme, mais cela se
traduit par un gaspillage de ressources.
• Il faut donc autant que possible s’assurer qu’on ne
crée qu’un scanner par exécution du programme et
réutiliser toujours le même scanner pour toutes les
lectures au clavier. 105

Lecture sur l’entrée standard


• La méthode « close » pour fermer un scanner
lorsqu’on n’en a plus besoin est conseillée  elle
libère une ressource système.
• On ne peut plus rien lire une fois le scanner fermé.

106

Tableaux en Java
• Les tableaux permettent de stocker plusieurs valeurs
de même type dans une variable.
• Les éléments contenus dans un tableau sont repérés
par des indices (0 pour le premier élément).
• En langage Java, les tableaux sont des objets  ils
sont donc manipulés par des références.
107
12/11/2024

Tableaux en Java
• Une variable de type « tableau » contient une
référence à un tableau.
• Les éléments d’un tableau sont crées par l’opérateur
« new ».
• En Java, la taille d’un tableau n’est fixé que lors de
son initialisation (et non pas lors de sa déclaration).
108

Tableaux en Java
• Les éléments d’un tableau peuvent être de type :
• Primitif  char, byte, short, int, long, float,
double.
• Objet  String, ou n’importe quel objet.

109

Syntaxes de déclaration d’un tableau

110
12/11/2024

Syntaxes de création d’un tableau

111

Exemples :

112

Exemples :

113
12/11/2024

Exemples :

114

Tableaux en Java
• La création d’un tableau par l’opérateur new permet :
• d’allouer de la mémoire pour stocker les éléments
du tableau en fonction du type et de la taille du
tableau.
• initialiser par défaut chaque élément du tableau à
la valeur 0 (le 0 du type).
115

Valeurs par défaut des éléments d’un tableau


• Type entier (byte, short, int et long)  0.
• Type char  ‘\0’.
• Type float  « 0.0f ».
• Type double  « 0.0 ».
• Type String ou Objet  « null ».
116
12/11/2024

Propriétés des tableaux


• La taille d’un tableau est accessible via le champ
constant length  final int length.
• La taille du tableau est défini à l’exécution  elle
peut être une valeur constante ou une variable.
• Après exécution, la taille ne pourra plus être
modifiée.
117

Propriétés des tableaux


• Par contre, la référence à un tableau peut changer.
• Il est possible d’affecter une référence de tableau à
une autre :
• soit par l’opérateur d’affectation « = ».
• soit par l’opérateur « new ».
• Dans ce cas, la variable tableau désignera un autre
ou un nouveau tableau. 118

Exemples :

119
12/11/2024

Exemples :

120

Propriétés des tableaux


• Les indices d’un tableau « tab » sont compris entre 0
et « [Link] – 1 ».
• Java vérifie automatiquement l’indice lors de l’accès
à un élément d’un tableau.
• Il lève une exception de type
« ArrayOutOfBoundsException », s’il y a tentative
d’accès hors bornes. 121

Propriétés des tableaux


• On accède à l’élément d’indice « i », lorsque 0 <= i
<= [Link] – 1, d’un tableau « tab » en écrivant
« tab[i] ».
• En règle générale, l’élément « tab[i] » doit être vu
comme une variable dont le type est celui du tableau.

122
12/11/2024

Exemples :

123

Propriétés des tableaux


• Java permet de manipuler globalement les tableaux
par affectation de leurs références.
• L’affectation ne modifie que la référence.
• Ainsi, « tab1 = tab2; » permet de copier la référence
contenue dans « tab2 » et l’affecter à « tab1 » : les
deux tableaux désignent le même objet tableau qui
était initialement référencé par « tab2 ». 124

Propriétés des tableaux


• On perd alors l’objet initialement référencé par
« tab1 ».
• Pour copier les valeurs de « tab2 » dans « tab1 », il
faut :
• soit l’effectuer manuellement.
• soit utiliser une méthode des classes prédéfinies.
125
12/11/2024

Exemple 1 :

126

Propriétés des tableaux


• La méthode « [Link]() » permet de copier
un tableau dans un autre.
• L’appel de cette méthode s’effectue via la syntaxe
suivante :
[Link](src, srcPos, dest, destpos, nb)

127

Propriétés des tableaux


• src : tableau source.
• srcPos : indice du 1er élément à copier à partir de src.
• dest : tableau destination.
• destpos : indice de « dest » où sera copié le 1er
élément.
• nb : nombre d’éléments copiés.
128
12/11/2024

129

Propriétés des tableaux


• La méthode « [Link](tab, N) » permet de
copier les « N » premiers éléments du tableau « tab »
dans un autre.
• La méthode « [Link](tab, Start, End) »
permet de copier les éléments du tableau « tab »
situés entre les indices « Start » et « End – 1 ».
130

131
12/11/2024

Comparer des tableaux


• Cas de deux tableaux de types primitifs :
• on compare manuellement les éléments un à un.
• on utilise la méthode « equals() » de la classe
« Arrays ».
• La « [Link](t1, t2) » retourne une booléenne
 « true » si les deux tableaux t1 et t2 sont
identiques, « false » sinon. 132

133

Tableau des arguments de la méthode main


• Le paramètre obligatoire de la méthode principale
« main », nommé habituellement « args », permet de
stocker les arguments qui seront passés à la ligne de
commande à cette méthode.
• Il s’agit d’un tableau de type « String ».

134
12/11/2024

Tableau des arguments de la méthode main

135

136

137
12/11/2024

138

Tableaux à deux dimensions


• Un tableau à deux dimensions représente une matrice
formée d’une ensemble de lignes et de colonnes.
• Si « t » est un tableau à deux dimensions, l’élément se
trouvant à la ligne « i » et à la colonne « j » de « t »
est désigné par « t[i][j] ».
• En Java, ce type de tableau est implémenté comme un
« tableau de tableau ». 139

Tableaux à deux dimensions


• Déclaration :

• Chaque élément contient une référence vers un


tableau.
140
12/11/2024

Tableaux à deux dimensions


• Création : via l’opérateur « new »

• Crée un tableau à deux dimensions de 20 lignes et 10


colonnes.
141

142

143
12/11/2024

Tableaux à deux dimensions


• Création : via l’opérateur « new »

• Crée un tableau à deux dimensions de 20 lignes,


chacune a un nombre variable de colonnes.
144

145

Tableaux à deux dimensions


• Les tableaux à plusieurs dimensions sont définis à
l’aide de tableaux de tableaux  Ce sont des
tableaux dont les composantes sont elles-mêmes des
tableaux.
• Soit un tableau « t » à deux dimensions.

146
12/11/2024

Tableaux à deux dimensions


• « [Link] »  taille de la 1ère dimension (nombre de
lignes).
• « t[i].length »  taille de la ligne « i » (nombre de
colonnes de la ligne « i »).

147

148

149
12/11/2024

Tableaux et méthodes
• Une méthode Java peut :
• avoir comme argument un tableau (de n’importe
quel type).
• retourner un tableau comme résultat.
• La taille du tableau ne doit pas être spécifiée dans les
deux cas  elle peut être obtenue dans le corps de la
méthode via l’attribut « length ». 150

Tableaux et méthodes
• Le passage des tableaux comme arguments s’effectue
par référence et non pas par copie (comme les types
primitifs).
• La méthode agit directement sur le tableau et non sur
sa copie  cela a pour conséquence que la méthode
peut modifier le tableau passé en argument.
151

152
12/11/2024

153

La boucle for améliorée


• La boucle for habituelle utilise un compteur.
• Plutôt que d’utiliser un compteur, la boucle for
améliorée consiste en une variable qui, à chaque
itération, stocke les éléments consécutifs du tableau.

154

155
12/11/2024

La boucle for améliorée


• Dans ce cas, nous avons nommé chaque élément
successif du tableau « item ».
• L’en-tête de la boucle doit être lu comme :
« pour chaque élément du tableau tab ».
• Le type de l’élément du tableau doit également être
spécifié et doit être identique au type des éléments du
tableau considéré. 156

Chaînes en Java
• Une chaîne de caractères est une séquence de
caractères.
• En Java, les chaînes de caractères sont des objets des
classes :
• « String » : chaînes de caractères non modifiables.
• « StringBuffer » : chaînes de caractères modifiables.
157

Classe « String »
• Déclaration :

 Ici on déclare « str » comme référence à un objet de


type « String ».
 Seule la référence est crée, mais pas l’objet.

158
12/11/2024

Classe « String »
• Déclaration et création :

 « str » contient une référence à un objet contenant la


chaîne « bonjour ».

159

Autres exemples

 Ici, « str1 » et « str2 » référencent le même objet  un


seul objet String référencé par les deux variables.

160

Autres exemples

 Ici, « str1 » et « str2 » référencent deux objets


différents  il y aura création de deux objets String
différents.
161
12/11/2024

Autres exemples

 Ici, « str1 » et « str2 » référencent deux objets


différents  il y aura création de deux objets String
différents.
162

La chaîne vide

163

Remarque
• Un objet de type String n’est pas modifiable : il
n’existe aucune méthode qui permet de modifier le
contenu d’un objet String.
• L’affectation entre variables référençant des objets
n’affectent pas leurs contenus : elle ne concerne que
les valeurs des références.
164
12/11/2024

Exemple

 L’objet « bonjour » n’a pas été modifié, mais c’est la


référence « str » qui a été modifié : après affectation,
l’objet « bonjour » est perdu et la variable « str »
référence un aura objet (la chaîne « bonsoir »). 165

Quelques méthodes de la classe String


• « length() »  longueur d’une chaîne.
• « charAt(index) »  caractère de position « index »
dans une chaîne.
• « concat(str) »  concatène deux chaînes (les
opérateurs « + » et « += » permettent également la
concaténation de chaînes).
166

Quelques méthodes de la classe String


• « indexOf(car) »  retourne la position de la 1ère
occurrence d’un caractère « car » dans une chaîne (-1
si cette occurrence est non trouvée).
• Opérateurs « == » et « != »  comparent les
références et non pas les contenus de deux objets.
• « equals(str) »  comparent les contenus de deux
objets. 167
12/11/2024

La classe Math
• Les fonctions mathématiques les plus connues sont
regroupées dans la classe « Math » qui appartient au
package « [Link] ». On y trouve :
• Les fonctions trigonométriques : sin, cos, asin, …
• Les fonctions d’arrondi, de valeur absolue, ..., la racine
carrée (sqrt), La puissance (pow), l’exponentiel (exp),
le logarithme (log), etc.
168

La classe Math
• Ce sont des méthodes de classe (static).

169

Les wrappers
• Il existe des classes wrapper (enveloppes) qui permettent
de voir un type primitif comme un objet.
• Un wrapper est juste un objet stockant un type primitif :
boolean  Boolean, byte  Byte short  Short
char  Character, int  Integer, long  Long,
float  Float, double  Double
170
12/11/2024

Méthodes de Character
• isDigit(car) : retourne true si car est un chiffre.
• isSpace(car) : retourne true si car est un caractère blanc.
• isLetter(car) : retourne true si car est une lettre.
• isLowerCase(car) : retourne true si car est une lettre
minuscule.
• isUpperCase(car) : retourne true si car est une lettre
majuscule.
171

Méthodes de Integer
• parseInt(ch) : retourne un entier à partir de la chaîne ch.
• parseInt(ch, base) : retourne un entier dans la base
indiquée à partir de la chaîne ch.
Méthodes de Float
• parseFloat(ch) : retourne un float à partir de la chaîne ch.

172

Vous aimerez peut-être aussi