Introduction à Java : Concepts Clés
Introduction à Java : Concepts Clés
Présentation de JAVA
[Link]@[Link]
ENSI II1
Vu Pham 397
397
ENSI II1
Vu Pham 398
398
Java c'est quoi ?
ENSI II1
Vu Pham 399
399
Objectifs
La Portabilité
L’élimination de la gestion manuelle de
l’allocation dynamique, les pointeurs et
l’héritage multiple.
Combler les lacunes de sécurité et l’absence de
ramasse-miettes, etc.
ENSI II1
Vu Pham 400
400
Java et la portabilité
ENSI II1
Vu Pham 401
401
Java et la portabilité
ENSI II1
Vu Pham 402
402
Java et la portabilité
Programme source
Programme Java [Link]
Compilateur: javac
compilateur
Programme en bytecode,
indépendant de l'ordinateur Bytecode
[Link]
ENSI II1
Vu Pham 403
403
ENSI II1
Vu Pham 404
404
Structure d’un programme Java
Le mot-clé static précise que la méthode main n’est pas liée à une
instance particulière de la classe.
Le mot-clé public dans public static void main est obligatoire pour
que le programme puisse s’exécuter. Ici, il s’agit d’une convention
qui permet à la machine virtuelle d’accéder à la méthode main.
ENSI II1
Vu Pham 405
405
ENSI II1
Vu Pham 406
406
Structure d’un programme Java
ENSI II1
Vu Pham 407
407
Types élémentaires
En Java, toute variable appartenant à un objet (définie comme
étant un attribut de l'objet) est initialisée avec une valeur par
défaut au moment de la création.
Cette initialisation ne s'applique pas aux variables locales des
méthodes de la classe.
Les valeurs par défaut lors de l'initialisation automatique des
variables d'instances sont :
Type Valeur par défaut
Boolean false
byte, short, int, long 0
float, double 0.0
char \u0000
classe null
ENSI II1
Vu Pham 408
408
Flottants en Java
ENSI II1
Vu Pham 409
409
Flottants en Java
ENSI II1
Vu Pham 410
410
Flottants en Java
ENSI II1
Vu Pham 411
411
Conversion de types
ENSI II1
Vu Pham 412
412
Conversion de types
ENSI II1
Vu Pham 413
413
Conversion de types
ENSI II1
Vu Pham 414
414
Conversion de types
double x;
(int) x;
ENSI II1
Vu Pham 415
415
Chapitre 2
Les classes
[Link]@[Link]
ENSI II1
Vu Pham 416
416
Déclaration de classes
ENSI II1
Vu Pham 417
417
Déclaration de classes
Modificateurs :
Ils s'appliquent aux classes, aux méthodes et aux attributs.
ENSI II1
Vu Pham 418
418
Visibilités en JAVA
Visibilité Rôle
public visible par tous les autres objets.
par
défaut:
visible par toutes les classes se trouvant dans le même package.
package
friendly
visible par les méthodes présentes dans le même package que cette classe
protected ou ses sous-classes pourront y accéder.
On ne peut pas qualifier une classe avec protected.
visible par les méthodes définies dans la classe et prévues à cet effet.
NB: Les méthodes déclarées private ne peuvent pas être en même temps
private
déclarées abstract car elles ne peuvent pas être redéfinies dans les classes
filles.
ENSI II1
Vu Pham 419
419
Mots-clés en JAVA
Mot-clé Signification
static s'applique aux variables d’instances et aux méthodes partagées entre toutes les
instances
final Le mot clé final s'applique aux variables, aux méthodes, aux paramètres d'une
méthode et aux classes.
Il permet de rendre l'entité sur laquelle il s'applique non modifiable une fois
qu'elle est déclarée.
Une fois la variable déclarée final initialisée, il n'est plus possible de modifier sa
valeur.
abstract Le mot clé abstract s'applique aux méthodes et aux classes.
abstract indique que la classe ne pourra être instanciée telle quelle. Toutes les
méthodes abstract de cette classe devront être redéfinies dans ses sous-classes.
Une classe est automatiquement abstraite dès qu'une de ses méthodes est
déclarée abstraite. Il est possible de définir une classe abstraite sans méthodes
abstraites.
ENSI II1
Vu Pham 420
420
Déclaration de classes
421
Construction/destruction d’objets
Point a;
a = new Point(2,3) ;
// crée un objet de type Point et place sa référence dans a
[Link]();
….
a 3
ENSI II1
Vu Pham 422
422
Construction/destruction d’objets
ENSI II1
Vu Pham 423
423
Les constructeurs
L'appel de new pour créer un nouvel objet déclenche, dans l'ordre :
L'allocation mémoire nécessaire au stockage de ce nouvel objet et
l'initialisation par défaut de ces attributs,
L'initialisation explicite des attributs, s'il y a lieu,
L'exécution d'un constructeur.
Un constructeur est une méthode d'initialisation.
ENSI II1
Vu Pham 424
424
Les constructeurs
[Link] Définition d’un
public class Personne Constructeur. Le
{ constructeur par défaut
public String nom; (Personne() )n’existe plus.
public String prenom; Le code précédent occasionnera
public int age; une erreur
public Personne(String unNom,
String unPrenom,
int unAge) public class Application
{ {
nom=unNom; public static void main(String
prenom=unPrenom; args[])
age = unAge; {
} Personne jean = new Personne()
} [Link]("Jean") ;
} }
Va donner une erreur à la compilation
ENSI II1
Vu Pham 425
425
Construction/destruction d’objets
ENSI II1
Vu Pham 426
426
Le mot-clé this
this permet de désigner l’objet courant,
this permet d'accéder aux attributs et méthodes de l’objet
courant.
ENSI II1
Vu Pham 427
427
class Circle {
private double x, y; // coordonnées du centre
private double r; // rayon du cercle
public Circle(double r) {
this.r = r;
}
public Circle(double a, double b, double c) {
x = a; y = b; r = c;
}
}
// soient les instructions suivantes dans la méthode main
par exp :
Circle c1, c2;
c1 = new Circle(2.0, 3.0, 4.0);
c2 = new Circle(2.0);
c1 = c2;
// c2 et c1 pointent vers le même objet
ENSI II1
Vu Pham 428
428
Manipulation des références
ENSI II1
Vu Pham 429
429
ENSI II1
Vu Pham 430
430
Manipulation des références
ENSI II1
Vu Pham 431
431
Tableaux
ENSI II1
Vu Pham 432
432
Tableaux
ENSI II1
Vu Pham 433
433
Tableaux
ENSI II1
Vu Pham 434
434
Tableaux
ENSI II1
Vu Pham 435
435
Tableaux
Java permet de manipuler des tableaux, par le biais d’affectations
de leurs références.
Soit l’exemple suivant :
int [] t1 = new int[3] ;
for (int i=0 ; i<3 ; i++) t1[i] = i ;
int [] t2 = new int[2] ;
for (int i=0 ; i<2 ; i++) t2[i] = 10 + i ;
ENSI II1
Vu Pham 436
436
Méthodes en Java: modificateurs
Il n'est pas possible d'indiquer des valeurs par défaut dans les
paramètres.
ENSI II1
Vu Pham 437
437
ENSI II1
Vu Pham 438
438
Passage de paramètres
Si un objet o transmet sa variable d'instance v en paramètre à
une méthode m, deux situations sont possibles :
si v est une variable primitive alors elle est passée par valeur : il est
impossible de la modifier dans m pour que v en retour contiennent
cette nouvelle valeur.
si v est un objet alors il est passé par référence: m pourra modifier
l'objet en utilisant une méthode de l'objet passé en paramètre.
Lorsqu'un objet est passé en paramètre, ce n'est pas l'objet lui
même qui est passé mais une référence sur l'objet.
La référence est bien transmise par valeur et ne peut pas être
modifiée mais l'objet peut être modifié via un message (appel
d'une méthode).
Pour transmettre des arguments par référence à une méthode, il
faut les encapsuler dans un objet qui prévoit les méthodes
nécessaires pour les mises à jour.
ENSI II1
Vu Pham 439
439
Passage de paramètres
class Util
{ public static void Échange (int a, int b)
{
[Link] ("début Échange : " + a + " " + b) ;
int c ;
c = a ; a = b ; b = c ;
[Link] ("fin Échange : " + a + " " + b) ;
}
}
public class Échange
{ public static void main (String args[])
{
int n = 10, p = 20 ;
[Link] ("avant appel : " + n + " " + p) ;
Util.Échange (n, p) ;
[Link] ("apres appel : " + n + " " + p) ;
}
}
ENSI II1
Vu Pham 440
440
Passage de paramètres
avant appel : 10 20
debut Échange : 10 20
fin Échange : 20 10
apres appel : 10 20
ENSI II1
Vu Pham 441
441
Passage de paramètres
public class Point {
private int x, y; // coordonnées 2D du points
ENSI II1
Vu Pham 442
442
Surcharge de méthodes
ENSI II1
Vu Pham 443
443
Chapitre 3
Classe, héritage et polymorphisme
Classe abstraite et interface
[Link]@[Link]
ENSI II1
Vu Pham 444
444
Plan
Classe, Objet
Héritage & polymorphisme
Principe général
Polymorphisme
Interdire l'héritage
Utilisation de super
Cas particulier des constructeurs
La classe Object (les méthodes toString et equals)
Classes abstraites & interfaces
Méthode abstraite, classe abstraite
Classe abstraite et polymorphisme
Interface
Interface et polymorphisme
Interface et héritage
ENSI II1
Vu Pham 445
445
ENSI II1
Vu Pham 446
446
Constructeur
Un constructeur n’est rien d’autre qu’une méthode, sans
valeur de retour, portant le même nom que la classe
Il existe un constructeur (pseudo-constructeur) par défaut
Exp: Point p = new Point ();
ENSI II1
Vu Pham 447
447
Héritage
Le pseudo-constructeur de
PointCol va être appelé
ENSI II1
Vu Pham 448
448
Type de données (entiers) en Java
ENSI II1
Vu Pham 449
449
Construction et héritage
Le constructeur de la classe
dérivée doit prendre en charge
l’intégralité de la construction
de l’objet
ENSI II1
Vu Pham 450
450
Remarque : this et super dans le même constructeur?
ENSI II1
Vu Pham 451
451
ENSI II1
Vu Pham 452
452
Et si la classe dérivée n’a pas de constructeur ?
453
ENSI II1
Vu Pham 454
454
Redéfinition
Un appel récursif
de la méthode affiche()
La méthode
affiche de la
classe Point
ENSI II1
Vu Pham 455
455
Surdéfinition et héritage
ENSI II1
Vu Pham 456
456
Polymorphisme
L'héritage définit un cast implicite de la classe
fille vers la classe mère :
ENSI II1
Vu Pham 457
457
ENSI II1
Vu Pham 458
458
Exemple
ENSI II1
Vu Pham 459
459
Exemple
Aa;Bb;Cc;Dd;Ee;Ff;
les affectations suivantes sont légales :
a = b ; a = c ; a = d ; a = e ; a =f ;
b=d;b=e;
c=f;
En revanche, celles-ci ne le sont pas :
b = a ; // erreur : A ne descend pas de B
d = c ; // erreur : C ne descend pas de D
c = d ; // erreur : D ne descend pas de C
ENSI II1
Vu Pham 460
460
Exemple
Voici quelques exemples précisant la méthode f
appelée, selon la nature de l’objet effectivement
Aa
a référence un objet de type A : méthode f de A
ENSI II1
Vu Pham 461
461
ENSI II1
Vu Pham 462
462
Surdéfinition et héritage
ENSI II1
Vu Pham 463
463
ENSI II1
Vu Pham 464
464
La super classe Object
Il existe une classe nommée Object dont dérive
implicitement toute classe.
class Point
{ .....
équivaut à
class Point extends Object
{ .....
ENSI II1
Vu Pham 465
465
Polymorphisme et Object
Une variable de type Object peut être utilisée pour
référencer un objet de type quelconque :
Point p = new Point (...) ;
Pointcol pc = new Pointcol (...) ;
Fleur f = new Fleur (...) ;
Object o ;
.....
o = p ; // OK
o = pc ; // OK
o=f;//OK
ENSI II1
Vu Pham 466
466
Pourquoi?
Cette particularité peut être utilisée pour manipuler des
objets dont on ne connaît pas le type exact (au moins à un certain
moment).
Le cas d’une méthode qui se contente de transmettre à une autre
méthode une référence qu’elle a reçue en argument
Si on souhaite appliquer une méthode précise à un objet
référencé par une variable de type Object, il faudra
obligatoirement effectuer une conversion appropriée
(Explicite).
ENSI II1
Vu Pham 467
467
ENSI II1
Vu Pham 468
468
La méthode toString
Elle fournit une chaîne, c’est-à-dire un objet de type
String.
ENSI II1
Vu Pham 469
469
Exemple
public class ToString1
{
public static void main (String args[])
{
Point a = new Point (1, 2) ;
Point b = new Point (5, 6) ;
[Link] ("a = " + [Link]()) ;
[Link] ("b = " + [Link]()) ;
}
}
Affichage:
a = Point@fc17aedf
b = Point@fc1baedf
ENSI II1
Vu Pham 470
470
Méthode toString
La méthode toString d’une classe a la
particularité d’être automatiquement appelée
en cas de besoin d’une conversion implicite en
chaîne.
C’est le cas de l’opérateur + lorsqu’il dispose
d’un argument de type chaîne, ce qui permet
d’écrire par exemple :
[Link] ("a = " + a) ;
et ce, quels que soient le type de la référence o
et celui de l’objet effectivement référencé par o.
ENSI II1
Vu Pham 471
471
La méthode equals
La méthode equals définie dans la classe Object se contente
de comparer les adresses des deux objets concernés. Ainsi,
avec :
ENSI II1
Vu Pham 472
472
La méthode equals
class Point
{ .....
boolean equals (Point p) { return ((p.x==x) && (p.y==y)); }
}
Point a = new Point (1, 2) ;
Point b = new Point (1, 2) ;
l’expression [Link](b) aura bien sûr la valeur true.
En revanche, avec :
Object o1 = new Point (1, 2) ;
Object o2 = new Point (1, 2) ;
l’expression [Link](o2) aura la valeur false car on aura
utilisé la méthode equals de Object et non celle de Point.
ENSI II1
Vu Pham 473
473
ENSI II1
Vu Pham 474
474
Exemple
ENSI II1
Vu Pham 475
475
ENSI II1
Vu Pham 476
476
Exemple
ENSI II1
Vu Pham 477
477
Classe abstraite
Dès qu’une classe comporte une ou plusieurs
méthodes abstraites, elle est abstraite, et ce
même si l’on n’indique pas le mot-clé abstract
devant sa déclaration.
ENSI II1
Vu Pham 478
478
Classe abstraite
ENSI II1
Vu Pham 479
479
Les interfaces
• Définit les en-têtes d’un certain
nombre de méthodes, ainsi que des
constantes.
ENSI II1
Vu Pham 480
480
Les interfaces
Une classe pourra implémenter plusieurs
interfaces (alors qu’une classe ne pouvait
dériver que d’une seule classe abstraite),
ENSI II1
Vu Pham 481
481
Interface et héritage
Java n'autorise pas l'héritage multiple: une des
raisons de cette restriction est la complexité de
l'implémentation pour le compilateur.
ENSI II1
Vu Pham 482
482
Définition d’une interface
le mot-clé interface à la place de class
public interface I
{
ENSI II1
Vu Pham 483
483
public interface I1
{ void f() ;
} Implémenter plusieurs interfaces
public interface I2
{ int h() ;
}
class A implements I1, I2
{ // A doit obligatoirement définir les méthodes f et h prévues dans
I1 et I2
}
ENSI II1
Vu Pham 484
484
Polymorphisme
public interface I { .....}
ENSI II1
Vu Pham 485
485
class A { ..... }
class B extends A implements I
{ // les méthodes f et g doivent soit être déjà définies
dans A,
// soit définies dans B
}
ENSI II1
Vu Pham 486
486
Interface et constantes
interface I
{ void f(int n) ;
void g() ;
static final int MAXI = 100 ;
}
class A implements I
{ // doit définir f et g
// dans toutes les méthodes de A, on a accès à MAXI
:
// par exemple : if (i < MAXI) .....
}
ENSI II1
Vu Pham 487
487
interface I1
{ void f(int n) ;
static final int MAXI = 100 ;
}
interface I2 extends I1
{ void g() ;
static final int MINI = 20 ;
}
ENSI II1
Vu Pham 488
488
Dérivation d’une interface
La définition de I2 est totalement
équivalente à :
interface I2
{ void f(int n) ;
void g() ;
static final int MAXI = 100 ;
static final int MINI = 20 ;
}
ENSI II1
Vu Pham 489
489
Chapitre 4
Les packages et la gestion des exceptions
[Link]@[Link]
ENSI II1
Vu Pham 490
490
Plan
Les packages
Les exceptions
Notion d'exception
Définir sa propre exception
Traitement d'une exception
Principe de propagation d'une exception
Le bloc finally
Exception contrôlée vs exception non contrôlée
ENSI II1
Vu Pham 491
491
Les packages
ENSI II1
Vu Pham 492
492
Package (paquetage)
ENSI II1
Vu Pham 493
493
ENSI II1
Vu Pham 494
494
Utilisation d’une classe d’un paquetage
Pour utiliser une classe appartenant à un
paquetage, il est nécessaire de fournir
l’information correspondante au compilateur.
ENSI II1
Vu Pham 495
495
ENSI II1
Vu Pham 496
496
En important une classe
L’instruction import permet de citer le nom
(complet) d’une ou plusieurs classes:
import [Link], [Link] ;
ENSI II1
Vu Pham 497
497
En important un paquetage
La démarche précédente s’avère elle aussi fastidieuse
dès qu’un certain nombre de classes d’un même
paquetage sont concernées.
Pour utiliser toutes les classes du paquetage
MesClasses :
import MesClasses.* ;
Précautions
L’instruction : import MesClasses ;
ne concerne que les classes du paquetage
MesClasses.
Si, par exemple, il y a paquetage nommé
MesClasses.Projet1, ses classes ne seront nullement
concernées
ENSI II1
Vu Pham 498
498
Les paquetages standards
Les nombreuses classes standard avec
lesquelles Java est fourni sont structurées en
paquetages.
ENSI II1
Vu Pham 499
499