Java
Java
Bibliographie
2
Plan
Introduction à la POO
Introduction au langage JAVA
Bases du langage
Classes et objets
Héritage
Héritage et polymorphisme
Les indispensables : package, collections et exception
Les interfaces graphiques (GUI)
3
Introduction à la POO
4
Introduction
Critères de qualité d’un logiciel:
La correction : Un logiciel doit exécuter exactement les tâches
définies par sa spécification et fournir exactement les résultats
demandés.
Robustesse : le logiciel est capable de bien fonctionner dans des
conditions anormales.
L’extensibilité : Les programmes doivent s’adapter facilement aux
changements de spécification afin d’intégrer facilement de nouvelles
fonctionnalités
L’efficience : Temps d’exécution, taille mémoire, etc.
La portabilité : C’est la facilité avec laquelle on peut exploiter un
même logiciel dans différentes implémentations.
La réutilisabilité : C’est la possibilité d’utiliser certaines parties du
logiciel pour résoudre un autre problème.
5
Programmation Procédurale (PP)
Principe: Repose sur l’équation suivante :
Programme = Structures de données + Algorithmes
Dans la PP, la conception d’un programme est conduite par
traitements :
Consiste à décomposer le programme en fonctions (modules)
simples. main()
Données
init() calcule()
Données
trie()
factorise()
6
compare() permute()
Programmation Orientée Objet (POO)
Basée sur les données :
Déterminer les données à traiter.
Réaliser les fonctions qui permettent de les manipuler.
Données Données
7
Programmation Procédurale VS POO
Objectifs de la POO
Facilité la réutilisation de code, encapsulation et abstraction
Facilité de l’évolution du code
Améliorer la conception et la maintenance des grands systèmes
Programmation par « composants ». Conception d’un logiciel à la
manière de la fabrication d’une voiture.
Programmation Procédurale
Unité logique : le module
Une zone pour les variables
Une zone pour les fonctions
Chaque fonction résout une partie du problème
Structuration « descendante » du programme
8
Programmation Orientée Objet (POO)
9
Les Concepts de base de la POO
Un Objet a :
Ses propres données (attributs) qui peuvent être des données
simple (entier, texte, …) ou d’autres objets.
Ses propres méthodes (fonctions membres) qui représente son
comportement.
Ce sont les traitements qu'on peut appliquer aux données.
Une identité qui permet de l'identifier parmi les autres objets.
Exemple :
Marque : Renault
Modèle : Megane
Couleur : Noir
Etat : En Marche
Moteur : Diesel; 85 Cheveaux
Formule à retenir :
Objet= Etat (Attributs) + Comportement (Méthodes)+ Identité
11
Les Concepts de base de la POO…
Les objets communiquent entre eux par des envoies de
messages.
Un objet peut recevoir un message qui déclenche
une méthode qui modifie son état
et/ou
une méthode qui envoie un message à un autre objet
demarre()
maVoiture leMoteur
12
Les Concepts de base de la POO…
Les objets qui ont les mêmes états et les mêmes
comportements sont regroupés : classe
Les classes servent de « moules » pour la création des objets.
Un objet est une instance (exemplaire) d’une classe.
Un programme OO est constitué de classes qui permettent
de créer des objets qui s’envoient des messages.
13
Les Concepts de base de la POO…
Classe :
généralisation de la notion de type.
décrit les caractéristiques générales d’un ensemble (famille)
d’objets similaires :
Les objets similaires sont des instances (exemplaires) de la même classe.
possède des membres :
Attributs : les éléments données de la classe
Méthodes : fonctions qui donne accès ou modifie les attributs.
Exemple :
14
Les Concepts de base de la POO…
Masquage de l’information :
Consiste à limiter l'accès aux données d’une classe.
Normalement, les valeurs des attributs d’un objet ne sont pas
accessibles directement par un autre objet.
On dit que les attributs sont masqués à l’intérieur d’un objet.
Les attributs masqués sont dits privés.
Ceux qui ne sont pas masqués sont appelés attributs publiques.
L'accès aux attributs privés est effectué via des méthodes.
15
Les Concepts de base de la POO…
Encapsulation des données :
L'encapsulation est un mécanisme consistant à rassembler les
données et les méthodes au sein d'une même classe en cachant
l'implémentation de l'objet, c'est-à-dire en empêchant l'accès
aux données par un autre moyen que les méthodes proposés.
Données
Méthodes
16
Les Concepts de base de la POO…
Accès aux attributs d'un objet :
Syntaxe : [Link]
Exemple : P est un objet de la classe Etudiant qui un attribut
Matricule de type entier
[Link] = 234;
17
Les Concepts de base de la POO…
Stratégie de développement OO :
1. Identifier les objets et leurs attributs
Exemple : CompteBancaire
1. Identifier les opérations (Exemple: Verser, Retirer, …).
2. Établir la visibilité. Par exemple, pour un objet
CompteBancaire on pourra avoir accès à toutes les actions
(Verser, Retirer, …) mais ne pourra pas voir l'accès
directement au solde pour le modifier.
3. Établir l’interface : description de chaque opération avec ses
arguments (Exemple : boolean Verser( float M) )
4. Implanter chaque objet.
18
Présentation du langage
Sun définit le langage Java comme:
Objet :
Inspiré du C++, Objective C et Smalltalk , Java est un langage fortement objet.
Simple :
Il est toutefois allégé de toutes les sources d’erreurs du C++ (pointeurs, gestion
mémoire, etc.) et des fonctionnalités "tordues" et peu utilisées.
Distribué :
Java contient un ensemble de classes permettant d'utiliser des protocoles TCP/IP tels
que HTTP et FTP. L'utilisation des URL se fait aussi "simplement" que l'ouverture de
fichiers locaux.
Robuste :
Le maximum de vérifications sont faites à la compilation (protection des classes,…).
Pas de gestion explicite de la mémoire (GC en thread), pas de pointeur, ..
Sécurisé :
Java est très sécurisé (SecurityManager).
19
Présentation du langage...
Interprété :
Avantage au développement.
Mais est pour l'instant un inconvénient à l'exécution (performances).
Indépendant de l'architecture :
C'est la machine virtuelle qui assure cette indépendance.
Portable :
Contrairement au C/C++ Java n'est pas dépendant de l'implémentation, les
types de base ont des tailles fixes.
Multithread :
C'est la possibilité d'exécuter plusieurs tâches simultanément.
Dynamique :
Java a été conçu pour fonctionner dans un environnement évolutif.
Compact :
L'interpréteur Java n'a besoin que de 215Ko.
Chargement dynamique des classes.
20
Le Langage JAVA
Informations Générales
Conçu par Sun Microsystems (Write Once Run Anywhere)
Langage orienté objet, inspiré de C++
De nombreuses fonctionnalités Réseau et Internet
Langage fortement typé
Gestion du multitâche
Gestion mémoire réalisée par un Garbage Collector
Langage compilé vers du pseudo code binaire nommé
"ByteCode", interprété au sein d'une machine virtuelle (VM)
Portabilité = disponibilité de la machine virtuelle Java
Java Source Exécution
ByteCode
21 Compilation Machine Virtuelle
Bases du langage
22
Premier exemple de programme en
Java
public class PremierProg {
public static void main(String[] argv) {
[Link]("Bienvenue, mon Premier Programme Java");
}
}
24
Types primitifs de Java
Ne sont pas des objets !!!
Occupent une place fixe en mémoire réservée à la déclaration
Types primitifs :
Entiers : byte (1 octet), short (2 octets), int (4 octets) et long
(8 octets).
Flottants : float (4 octets) et double (8 octets)
Booléens : boolean (true ou false)
Caractères : char (codage Unicode sur 16 bits)
Chacun des types simples possède un alter-ego objet disposant de
méthodes de conversion (à voir dans la partie Classes et Objets).
L’autoboxing introduit depuis la version 5.0 convertit de manière
transparente les types primitifs en références.
25
Initialisation et constantes
Initialisation
Une variable peut recevoir une valeur au moment de sa déclaration :
int n = 15; Penser à l’initialisation au risque
boolean b = true; d’une erreur de compilation
int n;
Cette instruction joue le même rôle : [Link](" n = " + n);
int n;
n = 15;
boolean b;
b = true;
Constantes
Ce sont des variables dont la valeur ne peut affectée qu'une fois
Elles ne peuvent plus être modifiées
Elles sont définies avec le mot clé final
final int n = 5;
final int t;
...
t = 8;
n = 10; // erreur : n est déclaré final
26
Structure de contrôle
Choix :
Si alors sinon : if condition {...} else {...}
Itérations :
Boucle :
for (initialisation; condition; modification){ ...}
Boucle (for each) :
for (Type var : Collection) {...}
Tant que :
while(condition) {...}
Faire jusqu’à :
do {...} while (condition)
Sélection bornée
Selon faire :
switch ident { case valeur0 : ... case valeur1 : ... default:
...}
Le mot clé break demande à sortir du bloc
27
Structure de contrôle
Exemple : structure de contrôle
public class SwitchBreak {
public static void main(String[] argv) {
int n = ...;
[Link]("Valeur de n :" + n);
switch (n) {
case 0:
[Link]("nul");
break;
case 1:
case 2:
[Link]("petit");
case 3:
case 4:
case 5:
[Link]("moyen");
break;
default:
[Link]("grand");
}
[Link]("Adios...");
}
28 }
Opérateurs sur les types primitifs
Opérateurs arithmétiques
Unaires : +a, -b
Binaires : a+b, a-b, a*b, a%b
Incrémentation et décrémentation : a++, b--
Affectation élargie : +=, -=, *=, /=
Opérateurs comparaisons
a==b, a!=b, a>b, a<b, a>=b, a<=b
Opérateurs logiques
Et : a && b, a & b
Ou : a || b, a | b
Conversion de type explicite (cast)
(NouveauType)variable
29
Opérateurs sur les types primitifs
Exemple :
public class ExempleTypesPrimitifs {
public static void main(String[] argv) {
int compteur = 0;
while (compteur != 100) {
// Prend un nombre aléatoire
double nbreAleatoir = [Link]() * 1000;
// Etablie un index de 0 à 10
int index = compteur % 10;
// Construction de l’affichage
[Link]("Index : " + index + " Nbre Aléatoir : "
+ (int) nbreAleatoir);
// Incrémentation de la boucle
compteur += 1;
}
}
}
30
Affectation, recopie et comparaison
Affecter et recopier un type primitif
a=b : signifie a prend la valeur de b
a et b sont distincts
Toute modification de a n’entraîne pas celle de b
Comparer un type primitif
a == b : retourne true si les valeurs de a et b sont identiques
31
Les tableaux en Java
Les tableaux sont considérés comme des objets
Fournissent des collections ordonnées d’éléments
Les éléments d’un tableau peuvent être
Des variables d’un type primitif (int, boolean, double,
char, …)
Des références sur des objets (à voir dans la partie Classes et
Objets)
Création d’un tableau
1. Déclaration : déterminer le type du tableau
2. Dimensionnement : déterminer la taille du tableau
3. Initialisation : initialiser chaque case du tableau
32
Les tableaux en Java : Déclaration
1. Déclaration
La déclaration précise simplement le type des éléments du
tableau
int[] monTableau;
Peut s’écrire également
int monTableau[];
33
Les tableaux en Java : Dimensionnement
2. Dimensionnement
Le nombre d’éléments du tableau sera déterminé quand l’objet
tableau sera effectivement créé en utilisant le mot clé new
La taille déterminée à la création du tableau est fixe, elle ne
pourra plus être modifiée par la suite
Longueur d’un tableau : [Link]
int[] monTableau; // Déclaration
monTableau = new int[3]; // Dimensionnement
34
Les tableaux en Java : Initialisation
3. Initialisation
Comme en C/C++ les indices commencent à zéro
L’accès à un élément d’un tableau s’effectue suivant cette forme:
monTab[varInt]; // varInt >= 0 et <[Link]
1. Dimensionnement
monTableau = new int[3];
2. Initialisation
monTableau[0] = 1;
monTableau[1] = 2;
monTableau[2] = 3;
for (int i = 0; i < [Link]; i++) {
[Link](monTableau[i]);
}
37
Petite précision du "[Link](…)"
Usages : affichage à l’écran
[Link](…) : revient à la ligne
[Link](…) : ne revient pas à la ligne
Différentes sorties possibles
out : sortie standard
err : sortie en cas d’erreur
Tout ce que l’on peut afficher…
Objets, nombres, booléens, caractères, …
Tout ce que l ’on peut faire …
Concaténation sauvage entre types et objets avec le "+"
[Link]("a=" + a + "donc a < 0 est " + a < 0);
38
Classes et Objets
39
Classe et définition
Une classe est constituée
Données ce qu'on appelle des attributs
Procédures et/ou des fonctions ce qu'on appelle des méthodes
Une classe est un modèle de définition pour des objets
Ayant même structure (même ensemble d'attributs)
Ayant même comportement (même méthodes)
Ayant une sémantique commune
Les objets sont des représentations dynamiques, du modèle défini
pour eux au travers de la classe (instanciation)
Une classe permet d'instancier (créer) plusieurs objets
Chaque objet est instance d'une classe et une seule
40
Classe et notation UML
41
Codage de la classe « Voiture »
45
Objet et définition
Un objet est instance d’une seule classe
Se conforme à la description que celle-ci fournit
Admet une valeur propre à l’objet pour chaque attribut déclaré
dans la classe
Les valeurs des attributs caractérisent l’état de l’objet
Possibilité de lui appliquer toute opération (méthode) définie
dans la Classe
Tout objet est manipulé et identifié par sa référence
Utilisation de pointeur caché (plus accessible que le C++)
On parle indifféremment d’instance, de référence ou
d’objet
46
Objet et notation UML
maClio est une instance de la classe Voiture
47
États des objets
Chaque objet qui est une instance de la classe Voiture possède
ses propres valeurs d’attributs
48
Affectation et comparaison
Affecter un objet
a = b : signifie a devient identique à b
Les deux objets a et b sont identiques et toute modification de
a entraîne celle de b
Comparer deux objets
a == b retourne true si les deux objets sont identiques
C’est-à-dire si les références sont les mêmes, cela ne compare
pas les attributs
49
Affectation et comparaison
L’objet maClio et saClio ont les mêmes attributs (états
identiques) mais ont des références différentes.
maClio != saClio
50
Affectation et comparaison
Recopier les attributs d’un objet "clone()"
Les deux objets a et b sont distincts
Toute modification de a n’entraîne pas celle de b
52
Cycle de vie d’un objet
Création
Usage d’un Constructeur
L’objet est créé en mémoire et les attributs de l’objet sont initialisés
Utilisation
Usage des Méthodes et des Attributs (non recommandé)
Les attributs de l’objet peuvent être modifiés
Les attributs (ou leurs dérivés) peuvent être consultés
53
Création d’objets : déroulement
La création d’un objet à partir d’une classe est appelée une
instanciation
L’objet créé est une instance de la classe
Déclaration
Définit le nom et le type de l ’objet
Un objet seulement déclaré vaut « null »
(mot réservé du langage)
Création et allocation de la mémoire
Appelle de méthodes particulières : les constructeurs
La création réserve la mémoire et initialise les attributs
Renvoi d’une référence sur l’objet maintenant créé
monObjet != null
54
Création d’objets : réalisation
La création d’un nouvel objet est obtenue par l’appel à :
new Constructeur(paramètres)
Il existe un constructeur par défaut qui ne possède pas de
paramètre (si aucun autre constructeur avec paramètre n’existe)
Les constructeurs portent le
même nom que la classe
56
Le constructeur de « Voiture »
Actuellement
On a utilisé le constructeur par défaut sans paramètre
On ne sait pas comment se construit la « Voiture »
Les valeurs des attributs au départ sont indéfinies et identique pour
chaque objet (puissance, etc.)
Les constructeurs portent le même nom que la
classe et n’ont pas de valeur de retour
57
Le constructeur de « Voiture »
Le constructeur de Voiture
Initialise vitesse à zéro
Initialise estDemaree à faux
Initialise puissance à la valeur passée en paramètre du
constructeur
public class Voiture {
private int puissance;
private boolean estDemarree;
private double vitesse;
public Voiture(int p) {
puissance = p;
estDemarree = false;
vitesse = 0;
}
//...
}
58
Construire une « Voiture » de 7CV
Création de la Voiture
Déclaration de la variable maVoiture
Création de l’objet avec la valeur 7 en paramètre du constructeur
Voiture maSecVoiture;
// Sous entendu qu’il existe
// explicitement un constructeur :
Voiture(int)
maSecVoiture = new Voiture(); // Erreur
}
}
59
Constructeur sans arguments
Utilité
Lorsque l’on doit créer un objet sans pouvoir décider des valeurs de ses
attributs au moment de la création
Il remplace le constructeur par défaut qui est devenu inutilisable dès qu’un
constructeur (avec paramètres) a été défini dans la classe
public class Voiture {
private int puissance;
private boolean estDemarree;
private double vitesse; public class TestMaVoiture {
public Voiture() { public static void main (String[] argv){
puissance = 4; // Déclaration puis création
estDemaree = false; Voiture maVoiture;
vitesse = 0; maVoiture = new Voiture(7);
} Voiture maSecVoiture;
public Voiture(int p) { maSecVoiture = new Voiture(); // OK
puissance = p; }
estDemaree = false; }
vitesse = 0;
}
//...
}
60
Constructeurs multiples
Intérêts
Possibilité d’initialiser un objet de plusieurs manières
différentes
On parle alors de surchage (overloading)
Le compilateur distingue les constructeurs en fonction
de la position des arguments
du nombre public class Voiture {
//...
du type public Voiture() {
puissance = 4; //...
}
Chaque constructeur possède public Voiture(int p) {
le même nom (le nom de la classe) puissance = p; //...
}
public Voiture(int p, boolean estDemaree) {
//...
}
}
61
Accès aux attributs
Pour accéder aux données d’un objet on utilise une notation
pointée
[Link]
public class TestMaVoiture {
public static void main (String[] argv) {
// Déclaration puis création
Voiture v1 = new Voiture();
Voiture v2 = new Voiture();
// Accès aux attributs en écriture
[Link] = 110;
// Accès aux attributs en lecture
[Link]("Puissance de v1 = " + [Link]);
}
}
[Link](Paramètres)
63
Envoi de messages : appel de méthodes
64
Envoi de messages : passage de
paramètres
Un paramètre d’une méthode peut être
Une variable de type simple
Une référence d’un objet typée par n’importe quelle classe
En Java tout est passé par valeur
Les paramètres effectifs d’une méthode
La valeur de retour d’une méthode (si différente de void)
Les types simples
Leur valeur est recopiée
Leur modification dans la méthode n’entraîne pas celle de l’original
Les objets
Leur modification dans la méthode entraîne celle de l’original!!!
Leur référence est recopiée et non pas les attributs
65
Envoi de messages : passage de
paramètres
Exemple : passage de paramètres
66
L’objet « courant »
L’objet « courant » est désigné par le mot clé this
Permet de désigner l’objet dans lequel on se trouve
Désigne une référence particulière qui est un membre caché
67
L’objet « courant » : attributs et méthodes
Désigne des variables ou méthodes définies dans une classe
69
Codage de l'association : composition
L'objet de classe Voiture peut envoyer des messages à
l'objet de classe Moteur : Solution 1
70
Codage de l'association : composition
L'objet de classe Moteur n'envoie pas de message à l'objet
de classe Voiture : Solution 1
71
Codage de l'association : composition
Il peut être nécessaire que les deux objets en composition
s'échangent des messages : Solution 2
L’objet Voiture « voit » l’objet Moteur
72
Codage de l'association : composition
Il peut être nécessaire que les deux objets en composition
s'échangent des messages : Solution 2
L’objet Moteur « voit » l’objet Voiture
73
Codage de l’association : agrégation
L'objet de classe Galerie n’envoie pas de message à l’objet de
classe Voiture
74
Destruction et ramasse-miettes
La destruction des objets se fait de manière implicite
Le ramasse-miettes ou Garbage Collector se met en route
Automatiquement
Si plus aucune variable ne référence l’objet Préférer définir une méthode et
de l’invoquer avant que tout objet
Si le bloc dans lequel il est défini se termine ne soit plus référencé : detruit()
Si l’objet a été affecté à « null »
Manuellement :
Sur demande explicite par l’instruction « [Link]() »
Un pseudo-destructeur « protected void finalize() » peut
être défini explicitement par le programmeur
Il est appelé juste avant la libération de la mémoire par la machine
virtuelle, mais on ne sait pas quand
Conclusion : pas très sûr!!!!
75
Destruction et ramasse-miettes
public class Voiture {
private boolean estDemarree;
//...
protected void finalize() { Pour être sûr que finalize s'exécute
estDemarree = false; il faut absolument appeler
[Link](« j’arrete le explicitement [Link]()
Moteur"+estdemarre);
}
//...
}
public class TestMaVoiture {
public static void main (String[] argv) {
// Déclaration puis création de maVoiture
Voiture maVoiture = new Voiture();
[Link]();
// maVoiture ne sert plus à rien
maVoiture = null;
// Appel explicite du garbage collector
[Link]();
// Fin du programme
[Link](0);
[Link]("Message non visible");
}
76
}
Gestion des objets
Afficher son type et sa place mémoire : [Link]()
[Link](maVoiture) // Voiture@119c082
77
Surcharge
La surcharge (overloading) n’est pas limitée aux
constructeurs, elle est possible également pour n’importe
quelle méthode.
Possibilité de définir des méthodes possédant le même nom
mais dont les arguments diffèrent.
Quand une méthode surchargée est invoquée le compilateur
sélectionne automatiquement la méthode dont le nombre et
le type des arguments correspondent au nombre et au type
des paramètres passés dans l’appel de la méthode.
81
Encapsulation : visibilité des membres
d’une classe
+ public - private
classe La classe peut être utilisée par Utilisable uniquement par les classes définies
n’importe quelle classe à l’intérieur d’une autre classe.
Une classe privée n’est utilisable que
par sa classe englobante
attribut Attribut accessible partout où Attribut restreint à la classe où est faite la
sa classe est accessible. N’est déclaration
pas recommandé du point de
vue encapsulation
méthode Méthode accessible partout Méthode accessible à
où sa classe est accessible. l’intérieur de la définition de
la classe
82
Encapsulation
Exemple : encapsulation
public class Voiture {
private int puissance;
//... Une méthode privée ne peut plus
public void demarre() { être invoquée en dehors du code
//...
de la classe où elle est définie
}
private void makeCombustion() {
//...
}
}
Longueur
[Link](); // Avec les parenthèses car c'est une méthode
Comparaison
[Link]("Bonjour!"); // Renvoi vrai
Concaténation
String essai = "ess" + "ai";
String essai = "ess".concat("ai"); Faites attention à la comparaison
de chaînes de caractères.
maChaine == "toto";
84 Comparaison sur les références !!
Les Chaînes modifiables « StringBuffer »
Elles sont modifiables par insertion, ajouts, conversions, etc
On obtient une « StringBuffer » avec ses constructeurs
StringBuffer mCM = new StringBuffer(int length);
StringBuffer mCM = new StringBuffer(String str);
85
Les chaînes décomposables :
« StringTokenizer »
Elles permettent la décomposition en mots ou éléments suivant un délimiteur
this is a test => this
is
a
test
Exemple :
import [Link];
public class chaine {
public static void main(String[] args) {
StringTokenizer st =
new StringTokenizer("Bonjour, le monde|de|Java",", |");
while([Link]())
[Link]("Element : " + [Link]());
}
86 }
Variables de classe
Il peut être utile de définir pour une classe des attributs
indépendamment des instances : nombre de Voitures créées
Utilisation des Variables de classe comparables aux « variables
globales »
Usage des variables de classe
Variables dont il n’existe qu’un seul exemplaire associé à sa
classe de définition
Variables existent indépendamment du nombre d’instances de
la classe qui ont été créés
Variables utilisables même si aucune instance de la classe
n’existe
87
Variables de classe
Elles sont définies comme les attributs mais avec le mot-clé
static Attention à l’encapsulation. Il
public static int nbVoitureCreees;
est dangereux de laisser cette
variable de classe en public.
88
Constantes de classe
Usage
Ce sont des constantes liées à une classe
Une constante de classe est
Elles sont écrites en MAJUSCULES généralement toujours visible
Elles sont définies (en plus) avec le mot-clé final
public class Galerie {
public static final int MASSE_MAX = 150;
}
89
Variables et Constantes de classe
Exemple : constantes de classe
public class Voiture {
public static final int PTAC_MAX = 3500;
private int poids;
public static int nbVoitureCreees;
public Voiture(int poids, ...) {
[Link] = poids;
nbVoitureCrees++;
//...
}
}
91
Méthodes de classe
Exemple : méthode de classe
public class Voiture {
private static int nbVoitureCreees;
//...
public static int getNbVoitureCreees(){
return [Link];
}
}
Des méthodes de classe très utiles qui permettent à partir d’une chaîne de
caractères de transformer en type simple ou type object
String maValueChaine = new String("12313");
int maValuePrimitif = [Link](maValueChaine);
95
Varargs : passage de paramètres en
nombre indéfini
Varargs est une nouveauté Java 5 permettant de passer en
paramètre un nombre indéfini de valeurs de même type.
Avant la version Java 5, il fallait passer en paramètre un
tableau d’un type donné pour réaliser la même chose.
96
Varargs : passage de paramètres en
nombre indéfini
Du côté de la méthode où le varargs est défini, les données sont manipulées comme
un tableau
public ajouterPassager(String... tab) {
for (String current : tab) {
[Link](current)
}
}
Du côté client qui fait un appel à la méthode, les données peuvent être envoyées comme
un
Tableau
97
Varargs : passage de paramètres en
nombre indéfini
Comme un varargs est considéré comme un tableau, le
contenu peut être vide
public Voiture(int... carac) { ... }
public static void main(String[] argv) {
new Voiture();
}
98
Varargs : passage de paramètres en
nombre indéfini
Problématiques liées à la surcharge d’une méthode utilisant
un varargs
Dans le cas de la surcharge d’une méthode la méthode
contenant le varargs a la priorité la plus faible
public class Voiture {
public Voiture(int... carac) {
//...
}
public Voiture(int caract1, int caract2) {
//...
}
public static void main(String[] argv) {
new Voiture(12, 23);
new Voiture(12);
}
}
99