You are on page 1of 21

Grandes lignes du cours

Cours JAVA : Java en quelques mots La surcharge.


Les constructeurs.
Le bases du langage Java. Comparatif Java et C++
Programmation orientée Le mécanisme
Version 3.02 d’instanciation.
objets.
Conception par traitements. Constructeur par défaut.
Plusieurs constructeurs.
Julien Sopena1 Conception par objets.
Le concept d’encapsulation. Exécutable Java.
1 julien.sopena@lip6.fr
Les classes Java Coder un executable.
Équipe REGAL - INRIA Rocquencourt Compilation.
LIP6 - Université Pierre et Marie Curie Les attributs.
Structuration des sources.
Les méthodes.
Licence professionnelle DANT - 2013/2014 Des classes utiles.
Le mot clé this.
La classe String
Les accesseurs.
Les tableaux.
Les méthodes de classe.
Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 1 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 2 / 151

Outline Java c’est quoi ?

I Un langage : Orienté objet fortement typé avec classes


Java en quelques mots
Comparatif Java et C++
I Un environnement d’exécution (JRE) : Une machine virtuelle
et un ensemble de bibliothèques
Programmation orientée objets.
I Un environnement de développement (JDK) : Une machine
Les classes Java
virtuelle et un ensemble d’outils
Les attributs. I Une mascotte : Duke
Les méthodes.
Les constructeurs.
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 3 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 4 / 151

Java c’est qui ? Java pourquoi ?


La plate-forme et le langage Java sont issus d’un projet de
Sun Microsystems datant de 1990.
Généralement, on attribut sa paternité a trois de ses ingénieurs :
I James Gosling
Java est devenu aujourd’hui l’un des langages de programmation
I Patrick Naughton
les plus utilisés.
I Mike Sheridan
Il est incontournable dans plusieurs domaines :
I Systèmes dynamiques : Chargement dynamique de classes
I Internet : Les Applets java
I Systèmes communicants : RMI, Corba, EJB, etc.

Figure : 1990 Barbecue chez James Gosling

J. Sopena (INRIA/UPMC) Le bases du langage Java. 5 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 6 / 151

Java pour qui ? L’environnement actuel Java 2 Standard Edition


J2SE

L’outil de base : le JDK (Java Development Kit) de SUN :


I http://java.sun.com.
Pour tous : Le 13 novembre 2006, Sun annonce le passage de I gratuit.
Java, c’est-à-dire le JDK (JRE et outils de I Dernière version : 1.6.
développement) sous licence GPL. I comprend de nombreux outils :
I le compilateur.
Pour vous : Cette UE sur Java servira de base à l’ensemble des I le compilateur à la volé "JIT".
UE techniques du deuxième semestre. I le débogueur.
I le générateur de documentation.
Des environnements de développements gratuits
I NetBeans : http://www.netbeans.org/
I Eclipse : http://www.eclipse.org/

J. Sopena (INRIA/UPMC) Le bases du langage Java. 7 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 8 / 151
Java évolue tout le temps Tout se complique

Java n’est pas un langage normalisé et il continu d’évoluer. Cette


Attention, avec l’arrivée de la GPL tout se complique :
évolution se fait en ajoutant de nouvelle API, mais aussi en
modifiant la machine virtuelle.

L’ensemble de ces modifications est géré par le JCP (Java


Community Process ; http ://www.jcp.org/) dans lequel Sun
continue de tenir une place prépondérante.

Il peut alors être nécessaire d’identifier une version précise du


compilateur et/ou de la machine virtuelle : Ça n’est pas simple.

La numérotation des versions :

1.0 −→ 1.1 −→ |1.2 −→ 1.3 −→


{z 1.4 −→ 5.0} −→ 6.0
Toutes ces versions : Java 2

J. Sopena (INRIA/UPMC) Le bases du langage Java. 9 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 10 / 151

Les versions de Java Les versions de Java (suite)

J2SE 1.4 (2002 - 2 723 classes et interfaces) – Merlin


JDK 1.0 (1996 - 211 classes et interfaces) Ajoute : mot-clé assert, expressions rationnelles, chaînage
Version initiale. d–exception, parser XML et du moteur XSLT (JAXP),
extensions de sécurité JCE (Java Cryptography Extension)
JDK 1.1 (1997 - 477 classes et interfaces) et Java Web Start.
Ajoute : classes internes, JavaBeans, JDBC, Java
Remote Invocation (RMI). J2SE 5.0 (2004 - 3 270 classes et interfaces) – Tiger
Ajoute : syntaxe à la foreach, enumerations (enum),
J2SE 1.2 (1998 - 1 524 classes et interfaces) – Playground classe Integer, autoboxing/unboxing
Ajoute : réflection, SWING, compilateur JIT (Just in
Java SE 6 (2006 - 3 777 classes et interfaces) – Mustang
Time), Java IDL pour Corba.
Ajoute : covariance (redéfinition avec modification du
J2SE 1.3 (2000 - 1 840 classes et interfaces) – Kestrel type de retour), @overhiding.
Ajoute : HotSpot JVM, service de nomage (JNDI) et
Java SE 7 – Nom de code Dolphin
JavaSound. Ajoutera : des closures (en cours de spécifications).
Ce sera la première Version 100% open source.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 11 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 12 / 151

Outline Java versus C++

Java en quelques mots I Filiation historique :


Comparatif Java et C++ I 1983 (AT&T Bell) : C++
I 1991 (Sun Microsystems) : Java
Programmation orientée objets.
Les classes Java I Java est très proche du langage C++ (et donc du langage C).
Les attributs.
I Toutefois Java est plus simple que le langage C++, car les
Les méthodes. points "critiques" du langage C++ (ceux qui sont à l’origine
Les constructeurs. des principales erreurs) ont été supprimés.
Exécutable Java.
I Cela comprend :
Des classes utiles. I Les pointeurs
I La surcharge d’opérateurs
I L’héritage multiple

J. Sopena (INRIA/UPMC) Le bases du langage Java. 13 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 14 / 151

Java versus C++ : concepts (2) Java versus C++ : production du binaire
De plus,
- Tout est dynamique : les instances d’une classe sont
instanciées dynamiquement.
- La libération de mémoire est transparente pour l’utilisateur. Il Une fois achevée la production du logiciel, un choix doit être fait
n’est pas nécessaire de spécifier de mécanisme de destruction. entre fournir le source ou le binaire pour la machine du client.
La libération de l’espace mémoire est prise en charge un
gestionnaire appelé garbage collector ⇒ chargé de détecter les Généralement, une entreprise souhaite protéger le code source et
objets à détruire. distribuer le code binaire.

Le code binaire doit donc être portable sur des architectures


différentes (processeur, système d’exploitation, etc.).
Notes
I gain de fiabilité (pas de désallocation erronée).
I a un coût (perte en rapidité par rapport au C++).

J. Sopena (INRIA/UPMC) Le bases du langage Java. 15 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 16 / 151
Java versus C++ : compilateur C++ Java versus C++ : chaîne de production du C

source.c

À l’instar du compilateur C, le compilateur C++ produit du code compilation : gcc source.c -o monProg
natif, i.e., qu’il produit un exécutable propre à l’environnement de
travail ou le code source est compilé. monProg

On doit donc créer les exécutables pour chaque type d’architecture


Execution : ./monProg
potentielle des clients.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 17 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 18 / 151

Java versus C++ : compilateur Java Exécution du bytecode


En Java, le code source n’est pas traduit directement dans le
langage de l’ordinateur.
Le bytecode doit être exécuté par une Machine Virtuelle Java.
Il est d’abord traduit dans un langage appelé "bytecode", langage
d’une machine virtuelle (JVM – Java Virtual Machine) définie par
Cette JVM n’existe pas. Elle est simulée par un programme qui :
Sun.
1. lit les instructions (en bytecode) du programme .class
2. fait une passe de vérification (type opérande, taille de pile, flot
données, variable bien initialisé,...) pour s’assurer qu’il n’y a
Portabilité aucune action dangereuse.
Le bytecode généré par le compilateur ne dépend pas de l’archi- 3. fait plusieurs passes d’optimisation du code
tecture de la machine où a été compilé le code source, c’est-à-dire 4. les traduit dans le langage natif du processeur de l’ordinateur
que les bytecodes produits sur une machine pourront s’exécuter 5. lance leur exécution
(au travers d’une machine virtuelle) sur des architectures diffé-
rentes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 19 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 20 / 151

Java versus C++ : chaîne de production du Java Coût de la JVM sur les performances.

source.java

Compilation : javac source.java Les vérifications effectuées sur le bytecode et la compilation du


bytecode vers le langage natif du processeur, ralentissent
source.class
l’exécution des classes Java.

Mais les techniques de compilation à la volée "Just In Time (JIT)"


Machine virtuelle : java source.class ou "Hotspot" réduisent ce problème : elles permettent de ne
traduire qu’une seule fois en code natif les instructions qui sont
(souvent pour Hotspot) exécutées.

svgFigures/LOGO-Apple

J. Sopena (INRIA/UPMC) Le bases du langage Java. 21 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 22 / 151

Java versus C++ : en résumé... Outline


Le langage Java est :
I « C-like » : Syntaxe familière aux programmeurs de C Java en quelques mots
I Orienté objet : Tout est objet, sauf les types primitifs (entiers, Comparatif Java et C++
flottants, booléens, ...) Programmation orientée objets.
I Robuste : Typage fort, pas de pointeurs, etc. Conception par traitements.
I Code intermédiaire : Le compilateur ne produit que du Conception par objets.
bytecode indépendant de l’architecture de la machine où a été Le concept d’encapsulation.
compilé le code source Les classes Java
Les attributs.
Les méthodes.
Note Les constructeurs.
Exécutable Java.
Java perd (un peu) en efficacité par rapport à C++// mais gagne
Des classes utiles.
(beaucoup) en portabilité.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 23 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 24 / 151
Problématique de la programmation Problématique de la programmation

Le schéma simplifié d’un système informatique peut se résumer par Le schéma simplifié d’un système informatique peut se résumer par
la formule : la formule :

Système informatique = Structures de données + Traitements Système informatique = Structures de données + Traitements

Le cycle de vie d’un système peut être décomposé en deux grandes


phases :
I Une phase de production qui consiste à réaliser le logiciel.
I Une phase de maintenance qui consiste à corriger et à faire
évoluer le logiciel.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 25 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 25 / 151

Problématique de la programmation Outline

Le schéma simplifié d’un système informatique peut se résumer par Java en quelques mots
la formule :
Comparatif Java et C++
Système informatique = Structures de données + Traitements Programmation orientée objets.
Conception par traitements.
Le cycle de vie d’un système peut être décomposé en deux grandes Conception par objets.
phases : Le concept d’encapsulation.
I Une phase de production qui consiste à réaliser le logiciel. Les classes Java
I Une phase de maintenance qui consiste à corriger et à faire Les attributs.
évoluer le logiciel. Les méthodes.
Lors de la production du système (au sens industriel du terme), le Les constructeurs.
concepteur a deux grandes options : Exécutable Java.
+ soit orienter sa conception sur les traitements. Des classes utiles.
+ soit orienter sa conception sur les données.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 25 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 26 / 151

Conception par traitements. Conception par traitements : principe

Java en quelques mots Principe : On sépare les données des moyens de traitement de ces
Comparatif Java et C++ données.
Programmation orientée objets.
Conception par traitements. P ROGRAMME
Conception par objets.
Le concept d’encapsulation. Structures de données Algorithmes
Les classes Java
Les attributs. Variable Procédure
Les méthodes. Variable Fonction
Les constructeurs.
Variable Procédure
Exécutable Java.
Des classes utiles. Variable Fonction

J. Sopena (INRIA/UPMC) Le bases du langage Java. 27 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 28 / 151

Conception par traitements : +/- Outline

Java en quelques mots


I Les premiers concepteurs de système informatique ont adopté
cette approche : systèmes d’exp., gestionnaires de fenêtres, Comparatif Java et C++
logiciels de gestion, logiciels de bureautique, logiciels de calcul Programmation orientée objets.
scientifique, etc. Conception par traitements.
I De nombreux systèmes informatiques sont encore développés Conception par objets.
selon cette approche. Le concept d’encapsulation.
Les classes Java
+ Systèmes ad-hoc, i.e., adaptés au problème de départ, mais
dont la maintenance est difficile. Les attributs.
+ Les traitements sont généralement beaucoup moins stables que Les méthodes.
les données : changement de spécification, ajout de nouvelles Les constructeurs.
fonctionnalités, etc. Exécutable Java.
+ Les structures de données sous-jacentes sont choisies en Des classes utiles.
relation étroite avec les traitements à effectuer.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 29 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 30 / 151
Conception par objets. Conception par objets : principe
Principe : afin d’établir de façon stable et robuste l’architecture
Java en quelques mots d’un système, il semble raisonnable de s’organiser autour des
Comparatif Java et C++ données manipulées.
Programmation orientée objets.
Conception par traitements.
Conception par objets. P ROGRAMME
Le concept d’encapsulation.
Objet Objet
Les classes Java
Les attributs.
Variable Variable
Les méthodes.
Les constructeurs. Variable Variable

Exécutable Java. Procédure Procédure


Des classes utiles.
Fonction Fonction

J. Sopena (INRIA/UPMC) Le bases du langage Java. 31 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 32 / 151

Conception par objets : points clés Le concept d’objet : définition

Définition
I La construction d’un système va s’axer principalement sur la Un objet est une entité autonome, qui regroupe un ensemble de
détermination des données dans un premier temps et la propriétés (données) cohérentes et de traitements associés.
réalisation les traitements (de haut-niveau) agissant sur ces
données dans un second temps.

I Cette approche permet de bâtir des systèmes plus simples à


maintenir et à faire évoluer.
À retenir
I On regroupe dans une même entité informatique, appelé objet,
Ne commencez pas par vous demander ce que fait l’application
les structures de données et les moyens de traitement de ces
mais ce qu’elle manipule.
données.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 33 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 34 / 151

Le concept d’objet : vocabulaire Outline

Java en quelques mots


Comparatif Java et C++
I Les structures de données définies dans l’objet
Programmation orientée objets.
sont appelés ses attributs (propriétés). Conception par traitements.
I Les procédures et fonctions définies dans l’objet Conception par objets.
Le concept d’encapsulation.
sont appelés ses méthodes (opérations).
Les classes Java
I Les attributs et méthodes d’un objet sont appelés Les attributs.
ses membres. Les méthodes.
I L’ensemble des valeurs des attributs d’un objet à Les constructeurs.
un instant donné est appelé état interne. Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 35 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 36 / 151

Le concept d’encapsulation. Protection de l’information : encapsulation.


Interface
ensemble des Capsule
Java en quelques mots services publics
offerts
n’autorisant que les
demandes de service
public
Comparatif Java et C++
Programmation orientée objets. Demande Accès aux données
de service Lucky
Conception par traitements.
Luke
Conception par objets.
Le concept d’encapsulation.
123
Les classes Java
Les attributs.
Les méthodes.
Les constructeurs. Règle
Exécutable Java.
Des classes utiles. Les données d’un objet (son état) peuvent être lues ou modifiées
uniquement par les services proposés par l’objet lui-même (ses
méthodes)
J. Sopena (INRIA/UPMC) Le bases du langage Java. 37 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 38 / 151
Encapsulation : définition Encapsulation : définition
Définition Définition
Le terme encapsulation désigne le principe consistant à cacher Le terme encapsulation désigne le principe consistant à cacher
l’information contenue dans un objet et de ne proposer que des l’information contenue dans un objet et de ne proposer que des
méthodes de modification/accès à ces propriétés (attributs). méthodes de modification/accès à ces propriétés (attributs).

I L’objet est vu de l’extérieur comme une boîte noire ayant


certaines propriétés et ayant un comportement spécifié.
I La manière dont le comportement a été implémenté est cachée
aux utilisateurs de l’objet.

Intérêt
Protéger la structure interne de l’objet contre toute manipulation
non contrôlée, produisant une incohérence.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 39 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 39 / 151

Encapsulation : en pratique Outline

Java en quelques mots


L’encapsulation nécessite la spécification de parties publics et pri- Comparatif Java et C++
vées de l’objet. Programmation orientée objets.
éléments publics : correspond à la partie visible de l’objet depuis Les classes Java
l’extérieur. c’est un ensemble de méthodes utilisables Les attributs.
par d’autres objets (environnement). Les méthodes.
éléments privées : correspond à la partie non visible de l’objet. Il Les constructeurs.
est constitué des éléments de l’objet visibles
Exécutable Java.
uniquement de l’intérieur de l’objet et de la définition
des méthodes. Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 40 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 41 / 151

Le concept d’objet : notion de classe Le concept d’objet : notion de classe

Pour être véritablement intéressante, la notion d’objet doit Pour être véritablement intéressante, la notion d’objet doit
permettre un certain degré d’abstraction ⇒ notion de classe. permettre un certain degré d’abstraction ⇒ notion de classe.

Définition
On appelle classe la structure d’un objet, i.e., la déclaration de
l’ensemble des membres qui composeront un objet.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 42 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 42 / 151

Le concept d’objet : notion de classe Classe = Modèle d’objets

Pour être véritablement intéressante, la notion d’objet doit prénom


Signature et code du
service (méthode)
Classe décrivant les
permettre un certain degré d’abstraction ⇒ notion de classe. caractéristiques des
instances nom

Définition médailles
Nom et type
On appelle classe la structure d’un objet, i.e., la déclaration de de l’attribut

l’ensemble des membres qui composeront un objet. Instanciation (new)

Définition Lucky Joe Averell


Luke Dalton Dalton

La classe peut être vue comme un moule pour la création des 123 0 0
objets, qu’on appelle alors des instances de la classe.

Instances de la classe

J. Sopena (INRIA/UPMC) Le bases du langage Java. 42 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 43 / 151
Différences entre classe et objet. Différences entre classe et objet.

Il est important de saisir les différences entre les notions de classe Il est important de saisir les différences entre les notions de classe
et instance de la classe : et instance de la classe :

classe = attributs + méthodes + mécanismes d’instanciation + classe = attributs + méthodes + mécanismes d’instanciation +
mécanismes de destruction mécanismes de destruction

instance de la classe = valeurs des attributs + accès aux méthodes

J. Sopena (INRIA/UPMC) Le bases du langage Java. 44 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 44 / 151

Différences entre classe et objet. Exemple : Un QCM.

Il est important de saisir les différences entre les notions de classe


et instance de la classe :
On veut produire une application permettant à des étudiants de
classe = attributs + méthodes + mécanismes d’instanciation + répondre à des QCM. Comme un QCM est formé d’une suite de
mécanismes de destruction questions, on s’intéresse à définir la classe Question. Elle doit
permettre de
instance de la classe = valeurs des attributs + accès aux méthodes
1. Poser une question (l’affichage ou, mieux, la production d’une
L’instanciation est le mécanisme qui permet de créer des instances chaîne de caractères représentant la question sera employé à
dont les traits sont décrits par la classe. cet effet)
2. Enregistrer la réponse fournie par un étudiant
La destruction est le mécanisme qui permet de détruire une
3. Déterminer si la réponse fournie est la bonne
instance de la classe.

L’ensemble des instances d’une classe constitue l’extension de la


classe .

J. Sopena (INRIA/UPMC) Le bases du langage Java. 44 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 45 / 151

Conception de la classe Question Diagramme UML correspondant


Les services offerts par la classe :

Savoir si la réponse est correcte

Enregistrer Obtenir une chaîne de


réponseCorrecte
une réponse caractères représentant Question
la question
+repondre(r: int): void

+reponseCorrecte(): boolean

+toString(): String

? Du point de vue de l’utilisateur de la classe, seuls les services


publics sont pertinents

Aucune hypothèse sur la structure interne


J. Sopena (INRIA/UPMC) Le bases du langage Java. 46 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 47 / 151

Classe : déclaration. Classe : visibilité d’un membre


En Java, pour déclarer une classe on utilise le mot-clé class suivi
En Java, l’encapsulation est assurée par un ensemble de
du nom de la classe.
modificateurs d’accès permettant de préciser la visibilité des
p u b l i c class P o i n t { membres de la classe :
...
} Définition
Un membre dont la déclaration est précédée par le mot clé public
est visible depuis toutes instances de toutes classes.
Règles
1. La première lettre du nom d’une classe doit toujours être Définition
une lettre majuscule (ex : Chat). Un membre dont la déclaration est précédée par le mot clé private
2. Mélange de minuscule, majuscule avec la première lettre de n’est visible que dans les instances de la classe.
chaque mot en majuscule (ex : ChatGris).
3. Une classe se trouve dans un fichier portant son nom Remarque(s)
suivi l’extention .java (ex : ChatGris.java) Il existe d’autres types de visibilité pour un membre que nous
n’évoquerons pas dans l’immédiat.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 48 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 49 / 151
Définition Java du squelette de la classe Question Définition Java du squelette de la classe Question
Le mot clé public permet d’indiquer les services qui sont Le mot clé private assure l’encapsulation
accessibles à l’utilisateur.
p u b l i c class Q u e s t i o n {
public class Q u e s t i o n { // i n t i t u l é de l a q u e s t i o n
... private S t r i n g q u e s t i o n ;
public void r e p o n d r e ( i n t r e p o n s e ) { // t a b l e a u d e s c h o i x p o s s i b l e s
... private S t r i n g [ ] c h o i x ;
}
// numéro de l a r é p o n s e de l ’ é t u d i a n t
private i n t r e p o n s e ;
public boolean r e p o n s e C o r r e c t e ( ) {
// numéro de l a bonne r é p o n s e
...
} private i n t bonneReponse ;

p u b l i c void r e p o n d r e ( i n t r e p o n s e ) {
public S t r i n g t o S t r i n g ( ) {
...
...
}
}
...
...
}
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 50 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 51 / 151

Diagramme UML complet Accès aux membres d’une classe.

Définition
L’ensemble des méthodes d’un objet accessibles de l’extérieur
Question
(depuis un autre objet) est appelé interface. Elle caractérise le
+Question(q: String, c: String[], b :int)

+repondre(r: int): void


comportement de l’objet.
+reponseCorrecte(): boolean

+toString(): String Définition


-question: String L’accès à un membre d’une classe se fait au moyen de l’opérateur
-choix: String[] « . ».
-bonneReponse: int

-reponse(): int
Définition
L’invocation d’une méthode d’interface est appelé appel de
méthode. Il peut être vu comme un envoi de message entre objet.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 52 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 53 / 151

Accès aux membres. Accès récursifs aux membres.


p u b l i c class P o i n t {
p u b l i c double x , y ; p u b l i c class P o i n t {
} p u b l i c double x , y ;
}
p u b l i c class R e c t a n g l e {
p u b l i c double l o n g e u r , l a r g e u r ; p u b l i c class R e c t a n g l e {
public Point c o i n ; p u b l i c double l o n g e u r , l a r g e u r ;
public Point c a l c u l e r C e n t r e ( ) ; public Point c o i n ;
} public Point c a l c u l e r C e n t r e ( ) ;
}
p u b l i c class T e s t F i g u r e {
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { p u b l i c class T e s t F i g u r e {
Rectangle rect ; p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
P o i n t c o i n D u R e c t = rect.coin ; Rectangle rect ;
double xDuCoinDuRect = coinDuRect.x ; double xDuCoinDuRect = rect.coin.x ;
P o i n t c e n t r e D u R e c t = rect.calculerCentre() ; double yDuCentreDuRect = rect.calculerCentre().y ;
double yDuCentreDuRect = centreDuRect.y ; }
} }
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 54 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 55 / 151

Classe : membres d’instance et de classes Variable de classe

On veut introduire des choix par défaut


Quelque soit le niveau de visibilité, on distingue deux types de
membres : p u b l i c class Q u e s t i o n {
...
Définition private S t r i n g [ ] c h o i x D é f a u t = {" v r a i " , " faux " } ;
Un membre de classe est un membre commun à toutes les ...
instances de la classe et existe dès que la classe est définie en }
dehors et indépendamment de toute instanciation. Les membres de
classe sont déclarés à l’aide du mot-clé static. Problème : chaque instance dispose de son propre tableau
choixDéfaut alors qu’il devrait être commun à tous les objets
Définition p u b l i c class Q u e s t i o n {
Un membre qui n’est pas de classe, i.e. dont la déclaration n’est pas ...
précédée du mot-clé static est dit membre d’instance. Chaque p r i v a t e static S t r i n g [ ] c h o i x D é f a u t
instance d’une classe possède son propre exemplaire d’un attribut = {" v r a i " , " faux " } ;
...
d’instance de la classe. }

J. Sopena (INRIA/UPMC) Le bases du langage Java. 56 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 57 / 151
Variable de classe Classe : l’accès aux membres de classe

réponseCorrecte
Classe Question
question
Les membres de classes d’une classe donnée étant communs à
choix
toutes les instances de la classe, l’accès à un membre de classe se
réponse bonneRéponse
fait en appliquant l’opérateur « . » sur le nom de la classe.
choixDéfaut
"vrai" System . o u t . p r i n t l n ( Question. c h o i x D e f a u t [ 1 ] ) ;
"faux"

Instance q1 Instance q2

réponseCorrecte réponseCorrecte L’accès aux membres de classe peut aussi se faire avec une instance
question question de la classe suivie de l’opérateur « . ». Mais ceci est peu lisible et
"Vous êtes" "Vous avez"
choix choix à n’utiliser que pour le polymorphisme (voir cours suivant).
"beau" "5 ans"
"moche" "10 ans"

réponse bonneRéponse réponse bonneRéponse


Q u e s t i o n q1 = new Q u e s t i o n ( ) ;
1 2 2 1 System . o u t . p r i n t l n ( q1. c h o i x D e f a u t [ 1 ] ) ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 58 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 59 / 151

Classe java type Classe java type


Une classe java types contient trois grands types de membres : Une classe java types contient trois grands types de membres :

p u b l i c class P o i n t { p u b l i c class P o i n t {
// ( 1 ) A t t r i b u t s
p r i v a t e double x , y ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151

Classe java type Classe java type


Une classe java types contient trois grands types de membres : Une classe java types contient trois grands types de membres :

p u b l i c class P o i n t { p u b l i c class P o i n t {
// ( 1 ) A t t r i b u t s // ( 1 ) A t t r i b u t s
p r i v a t e double x , y ; p r i v a t e double x , y ;
// ( 2 ) C o n s t r u c t e u r s // ( 2 ) C o n s t r u c t e u r s
p u b l i c P o i n t ( double x , double y ) { . . . } p u b l i c P o i n t ( double x , double y ) { . . . }
// ( 3 ) Méthodes
p u b l i c double d i s t a n c e A v e c ( P o i n t p2 ) { . . . }
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151

Classe java type Outline


Une classe java types contient trois grands types de membres :
Java en quelques mots
p u b l i c class P o i n t { Comparatif Java et C++
// ( 1 ) A t t r i b u t s
p r i v a t e double x , y ;
Programmation orientée objets.
// ( 2 ) C o n s t r u c t e u r s Les classes Java
p u b l i c P o i n t ( double x , double y ) { . . . }
Les attributs.
// ( 3 ) Méthodes
p u b l i c double d i s t a n c e A v e c ( P o i n t p2 ) { . . . } Les méthodes.
}
Les constructeurs.
Exécutable Java.
Remarque(s) Des classes utiles.
Les constructeurs sont des méthodes particulières, ils seront donc
introduits après celles-ci dans ce cours. Cependant, vous devez
toujours déclarer les constructeurs après les attributs et
avant les autres méthodes (voir ci-dessus).
J. Sopena (INRIA/UPMC) Le bases du langage Java. 60 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 61 / 151
Déclaration d’un attributs Les types en Java

En Java, toutes les variables doivent être déclarées avant d’être


utilisées (les attributs comme les variable locales des méthodes).
Le type d’une variable en Java peut être :
La déclaration des attributs se fait de préférence en début de classe
et leurs noms commencent par des minuscules.
I Types dits primitifs : int, double, boolean, etc.
I nom d’une classe : par exemple, les chaînes de caractères
On indique au compilateur : sont des instances de la classe String.
1. Un ensemble de modificateurs (facultatif ).
Remarque(s)
2. Le type de la variable.
Nous laissons de côté pour l’instant le cas des tableaux sur lesquels
3. Le nom de la variable. nous reviendrons plus tard.

p r i v a t e double z ;
public S t r i n g s t r ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 62 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 63 / 151

Les types primitifs Affecter une valeur à un attribut

Type Taille (en bits) Exemple


byte 8 1 L’affectation d’une valeur à une variable est effectuée par
short 16 345 l’instruction
int 32 -2 variable = expression ;
long 64 2L
float 32 3.14f, 2.5e+5 L’affectation se fait en deux temps :
double 64 0.2d, 1.567e-5 1. l’expression est calculée ;
boolean 1 true ou false
char 16 ’a’ 2. la valeur calculée est affectée à la variable.

Exemple

x = 36.0 d ;
Attention y = x + 1;
s t r = " Linus " ;
Un attribut de type primitif n’est pas un objet !

J. Sopena (INRIA/UPMC) Le bases du langage Java. 64 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 65 / 151

Initialisation d’un attribut Les constantes

En Java, une variable doit être initialisée (recevoir une valeur)


avant d’être utilisée dans une expression.
On peut bloquer la modification de la valeur d’un attribut (en
S’ils ne sont pas initialisés expressément par le programmeur, les dehors de l’instanciation) à l’aide du mot-clé final.
attributs seront automatiquement initialisés par le compilateur. Ils
final p r i v a t e i n t x ;
reçoivent alors une valeur par défaut de leur type : 0 pour les int,
0.0d pour les double, false pour les boolean, null pour les
String, etc. Remarque(s)
On utilise souvent un attribut de classe déclaré final pour définir
Remarque(s) une constante :
On peut initialiser un attribut lors de sa déclaration. final s t a t i c p u b l i c double PI = 3 . 1 4 d ;

p r i v a t e i n t x = −1;
p u b l i c S t r i n g s t r = " L i c e n c e ␣MIAGE" ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 66 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 67 / 151

Les types en Java : déclarer les attributs Outline

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets.
p u b l i c class Logement { Les classes Java
// l e s a t t r i b u t s
f i n a l p u b l i c double s u r f a c e ; Les attributs.
p u b l i c double p r i x ; Les méthodes.
public S t r i n g p r o p r i e t a i r e ; Le mot clé this.
p r i v a t e boolean vendu ;
Les accesseurs.
} Les méthodes de classe.
La surcharge.
Les constructeurs.
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 68 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 69 / 151
Les méthodes en Java : syntaxe et définition Outline

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets.
La syntaxe pour définir le corps d’une méthode est identique à celle Les classes Java
utilisée en C pour définir une fonction. Notamment, les noms et la Les attributs.
syntaxe
Les méthodes.
I des instructions (conditionnelles, itératives, etc.) et, Le mot clé this.
I des opérateurs (arithmétiques, de comparaison, logiques, etc.) Les accesseurs.
sont les mêmes qu’en C. Les méthodes de classe.
La surcharge.
Les constructeurs.
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 70 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 71 / 151

Le mot clé this. Définition du mot clé this.

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets. Définition
Les classes Java Dans le corps d’une méthode, le mot clé this désigne l’instance sur
Les attributs. laquelle est invoquée la méthode. Ce mot clé est utilisé dans 3
circonstances :
Les méthodes.
Le mot clé this. 1. pour accéder aux attributs de l’objets
Les accesseurs. 2. pour comparer la référence de l’objet invoquant la méthode à
Les méthodes de classe. une autre référence
La surcharge. 3. pour passer la reference de l’objets invoquant la méthode en
Les constructeurs. paramètre d’une autre méthode
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 72 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 73 / 151

Utilisation du this : accès à un attribut. Utilisation du this : comparer la référence.

Dans le corps d’une méthode, this permet d’accéder aux attributs


de l’objet lorsque ceux-ci sont masqués par un paramètre ou par Dans le corps d’une méthode, this permet de comparer la référence
une variable locale. de l’objet sur lequel est invoqué la méthode à une autre référence.

p u b l i c class Q u e s t i o n { p u b l i c class Animal {


int reponse ; Estomac e s t o m a c ;
... ...
p u b l i c void r e p o n d r e ( i n t r e p o n s e ) { p u b l i c void manger ( Animal v i c t i m e ) {
this . r e p o n s e = r e p o n s e ; // On ne p e u t p a s s e manger c o m p l è t e m e n t s o i −même
} i f ( this != victime ) {
p u b l i c boolean r e p o n s e C o r r e c t e ( ) { estomac . a d d N o u r i t u r e ( v i c t i m e ) ;
r e t u r n r e p o n s e == bonneReponse ; }
} }
... }
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 74 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 75 / 151

Utilisation du this : référence en paramètre Outline

Java en quelques mots


Dans le corps d’une méthode, this permet de passer la référence de
l’objet sur lequel est invoqué à une autre méthode. Comparatif Java et C++
Programmation orientée objets.
p u b l i c class E n t r e p r i s e {
public i n t c a l c u l e r S a l a i r e ( I n d i v i d u x ) { . . . }
Les classes Java
} Les attributs.
p u b l i c class I n d i v i d u {
Les méthodes.
i n t compte ; Le mot clé this.
Entreprise entreprise ; Les accesseurs.
... Les méthodes de classe.
p u b l i c void d e m i s s i o n n e r ( ) {
La surcharge.
compte += e n t r e p r i s e . c a l c u l e r S a l a i r e ( this ) ;
e n t r e p r i s e = null ; Les constructeurs.
} Exécutable Java.
}
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 76 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 77 / 151
Les accesseurs. Respect de l’encapsulation

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets. Règle
Les classes Java
Les attributs doivent :
Les attributs.
Les méthodes.
I toujours être déclarés privés :
Le mot clé this. private int longeur ;
Les accesseurs. I être accédé en lecture par un accesseurs en lecture :
Les méthodes de classe. public int getLongeur() ;
La surcharge. I être accédé en écriture par un accesseurs en écriture :
Les constructeurs. public void setLongeur(int l) ;
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 78 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 79 / 151

Pourquoi cacher les attributs ? Pourquoi cacher les attributs ?

p u b l i c class P o i n t { p u b l i c class P o i n t {
public i n t x , y ; p u b l i c int[] t u p l e ;
} }

p u b l i c class F i g u r e { p u b l i c class F i g u r e {
public Point c ; public Point c ;
p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) {
t h i s . c . x += x ; t h i s . c . x += x ;
t h i s . c . y += y ; t h i s . c . y += y ;
} }
} }

J. Sopena (INRIA/UPMC) Le bases du langage Java. 80 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 81 / 151

Pourquoi cacher les attributs ? Pourquoi cacher les attributs ?

p u b l i c class P o i n t {
p u b l i c class P o i n t { private i n t x , y ;
p u b l i c int[] t u p l e ; p u b l i c i n t getX() { . . . }
} p u b l i c void setX(int x) { . . . }
p u b l i c i n t getY() { . . . }
p u b l i c class F i g u r e { p u b l i c void setY(int y) { . . . }
public Point c ;
}
p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) {
this.c.x += x; p u b l i c class F i g u r e {
public Point c ;
this.c.y += y;
p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) {
} t h i s . c . s e t X ( t h i s . c . getX ()+ x ) ;
} t h i s . c . s e t Y ( t h i s . c . getY ()+ y ) ;
}
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 82 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 83 / 151

Pourquoi cacher les attributs ? Rappel

p u b l i c class P o i n t {
Une classe implémente un concept associant
p r i v a t e int[] t u p l e ;
p u b l i c i n t getX ( ) { . . . } I des données manipulées exclusivement par les instances de la
p u b l i c void s e t X ( i n t x ) { . . . } classe
p u b l i c i n t getY ( ) { . . . } I les attributs : mode d’accès private pour garantir la
p u b l i c void s e t Y ( i n t y ) { . . . } protection de l’information
}
I les traitements que l’on souhaite effectuer
p u b l i c class F i g u r e {
public Point c ;
I les méthodes publiques : mode d’accès public visibles depuis
p u b l i c void t r a n s l a t e r ( i n t x , i n t y ) { l’extérieur de la classe =⇒ vision client
t h i s . c . s e t X ( t h i s . c . getX ()+ x ) ; I les méthodes privées : mode d’accès private visibles
t h i s . c . s e t Y ( t h i s . c . getY ()+ y ) ; uniquement depuis l’intérieur de la classe (autres méthodes)
} =⇒ vision fournisseur
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 84 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 85 / 151
Accesseurs : bonne et mauvaise pratique Outline

Java en quelques mots


Comparatif Java et C++
I Mauvaise pratique La création des méthodes publiques ou
Programmation orientée objets.
privées doit se faire en fonction des besoins et non à-priori. On
ne définit pas des accesseurs ou (pire) des accesseurs publics Les classes Java
systématiquement Les attributs.
Les méthodes.
I Bonne pratique Si on a besoin d’un accesseur en lecture et/ou
en écriture, alors on le/les crée : Le mot clé this.
I si le besoin est à l’intérieur de la classe (fournisseur) =⇒ Les accesseurs.
accesseur privé Les méthodes de classe.
I si le besoin est à l’extérieur de la classe (client) =⇒ accesseur La surcharge.
public mais attention, danger ! Il faut assurer l’indépendance Les constructeurs.
de la représentation
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 86 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 87 / 151

Les méthodes de classe. Les méthodes static en java.

Java en quelques mots


Comparatif Java et C++ Définition
Programmation orientée objets. Comme pour les attributs, une méthode de classe est une
Les classes Java méthode dont la déclaration est précédée du modificateur static.
Elle ne s’exécute pas relativement à une instance de classe et ne
Les attributs.
peut donc pas utiliser "directement" :
Les méthodes.
I des attributs instances
Le mot clé this.
Les accesseurs. I des methodes instances
Les méthodes de classe. I le mot cle this
La surcharge.
Les constructeurs. Les méthodes de classe peuvent être utilsées pour :
Exécutable Java. 1. Manipuler les attributs de classe (lecture ou affectation) ;
Des classes utiles. 2. Définir une méthode générique sur la classe.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 88 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 89 / 151

Méthode de classe (1) : Utilisation des attributs Méthode de classe (2) : Les méthodes générique.
de classe.
Une méthode de classe n’utilise pas toujours des attributs de classe.
Une méthode de classe peut être utilisée pour manipuler des Elle peut être introduite pour effectuer des actions génériques sur
attributs de classe. des ensembles d’instances de la classe.
p u b l i c class I n d i v i d u { p u b l i c class P o i n t {
static int ageRetraite ; public f l o a t d i s t a n c e ( Point p ) { . . . }
s t a t i c void m o d i f i e r A g e R e t r a i t e ( i n t a g e R e t r a i t e ) {
static f l o a t d i s t a n c e E n t r e ( P o i n t p1 , P o i n t p2 ) { . . . }
Individu . ageRetraite = ageRetraite ;
}
}
}
p u b l i c class T e s t P o i n t {
p u b l i c void main ( S t r i n g [ ] a r g s ) {
Point a , b ;
Attention ...
dist = a . distance (b );
d i s t = Point . d i s t a n c e E n t r e ( a , b ) ;
Ici, on ne peut pas utiliser le mot clé this pour accéder à l’attribut
}
de classe ageRetraitre. }

J. Sopena (INRIA/UPMC) Le bases du langage Java. 90 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 91 / 151

Classes n’ayant que des méthodes static. Outline


Remarque(s) Java en quelques mots
Une classe peut ne contenir que des membres static. Dans ce cas Comparatif Java et C++
elle ne sert pas a creer des objets ! ! !
Programmation orientée objets.
Exemple 1 - La classe Math est une classe boîte à outils ne
Les classes Java
possédant que des constantes (E et PI) et méthodes de classes.
Les attributs.
i n t r a y o n = 30 ; Les méthodes.
double s u r f a c e = Math . PI ∗ Math . pow ( r a y o n , 2 ) ;
Le mot clé this.
Les accesseurs.
Exemple 2 - La classe System qui représente la VM ne possédant Les méthodes de classe.
que des attributs et méthodes de classes : il n’y a pas de raison La surcharge.
d’en avoir plusieurs instances.
Les constructeurs.
// Permet d ’ a f f i c h e r d e s m e s s a g e s d a n s l a c o n s o l e Exécutable Java.
System . o u t . p r i n t l n ( " H e l l o , ␣ World ␣ ! " ) ;
// Permet d ’ a r r ê t e r b r u t a l e m e n t un programme . Des classes utiles.
System . e x i t ( 0 ) ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 92 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 93 / 151
La surcharge. La signature d’une méthode Java

Java en quelques mots Définition


Comparatif Java et C++ On appelle signature d’une méthode, l’ensemble composé de :
Programmation orientée objets. I son nom
Les classes Java I des types de ses arguments
Les attributs. Elle permet d’identifier de manière unique une méthode au sein
Les méthodes. d’une classe.
Le mot clé this.
Les accesseurs.
Les méthodes de classe.
La surcharge.
ATTENTION
Les constructeurs. En java, ne font pas partie de la signature d’une méthode :
Exécutable Java. 1. le nom de ses arguments (comme en C)
Des classes utiles. 2. son type de retour de la méthode (void ou non)

J. Sopena (INRIA/UPMC) Le bases du langage Java. 94 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 95 / 151

La signature d’une méthode Java La signature d’une méthode Java


Définition
On appelle surcharge (en anglais « overloading ») d’une méthode,
la possibilité de définir des comportements différents pour la même p u b l i c class R e c t a n g l e {
méthode selon les arguments passés en paramètres. Dans ce cas, p u b l i c void r e d i m e n s i o n n e r ( int f a c t e u r ) { . . . }
p u b l i c void r e d i m e n s i o n n e r ( float a , float b ) { . . . }
deux méthodes d’une même classe peuvent porter le même "nom"
}
mais n’ont pas la même signature.
p u l i c class T e s t R e c t a n g l e {
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
p u b l i c class R e c t a n g l e { Rectangle r1 ;
p u b l i c void r e d i m e n s i o n n e r ( int f a c t e u r ) { ...
largeur = largeur ∗ facteur ; r1 . redimensionner ( 2 ) ;
longueur = longueur ∗ facteur ; r 1 . r e d i m e n s i o n n e r ( 2 , 3.1 ) ;
} }
p u b l i c void r e d i m e n s i o n n e r ( float a , float b ) { }
largeur = largeur + a ;
l o n g u e u r = l o n g u e u r +b ;
}
}
J. Sopena (INRIA/UPMC) Le bases du langage Java. 96 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 97 / 151

La signature d’une méthode Java Outline

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets.
ATTENTION Les classes Java
Les attributs.
Il ne faut pas confondre la surcharge ( en anglais « overloa- Les méthodes.
ding ») et la redéfinition (en anglais « overriding ») qui sera Les constructeurs.
étudiée dans le cours sur le polymorphisme et qui correspond à la Le mécanisme d’instanciation.
possibilité de spécifier le comportement d’une méthode à l’exé- Constructeur par défaut.
cution selon le type d’objets l’invoquant. Plusieurs constructeurs.
Exécutable Java.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 98 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 99 / 151

Outline Le mécanisme d’instanciation.

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Le mécanisme d’instanciation. Le mécanisme d’instanciation.
Constructeur par défaut. Constructeur par défaut.
Plusieurs constructeurs. Plusieurs constructeurs.
Exécutable Java. Exécutable Java.
Des classes utiles. Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 100 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 101 / 151
Instanciation de classe. Constructeur en Java : définition (suite)

Définition
Un constructeur est une méthode qui n’a pas de type de retour,
qui porte le même nom que la classe. C’est cette méthode qui sera
automatiquement appelée à l’instanciation de la classe, i.e.,au
moment de la création d’un objet. Les constructeurs permettent,
Les instances d’une classe sont créées (construits) par une méthode entre autres, d’initialiser les attributs de la classe.
particulière de la classe appelée constructeur.
p u b l i c class P o i n t {
private int x ;
private int y ;
p u b l i c Point ( i n t x , i n t y ) {
this . x = x ;
this . y = y ;
}
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 102 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 103 / 151

Constructeur en Java : invocation Outline

Java en quelques mots


Définition
Comparatif Java et C++
Pour créer une instance d’une classe, on utilise l’opérateur new
Programmation orientée objets.
avec l’un des constructeurs de la classe : p = new Point(2,3);
Cette invocation : Les classes Java
1. alloue l’espace mémoire nécessaire pour stocker les propriétés Les attributs.
2. crée une référence sur cet espace mémoire Les méthodes.
3. exécute le code du constructeur pour initialiser les données Les constructeurs.
Le mécanisme d’instanciation.
4. retourne la référence ainsi créée.
Constructeur par défaut.
Plusieurs constructeurs.
Remarque(s) Exécutable Java.
Tout est dynamique : Des classes utiles.
les instances d’une classe sont instanciées dynamiquement.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 104 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 105 / 151

Constructeur par défaut. Constructeur par défaut : définition.

Java en quelques mots


Règle
Comparatif Java et C++
Programmation orientée objets. Toute classe posséde au moins un constructeur.
Les classes Java
Les attributs.
Les méthodes.
Définition
Les constructeurs.
Le mécanisme d’instanciation. En abscence de déclaration explicite d’un constructeur, un
Constructeur par défaut. constructeur par défaut sera automatiquement ajouté par le
Plusieurs constructeurs. compilateur Java.
Exécutable Java. Pour classe Toto, ce constructeur par défaut sera :
Des classes utiles.
[ p u b l i c ] Toto ( ) {}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 106 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 107 / 151

Constructeur par défaut : ce qui est fait. Constructeur par défaut : exemple.

p u b l i c class P o i n t {
private int x ;
Remarque(s) private int y ;
public a f f i c h e r ( ) {
La notion de constructeur par défaut est en partie lié à l’héritage ;
System . o u t . p r i n t l n ( " x="+x+" ␣ e t ␣ y="+y ) ;
elle sera donc complétée plus tard lorsque nous introduirons cette }
notion. }

p u b l i c class T e s t P o i n t ( ) {
Dans un premier temps, on retiendra qu’un constructeur par
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
défaut : P o i n t p = new P o i n t ( ) ;
1. initialise les attributs numérique de types primitif à 0 ; p. afficher ();
}
2. initialise les attributs de (boolean) à false ; }
3. initialise les attributs de types Objet à null.
java TestPoint
x=0 et y=0

J. Sopena (INRIA/UPMC) Le bases du langage Java. 108 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 109 / 151
Constructeur par défaut : la limite. Constructeur par défaut : la limite.

p u b l i c class P o i n t {
private int x ;
private int y ;
Attention p u b l i c Point ( i n t x , i n t y ) {
this . x = x ;
Le constructeur par défaut n’est ajouté par Java si et seulement this . y = y ;
}
s’il n’y a pas de constructeur explicite. }
Une classe ne possède donc pas toujours un construceur sans
paramètre. p u b l i c class T e s t P o i n t ( ) {
Si l’on en veut un en plus d’un constructeur à paramètre, il faut p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
le déclarer explicitement. Point p = new Point() ;
}
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 110 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 111 / 151

Outline Plusieurs constructeurs.

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Le mécanisme d’instanciation. Le mécanisme d’instanciation.
Constructeur par défaut. Constructeur par défaut.
Plusieurs constructeurs. Plusieurs constructeurs.
Exécutable Java. Exécutable Java.
Des classes utiles. Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 112 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 113 / 151

Surcharge de constructeur. Exemple de constructeurs.

p u b l i c class Q u e s t i o n {
...
p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ,
i n t bonneReponse ) {
this . question = question ;
Si une classe a plusieurs constructeurs, il s’agit de surcharge : this . choix = choix ;
t h i s . bonneReponse = b onneReponse ;
I même nom (celui de la classe) this . reponse = 0;
I types des paramètres différents. }
p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ) {
this . question = question ;
this . choix = choix ;
t h i s . bonneReponse = 0 ;
this . reponse = 0;
}
...
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 114 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 115 / 151

Exemple de constructeurs imbriqués. Exemple d’instanciation


On peut utiliser un constructeur pour définir un autre constructeur,
au moyen du mot-clé this, mais cette invocation d’un autre
constructeur doit être la première instruction.
p u b l i c class A p p l i Q u e s t i o n {
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
p u b l i c class Q u e s t i o n {
S t r i n g [ ] rep = { " Blanc " , " Noir " };
...
Question q =
p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ,
new Question ( " Le ␣ c h e v a l ␣ b l a n c ␣ e s t " , r e p , 1 ) ;
i n t bonneReponse ) {
System . o u t . p r i n t l n ( q . t o S t r i n g ( ) ) ;
this . question = question ;
...
this . choix = choix ;
}
t h i s . bonneReponse = b on neReponse ;
this . reponse = 0;
} I q est une référence vers une instance de Question
p u b l i c Question ( S t r i n g q u e s t i o n , S t r i n g [ ] c h o i x ) {
this ( question , choix , 0 ) ; I La valeur particulière null peut lui être affectée
}
...
}

J. Sopena (INRIA/UPMC) Le bases du langage Java. 116 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 117 / 151
Classe : définition. Outline
Définir une classe en Java, c’est définir ses membres à savoir :
(1) ses attributs, (2) le(s) constructeur(s), (3) et ses méthodes. Java en quelques mots
Comparatif Java et C++
I Il n’est pas nécessaire de spécifier de mécanisme de Programmation orientée objets.
destruction,
Les classes Java
I transparente pour l’utilisateur,
Les attributs.
I prise en charge par un gestionnaire appelé garbage collector
chargé de détecter les instances à détruire. Les méthodes.
Les constructeurs.
Exécutable Java.
Coder un executable.
Conséquences Compilation.
Structuration des sources.
I gain de fiabilité (pas de désallocation erronée).
Des classes utiles.
I a un coût (perte en rapidité).

J. Sopena (INRIA/UPMC) Le bases du langage Java. 118 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 119 / 151

Outline Coder un executable.

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Exécutable Java. Exécutable Java.
Coder un executable. Coder un executable.
Compilation. Compilation.
Structuration des sources. Structuration des sources.
Des classes utiles. Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 120 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 121 / 151

La méthode main de Java : concept Un premier programme Java


Il ne suffit pas de définir les attributs, constructeurs et méthodes
des différentes classes, il faut pouvoir exécuter un programme, les
concepteurs de Java ont choisi pour cela de particulariser une
méthode : la méthode main.
p u b l i c class H e l l o {
La méthode main est une méthode de classe publique, qui contient p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
le « programme principal » à exécuter et qui a pour signature : System . o u t . p r i n t l n ( " H e l l o ␣ w o r l d ␣ ! ! ! " ) ;
}
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) }

Attention Hello world !!!

La méthode main ne peut pas retourner d’entier comme en C.


public s t a t i c int main ( S t r i n g [ ] a r g s )

J. Sopena (INRIA/UPMC) Le bases du langage Java. 122 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 123 / 151

Un deuxième programme Java Un deuxième programme Java

import j a v a . u t i l . S c a n n e r ; import j a v a . u t i l . S c a n n e r ;

p u b l i c class Main { p u b l i c class Main {


p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
i n t age ; i n t age ;
S c a n n e r s c = new S c a n n e r ( System . i n ) ; S c a n n e r s c = new S c a n n e r ( System . i n ) ;
System . o u t . p r i n t ( " S a i s i s s e z ␣ v o t r e ␣ âge ␣ : ␣ " ) ; System . o u t . p r i n t ( " S a i s i s s e z ␣ v o t r e ␣ âge ␣ : ␣ " ) ;
age = s c . n e x t I n t ( ) ; age = s c . n e x t I n t ( ) ;
i f ( age > 2 0 ) i f ( age > 2 0 )
System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ agé " ) ; System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ agé " ) ;
e l s e i f ( age > 0 ) e l s e i f ( age > 0 )
System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ j e u n e " ) ; System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ j e u n e " ) ;
else else
System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ en ␣ d e v e n i r " ) ; System . o u t . p r i n t l n ( " v o u s ␣ ê t e s ␣ en ␣ d e v e n i r " ) ;
} }
} }

Saisissez votre âge : 16


vous êtes jeune
J. Sopena (INRIA/UPMC) Le bases du langage Java. 124 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 124 / 151
Un troisième programme Java Outline

p u b l i c class Main {
p u b l i c s t a t i c void f ( i n t [ ] t a b ) {
Java en quelques mots
f o r ( i n t i = 0 ; i < t a b . l e n g t h ; ++i ) Comparatif Java et C++
f o r ( i n t j = 0 ; j < t a b . l e n g t h − i − 1 ; ++j )
Programmation orientée objets.
i f ( tab [ j ] > tab [ j + 1 ] ) {
i n t tmp = t a b [ j ] ; Les classes Java
tab [ j ] = tab [ j + 1 ] ;
Les attributs.
t a b [ j + 1 ] = tmp ;
} Les méthodes.
} Les constructeurs.
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Exécutable Java.
int [ ] t = { 2 , 7 , 1 , 5 }; Coder un executable.
Main . f ( t ) ; Compilation.
for ( i n t i : t ) System . o u t . p r i n t ( i + " ␣ " ) ;
Structuration des sources.
}
} Des classes utiles.

1 2 5 7

J. Sopena (INRIA/UPMC) Le bases du langage Java. 125 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 126 / 151

Compilation. Compilation et exécution (1)

Java en quelques mots


Comparatif Java et C++ Étape 1 : on crée un fichier texte dont le nom est le nom de la
classe auquel on rajoute l’extension .java.
Programmation orientée objets.
Les classes Java On écrit la définition de la classe Logement dans un fichier texte
Les attributs. nommé HelloWord.java.
Les méthodes.
Les constructeurs.
Exécutable Java. Important
Coder un executable.
Compilation. Un fichier ne peut contenir qu’une seule classe publique.
Structuration des sources.
Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 127 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 128 / 151

Compilation et exécution (2) Compilation et exécution (3)


Étape 2 : on compile le programme Java à l’aide de la commande Étape 3 : le JIT de la machine virtuelle compile à la volée le
javac. bytecode produit (c’est-à-dire on exécute la méthode main) à l’aide
la commande java.
HelloWorld.java
public class HelloWorld {
public static void main (String args[]) {
System.out.println("Hello World!"); HelloWorld.class
}
0 getstatic #7 <Field java.io.PrintStream out>
}
3 ldc #1 <String "Hello World!" >
5 invokevirtual #8 <Method void println(java.lang.String)>
8 return
java HelloWorld
javac HelloWorld.java
JIT
HelloWorld.class
0 getstatic #7 <Field java.io.PrintStream out> Système
3 ldc #1 <String "Hello World!" > Exécution
5 invokevirtual #8 <Method void println(java.lang.String)> Machine virtuelle Java d’exploitation
8 return

J. Sopena (INRIA/UPMC) Le bases du langage Java. 129 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 130 / 151

Outline Structuration des sources.

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Exécutable Java. Exécutable Java.
Coder un executable. Coder un executable.
Compilation. Compilation.
Structuration des sources. Structuration des sources.
Des classes utiles. Des classes utiles.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 131 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 132 / 151
Compilation et interprétation (4) Outline

Java en quelques mots


Comparatif Java et C++
Programmation orientée objets.
Important Bien positionner les variables d’environnement
Les classes Java
PATH : doit contenir le répertoire du compilateur et de Les attributs.
la machine virtuelle. Les méthodes.
CLASSPATH : indique le chemin ou se trouve les classes (par Les constructeurs.
défaut, le répertoire courant) sinon vous aurez le Exécutable Java.
message d’erreur
Des classes utiles.
Exception in thread "main" La classe String
java.lang.NoClassDefFoundError: HelloWorld
Les tableaux.
Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 133 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 134 / 151

Outline La classe String

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Exécutable Java. Exécutable Java.
Des classes utiles. Des classes utiles.
La classe String La classe String
Les tableaux. Les tableaux.
Les enveloppes. Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 135 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 136 / 151

Les chaînes de caractères : le type String (1) Les chaînes de caractères : le type String (2)
Les chaînes de caractères sont des instances de la classe String.
L’opérateur de concaténation des chaînes de caractères est La classe String offre de nombreuses autres possibilités :
l’opérateur +.
I length() renvoie la longueur de la chaîne de caractères.
I toUpperCase et toLowerCase permettent, respectivement, de
Attention mettre la chaîne de caractères en lettres majuscules et
minuscules.
Pour comparer deux chaînes de caractères, on utilise la méthode I int indexOf (char ch) renvoie l’indice de la première
equals (ou equalsIgnoreCase) de la classe String. occurence du caractère ch dans la chaîne de caractères.
String str1 = . . . . ; I String substring(int beginIndex,int endIndex) qui
String str2 = . . . . ; retourne la sous-chaîne constitué des caractères d’indice
beginIndex à endIndex - 1.
i f ( s t r 1 . e q u a l s ( s t r 2 ) ) { . . . } else { . . . }
I etc ...

J. Sopena (INRIA/UPMC) Le bases du langage Java. 137 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 138 / 151

Outline Les tableaux.

Java en quelques mots Java en quelques mots


Comparatif Java et C++ Comparatif Java et C++
Programmation orientée objets. Programmation orientée objets.
Les classes Java Les classes Java
Les attributs. Les attributs.
Les méthodes. Les méthodes.
Les constructeurs. Les constructeurs.
Exécutable Java. Exécutable Java.
Des classes utiles. Des classes utiles.
La classe String La classe String
Les tableaux. Les tableaux.
Les enveloppes. Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 139 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 140 / 151
Les tableaux Les tableaux unidimensionnels

La déclaration d’un tableau précise simplement le type des éléments


du tableau :
Important int [ ] tableau ;

Un tableau est un objet !


La dimension du tableau est précisé lors de son instanciation
// c r é e un t a b l e a u p o u v a n t c o n t e n i r 50 e n t i e r s
t a b l e a u = new i n t [ 5 0 ] ;
Deux étapes :
1. Déclaration : déterminer le type de ses éléments. I La taille d’un tableau ne peut plus être modifiée par la suite.
2. Dimensionnement : déterminer la taille du tableau (c’est-à-dire I Dimension du tableau : tableau.length
le nombre d’éléments).

J. Sopena (INRIA/UPMC) Le bases du langage Java. 141 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 142 / 151

Les tableaux unidimensionnels Les tableaux unidimensionnels

Remarque(s)
Si l’on déclare un tableau dont les éléments sont des références de
I On accède à l’élément d’indice i du tableau en écrivant
type logement :
tableau[i].
Logement [ ] ville ;
I Les indices commencent à 0.
I Java vérifie automatiquement l’indice lors de l’accès.
Alors, la ligne de commande
Remarque(s) v i l l e = new Logement [ 1 0 0 ] ;
On peut aussi donner explicitement la liste des éléments :d’un
tableau au moment de son instanciation : instancie un tableau de 100 références initialisées à null. Si l’on
int [ ] tableau = {1 ,2 ,3}; veut qu’une case contienne une référence vers une instance de la
S t r i n g [ ] mots = [ " L i c e n c e " , "MIAGE" , "POO" } ; classe Logement, on doit instancier une instance de la classe
Logement et écrire la référence de l’instance dans la case :
v i l l e [ 5 0 ] = new Logement ( 6 7 . 0 d , 5 e +5);

J. Sopena (INRIA/UPMC) Le bases du langage Java. 143 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 144 / 151

Les tableaux unidimensionnels Outline

Java en quelques mots


L’argument args de la méthode main est un tableau dont les Comparatif Java et C++
éléments sont des références vers des chaînes de caractères. Il Programmation orientée objets.
permet de passer à la méthode main des paramètres en ligne de Les classes Java
commande Les attributs.
Si l’on écrit
java Programme a 3 5.7 true
Les méthodes.
Les constructeurs.
alors args est un tableau de à 1 dimension de taille 4 contenant les
Exécutable Java.
références vers les chaînes de caractères "a", "3", "5.7" et "true".
Les références sont mises dans le même ordre que sur la ligne de Des classes utiles.
commande. Par exemple, args[1] est une référence vers la chaîne La classe String
de caractères "3". Les tableaux.
Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 145 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 146 / 151

Les enveloppes. Les classes enveloppes des types primitifs

Java en quelques mots


Comparatif Java et C++ À chaque type primitif est associé une classe qu’on appelle classe
Programmation orientée objets. enveloppe de ce type primitif.
La classe enveloppe du type int est la classe Integer.
Les classes Java
Les attributs. I n t e g e r e n t i e r = new I n t e g e r ( 5 6 ) ;
Les méthodes.
Les constructeurs.
De plus, chaque classe enveloppe d’un type primitif possède une
Exécutable Java. méthode pour convertir une instance de la classe en une valeur du
Des classes utiles. type primitif associé.
La classe String
Les tableaux. int i = entier . intValue ();
Les enveloppes.

J. Sopena (INRIA/UPMC) Le bases du langage Java. 147 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 148 / 151
Les classes enveloppes des types primitifs Les classes enveloppes des types primitifs

Pour les autres types primitifs, les noms des classes enveloppes Pour chaque classe enveloppe, il existe plusieurs constructeurs qui
sont : permettent de faire des conversions explicites depuis les différents
types primitifs ou depuis une chaîne de caractère.
Type primitif classe enveloppe I n t e g e r i = new I n e t g e r ( 3 3 ) ;
short Short I n t e g e r i = new I n t e g e r ( " 6 " ) ;
int Integer
long Long
Ces classes enveloppe permettent aussi de convertir, grâce à des
byte Byte
méthodes de classe, une chaîne de caractères en types primitifs
float Float
(int, float, boolean, ...)
double Double
boolean Boolean i n t i = I n t e g e r . p a r s e I n t ( "6" ) ;
double d = Double . p a r s e D o u b l e ( " 6 . 8 9 " ) ;
char Character boolean b = B o o l e a n . p a r s e B o o l e a n ( " f a l s e " ) ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 149 / 151 J. Sopena (INRIA/UPMC) Le bases du langage Java. 150 / 151

Les classes enveloppes : Autoboxing/Unboxing

La version 5.0 de Java introduit un mécanisme d’autoboxing (mise


en boîte) qui automatise le passage des types primitifs vers les
classes enveloppe. L’opération inverse s’appelle unboxing.

Avant la version 5.0, pour gérer une liste d’Integer on devait


écrire :
l i s t e . add (new I n t e g e r ( 8 9 ) ) ;
int i = l i s t e . get (n ) . intValue ( ) ;

Maintenant avec l’autoboxing, le code est beaucoup moins lourd :

l i s t e . add ( 8 9 ) ;
int i = l i s t e . get (n ) ;

J. Sopena (INRIA/UPMC) Le bases du langage Java. 151 / 151

You might also like