Vous êtes sur la page 1sur 94

NOTIONS DE BASE DU

LANGAGE JAVA
(PARTIE 1)
Plan
2

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Petit historique du langage Java
3

 On peut faire remonter la naissance de Java à 1991.


 Java fondé sur le concept de machine virtuelle
 Traduire un programme source, non pas directement en langage machine, mais
dans un pseudo langage universel
 Ce code intermédiaire (formé de byte codes), se trouve ainsi compact et
portable sur n‟importe quelle machine

 Une de ses plus grandes forces est son excellente portabilité : une fois votre
programme créé, il fonctionnera automatiquement sous Windows, Mac, Linux,
Cours POO/JAVA

etc.

 On peut faire de nombreuses sortes de programmes avec Java :


- des applications, sous forme de fenêtre ou de console ;
- des applets, qui sont des programmes Java incorporés à des pages web ;
Dorra ZAIBI

- des applications pour appareils mobiles, avec J2ME , android;


- et bien d'autres ! J2EE, JMF, J3D pour la 3D...
Langage java
4

 C‟est un langage orienté objet

 Il est compilé en bytecode


Le bytecode est un code intermédiaire indépendant de la machine
Cours POO/JAVA

 Il est interprété
Le bytecode est interpété par une machine virtuelle Java
Dorra ZAIBI
Premier exemple : HelloWord
5

Dans un fichier de nom HelloWorld.java


public class HelloWorld {
/* Un style de commentaire
sur plusieurs lignes. */
public static void main(String[] args) {
// Un commentaire sur une seule ligne
System.out.println("Bonjour à vous les IR1!");
Cours POO/JAVA

}
}
NB: toute classe publique doit être dans un fichier qui a le même nom
que la classe
Ce fichier définit une classe, qui est une unité de compilation, étant donné
Dorra ZAIBI

qu‟il y a une méthode main, cette classe est « exécutable »


Compilation et Exécution
6
(Java Virtual Machine)
Cours POO/JAVA
Dorra ZAIBI
Le bytecode
7

 Le code source d'une classe contenue dans un fichier est


compilé avec la commande javac

 Cela produit un code intermédiaire(extension.class), appelé


bytecode, qui est le langage machine de la machine virtuelle
Java

 Le bytecode d'une classe est destiné à être chargé par une


Cours POO/JAVA

machine virtuelle qui doit l'exécuter avec la commande java

 Ce bytecode peut être exécuté sous de nombreux systèmes


d‟exploitation par une machine virtuelle Java.
Dorra ZAIBI
Machine Virtuelle Java (JVM)
8

 La machine virtuelle Java ou JVM (Java Virtual Machine) est un


environnement d'exécution pour applications Java.

 Elle exécute des programmes compilés.

 C'est un des éléments les plus importants de la plate-forme Java.

 Elle assure l'indépendance du matériel et du système d'exploitation


Cours POO/JAVA

lors de l'exécution des applications Java.

 Une application Java ne s'exécute pas directement dans le système


d'exploitation mais dans une machine virtuelle qui s'exécute dans le
système d'exploitation et propose une couche d'abstraction entre
l'application Java et ce système.
Dorra ZAIBI
Java : langage et plateforme
9

Il existe plusieurs éditions, selon la plateforme java considérée:

 Java SE (Java Platform, Standard Edition): Java SE pour applications


classiques, desktop

 Java EE (Java Platform, Enterprise Edition): Java EE pour développer


et déployer des applications serveur, Web services, etc.
Cours POO/JAVA

 Java ME (Java Platform, Micro Edition): J2ME pour les applications


embarquées, PDA, téléphones, etc.
Dorra ZAIBI
Plateforme Java
10

La plateforme java utilise un ensemble de bibliothèques, de


programmes et d‟outils. Cet ensemble contient :

 Le kit de développement Java (JDK)


 L‟environnement d‟exécution (JRE)
 La machine virtuelle java (JVM)
Cours POO/JAVA
Dorra ZAIBI
JDK / JVM / JRE
11

 JDK (Java Developpement Kit) = un ensemble d‟outils et


programmes pour développer, compiler, déboguer et exécuter
un programme en java. Il contient également un environnement
d‟exécution de java (JRE)

 JVM (Java Virtual Machine) = un programme qui permet


d‟interpréter le programme java crée avec le JDK
Cours POO/JAVA

 JRE (Java Runtime Execution) = un ensemble d‟outils et de


programmes nécessaires pour exécuter un programme java (déjà
compilé)
Dorra ZAIBI
Installation Java
12

 Installer JDK (exemple: JDK 8).


 Plateforme Java (exemple: Eclipse indigo SE).
 Vérification de l‟installation Java (java -version).

NB: Chaque fois que le développeur télécharge un JDK, celui-ci inclut un


JRE compatible avec la version, et ce JRE comprend lui-même un JVM
par défaut.
Cours POO/JAVA
Dorra ZAIBI
Compilation et exécution
13

Compilation (commande javac) => Fichier.class


Exécution (commande java) => package.Fichier
Cours POO/JAVA
Dorra ZAIBI
Langage java
14

Les variables, les opérateurs, les expressions, instructions, blocs,


contrôle de flot sont très proches de ceux du C

Les exceptions sont une nouveauté

Les types primitifs ont une taille et une représentation normée

Il y a des spécificités syntaxiques liées à la programmation objets,


Cours POO/JAVA

aux classes, à l'héritage...

Un style de nommage (très fortement) conseillé


 Première majuscule pour les classes (class HelloWorld)
Première minuscule pour les variables et les méthodes (nom,
Dorra ZAIBI

getNom())
 Tout en majuscule pour les constantes (MAX_SIZE)
Plan
15

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Les variables en Java
16

Les variables locales comme les champs des classes et des objets ne peuvent être
que de deux natures:

 De type « primitif »
La déclaration de la variable réserve la place mémoire pour stocker sa valeur (qui
dépend de son type)
Exemple: int entier; long entierLong;
Cours POO/JAVA

 De type « référence » comprennent deux sous-catégories


1) Le type tableau qui est un type prédéfini;
2) Les types des objets. Ils pourront être prédéfinis (ex: String) ou définis
par le programmeur. La déclaration de la variable de type «objet»
ne fait que réserver la place d'une référence (une sorte de pointeur) qui
permettra d‟accéder à l‟endroit en mémoire où est effectivement stocké l'objet
Dorra ZAIBI

en lui même (vaut null si référence inconnue)


Exemple:
Pixel p1; p1=new Pixel(1,3);
Type primitif
17

Types entiers signés


 byte (octet) sur 8 bits

 short sur 16 bits

 int sur 32 bits

 long sur 64 bits

Type caractère non signé


 char sur 16 bits
Cours POO/JAVA

Types à virgule flottante


 float sur 32 bits

 double sur 64 bits


Dorra ZAIBI

Type booléen: boolean (true ou false)


18
Dorra ZAIBI Cours POO/JAVA

Types fondamentaux
Valeur constante
19

Une constante est une variable finale, c‟est-`a-dire une variable non
modifiable.

Pour signaler qu'une variable est une constante, on utilise le mot


réservé final lors de sa déclaration :

final int VAL = 6;


Cours POO/JAVA

Le compilateur indique donc qu‟on ne peut pas donner une valeur à


une constante.
Dorra ZAIBI

Message d‟erreur: « cannot assign a value »


Valeur littérale
20

Un littéral est une valeur explicite utilisée dans le


code source d'un programme .

On peut représenter les entiers simplement en donnant leur


valeur sous forme décimale, binaire, octale ou hexadécimale.

Les littéraux de type numériques


Cours POO/JAVA

Les littéraux sont par défaut de type int. Un littéral peut être rendu de
type long en le suffixant avec l ou L.
Exemple:
 12345 est de type int
Dorra ZAIBI

 12345L est de type long


Valeur littérale
21

Pour les valeurs numériques, voici une récapitulation des règles


appliquées :
Cours POO/JAVA

On remarque que les modificateurs d et f peuvent s‟appliquer aux


entiers et les faire considérer comme des doubles ou des floats (un
entier est un cas particulier de réel)
Exemple
Dorra ZAIBI
Conversion des types
22

Java est très strict du point de vue des données et il est parfois
intéressant de convertir une donnée d'un type primitif vers un autre
type primitif.
Cours POO/JAVA
Dorra ZAIBI
Conversion implicite /
23
Compatibilité des types
Types numériques
Il est toujours possible de placer un entier de “petite taille” dans un
entier plus grand (par exemple un entier de type int dans une variable
de type long).

De façon générale, il est impossible de faire des affectations dans


l‟autre sens, comme par exemple placer le contenu d‟une variable de
Cours POO/JAVA

type int dans une variable de type byte.

Les types numériques sont donc rangés dans l‟ordre suivant : byte <
short < int < long < float < double
Dorra ZAIBI
Conversion implicite /
24
Compatibilité des types
Cas 1 => Correct

Cas 2 => Erreur de compilation


Cours POO/JAVA

Maintenant, si on avait le contraire, c'est-à-dire une conversion par


affectation du type float vers le type int. Dans ce cas, on aurait eu une
Dorra ZAIBI

erreur de compilation puisque cette conversion est avec perte


d'information.
Conversion implicite /
25
Compatibilité des types
Le type boolean est compatible seulement avec lui-même.
Cela signifie qu‟il est strictement impossible de placer une
valeur de type boolean dans une variable d‟un type autre
que boolean.
Cours POO/JAVA

=> erreur
Dorra ZAIBI
Conversion explicite / implicite
26

 La conversion est réalisé via l‟un des 2 mécanismes: conversion implicite ou


conversion explicite.

 Les conversions qu'on vient de voir se font de manière implicite,


automatiquement.

 Conversion implicite: Les conversions automatiques sont seulement possibles


lorsque le compilateur sait que la variable destination est assez grande.
Exemple:
pour réaliser l‟addition, les deux opérandes doivent avoir le même format.
Cours POO/JAVA

x = 3 + 2.5;

 Conversion explicite: le programmeur indique explicitement la conversion qu‟il


souhaite réaliser.
Exemple: conversion de 2.5 vers int. En mémoire x = 5.
x = 3 + (int) 2.5;
Dorra ZAIBI
27
Dorra ZAIBI Cours POO/JAVA

Exemple
Compatibilité des types
28

 On peut placer une valeur de type char dans une variable de type int (et
donc dans une variable d‟un type “plus grand” que int).
 Le type char est compatible avec tous les types numériques (int, double,
etc.);
 Pour les types primitifs (char), on parle de conversion implicite
char < int
Conversions explicites entre types numériques et char:
Cours POO/JAVA

Exemple : (char) 97 ⇒ ‟a‟


(int) ‟+‟ ⇒ 43
char a = „a‟;
a = (char) (a+1);
 Cependant, il est impossible de placer une valeur entière classique dans un
Dorra ZAIBI

char car les autres types entiers peuvent prendre des valeurs négatives.
Compatibilité des types
29

On peut se servir des caractères comme entiers :

Exemple:
int trois = 3;
char un = ‟1‟;
char quatre = (char) (trois + un);
Cours POO/JAVA

 quatre : ‟4‟.
 un a été converti à int dans l‟expression
Dorra ZAIBI

 Puis conversion en char avant l‟assignation.


Exemple
30
Plan
31

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Opérateur logique
32

 La valeur de vérité d‟une expression logique est vrai ou


faux. Une telle valeur est de type booléen (boolean).

 Pour former des expressions logiques, on dispose


d‟opérateurs de comparaison.
Cours POO/JAVA

 Les principaux opérateurs sont les suivants


Dorra ZAIBI
Opérateur arithmétique
33

Les opérateurs arithmétiques


Cours POO/JAVA
Dorra ZAIBI
Opérateurs d'incrémentation et
34
de décrémentation
 L'opération d'incrémentation ( ++ ) est un opérateur
unaire qui ne peut être appliqué qu'à des variables. Il va
modifier la valeur de la variable sur laquelle il est
appliqué, en lui ajoutant 1.

 Il y a également un opérateur de décrémentation ( -- )


Cours POO/JAVA

qui fonctionne comme l'opérateur d'incrémentation, sauf


que son effet de bord consiste à retirer 1 de la variable
sur laquelle il est appliqué.
Dorra ZAIBI
Opérateurs d'incrémentation et
35
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
 la forme suffixe de l'opérateur; celui-ci étant placé après la variable.
 la forme préfixe, c'est-à-dire qu'on les place avant la variable.
Cours POO/JAVA
Dorra ZAIBI
Opérateurs d'incrémentation et
36
de décrémentation
Les deux opérateurs (++ et --) existent sous deux formes.
 la forme suffixe de l'opérateur; celui-ci étant placé après la variable.
 la forme préfixe, c'est-à-dire qu'on les place avant la variable.
Cours POO/JAVA
Dorra ZAIBI
Plan
37

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Structure de contrôle
38

Il existe trois catégories :

 les instructions conditionnelles (if-else , switch);

 les instructions répétitives (while, do et for);


Cours POO/JAVA

 les instructions de branchement: permettent de faire un saut depuis


un point précis du programme vers un autre endroit (Il y
a break, continue qui sont utilisés avec les boucles et
également return)
Dorra ZAIBI
Structure conditionnelle:
39
Syntaxe if
La condition est une expression booléenne et elle est dite
vérifiée si sa valeur est true
Cours POO/JAVA
Dorra ZAIBI
40
Dorra ZAIBI Cours POO/JAVA

Syntaxe if - else
41
Dorra ZAIBI Cours POO/JAVA

Syntaxe switch
Opérateur conditionnel (plus court)
42

L‟instruction if-else correspondante calcule exactement la


même chose :
Cours POO/JAVA
Dorra ZAIBI
Instruction répétitive: While
43

L'instruction while permet de répéter une instruction ou un bloc de


code tant qu'une condition est vraie.

La condition est une expression booléenne, comme pour


l'instruction if-else.
Cours POO/JAVA
Dorra ZAIBI
Instruction répétitive: While
44

Boucle infinie
Lorsqu'on utilise des boucles, il faut faire très attention aux boucles
infinies.

Comme le nom le suggère, il s'agit de boucles dont le corps est


exécuté un nombre infini de fois. La condition est toujours vérifiée
et la boucle ne s'arrête donc jamais de s'exécuter.
Cours POO/JAVA
Dorra ZAIBI
Syntaxe do - while
45

L'instruction do -while est similaire à l'instruction while sauf pour ce qui


est de l'ordre dans lequel les choses sont exécutées.

Le corps de la boucle est d'abord exécuté, puis la condition est


évaluée.
Cours POO/JAVA

Le corps de la boucle sera exécuté au moins une fois dans tous les
cas.
Dorra ZAIBI
46
Dorra ZAIBI Cours POO/JAVA

Syntaxe for
Instruction continue
47

L'instruction continue, utilisable uniquement dans les boucles, permet


d'arrêter l'exécution de l'itération en cours et de passer directement à la
suivante.

Dans le cas des boucles while et do, on revient directement à la


vérification de la condition
Cours POO/JAVA
Dorra ZAIBI
Instruction continue
48

L'instruction continue, utilisable uniquement dans les boucles, permet


d'arrêter l'exécution de l'itération en cours et de passer directement à la
suivante.

Dans le cas des boucles while et do, on revient directement à la


vérification de la condition
Cours POO/JAVA
Dorra ZAIBI
Instruction break
49

L'instruction break a en fait pour effet de directement quitter


le switch ou la boucle et de poursuivre le programme à l'instruction
suivante.

Voici un exemple de programme qui affiche les entiers de 1 à 5 et qui


utilise l'instruction break
Cours POO/JAVA
Dorra ZAIBI
Plan
50

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de


caractères, passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Affichage
51

L‟affichage d‟une valeur (System.out.println) est


relativement simple, comme le montre l‟exemple suivant :
Cours POO/JAVA
Dorra ZAIBI
Affichage
52

System.out.print(expression);
Cette méthode permet d‟afficher la valeur de l‟expression entre
parenthèses sans passer à la ligne après cet affichage.

System.out.println(expression);
Cette méthode passe au contraire à la ligne après l‟affichage.
Cours POO/JAVA
Dorra ZAIBI
Saisie
53

Pour que Java puisse lire ce que vous tapez au clavier, vous allez
devoir utiliser un objet de type Scanner.

Nous allons utiliser l'entrée standard System.in.

Exemple:
import java.util.Scanner;
Cours POO/JAVA

Scanner sc = new Scanner(System.in);


Dorra ZAIBI
Saisie
54

Nous présentons certaines méthodes les plus utiles pour lire différents types
de données à partir du périphérique d'entrée par défaut (récupérer le type de
variable primitif adéquat):

nextInt ()
nextByte ()
nextShort ()
nextLong ()
nextFloat ()
Cours POO/JAVA

nextDouble ()

Exemple:
Scanner scanner = new Scanner( System.in ) )
System.out.print( "Veuillez saisir un premier entier : " );
Dorra ZAIBI

int a = scanner.nextInt();
Saisie
55

 La méthode nextLine () permet de lire une ligne de texte jusqu'au


prochain retour à la ligne (récupère une chaîne de caractère)
Cours POO/JAVA
Dorra ZAIBI
Saisie
56

Remarque:
La classe Scanner ne contient pas de méthode nextChar(). Pour
extraire un seul caractère du clavier, vous pouvez utiliser la
méthode nextLine(), puis la méthode charAt().

Exemple
System.out.println("Saisissez une lettre :");
Cours POO/JAVA

Scanner sc = new Scanner(System.in);


String str = sc.nextLine();
char carac = str.charAt(0);
System.out.println("Vous avez saisi le caractère : " + carac);
Dorra ZAIBI
Tableau
57

La création d‟un tableau peut être faite comme suit :

1) Déclaration d'une variable de tableau avec définition explicite de taille :


 Déclaration de type
int tableau_entiers [] ; // déclaration équivalente à int [] tableau_entiers ;
// tableau_entiers est une variable de type référence vers un tableau contenant
des éléments de type int.
Cours POO/JAVA

 Allocation mémoire, via „ new ‟


tableau_entiers = new int[5] ;
L‟opérateur new renvoie une référence vers un tableau
(une référence est un identifiant unique d‟une structure de données)
Dorra ZAIBI

NB: Pour les tableaux, la valeur spéciale null représente un tableau sans
aucune valeur (0 pour chaque élément) .
Exemple de déclaration d‟un tableau
58
Cours POO/JAVA
Dorra ZAIBI
Tableau
59

2) Déclaration et initialisation d'un tableau avec définition implicite


de taille :

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

Exemple:
Cours POO/JAVA

int tableau_initialise[] = { 12, 34, 786 };

Dans cette éventualité, Java crée le tableau, calcule sa taille et l'initialise


avec les valeurs fournies.
Dorra ZAIBI
Tableau
60

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

double tableauDouble [] = {0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};

char tableauCaractere [] = {'a','b','c','d','e','f','g'}; // initialisation du


caractère
Cours POO/JAVA

String tableauChaine [] = {"chaine1", "chaine2", "chaine3" , "chaine4"}; //


initialisation du String
Dorra ZAIBI
Tableau
61

Variable locale constante


Un objet ou un tableau « final » peut avoir ses
champs ou ses éléments modifiés
Cours POO/JAVA
Dorra ZAIBI
Tableau multidimensionnel
62

Tableaux multidimensionnels crées comme

double matrice[][] = new double[4][4];

Ce qui revient à
Cours POO/JAVA

 double matrice[][] = new double[4][];


 matrice[0] = new double[4];
 matrice[1] = new double[4];
 matrice[2] = new double[4];
Dorra ZAIBI

 matrice[3] = new double[4];


Tableau multidimensionnel
63

Initialisation par défaut de tous les éléments.

Des expressions sont permises dans les initialisations de tableaux.

double m[][] = {
{ 0*0, 1*0, 2*0 },
Cours POO/JAVA

{ 0*1, 1*1, 2*1 },


{ 0*2, 1*2, 2*2 }
};
Dorra ZAIBI
Tableau multidimensionnel
64

Voici une manière imagée de visualiser une matrice à n+1 lignes et à p+1
colonnes

Int [][] table = new int [n+1][p+1];


Cours POO/JAVA
Dorra ZAIBI
Opérations sur le tableau
65

 On dispose d'une classe utilitaire, Arrays, dans le package java.util, qui nous
propose des méthodes permettant de manipuler les tableaux.

 Egalement, la classe Arrays offre des méthodes de classe pour


la recherche et le tri d'éléments d'un tableau.

Parmi ces méthodes nous citons:


Cours POO/JAVA

 La méthode equals compare deux tableaux renvoie un booléen true s'ils ont
même longueur et contenu,
 La méthode binarySearch effectue la recherche binaire d'une valeur dans un
tableau,
 La méthode fill remplit un tableau avec la valeur donnée,
Dorra ZAIBI

 La méthode sort trie un tableau dans l'ordre croissant de ses éléments.


Opérations sur le tableau
66

Il existe un attribut général de la classe des tableaux, qui contient la


taille d'un tableau quelque soit son type, c'est l'attribut length.

Exemple :
int [ ] table1 = {17,-9,4,3,57};
int taille;
taille = table1.length; // taille = 5

NB:
Cours POO/JAVA

1) Avec les tableaux, c'est la propriété .length, (array.length)


 Si tu essaies la méthode .length(), ça ne compilera pas.

2) Avec les String, c'est la méthode .length(), (string.length())


Dorra ZAIBI

 Si tu essaies la propriété .length, ça ne compilera pas.


Exemple
67

public class Test {


public static void main(String[] args)
{
// Here array is the array name of int type
int[] array = new int[4];
System.out.println("The size of the array is " + array.length);
Cours POO/JAVA

// Here str is a string object


String str = “TestExample";
System.out.println("The size of the String is " + str.length());

// Here str is an array


Dorra ZAIBI

String[] str = {"Hello", "Every", "Person" };


System.out.println(str[0].length());
}
Utilisation d'un tableau comme
un Object
68

int [] tab1 = {0, 1, 2, 3, 4} ;


int [] tab2 = {0, 1, 2, 3, 4} ;

 La méthode toString() de tab1 nous retourne l'indigeste chaîne de


caractères suivante :
Exemple: tab1.toString() -> [I@18d107f

 La comparaison de ces deux tableaux par la méthode equals()


nous retourne un désespérant :
Exemple: tab1.equals(tab2) -> false
Copie de tableaux
69

 La copie d'un tableau dans l'autre peut toujours se faire par itération
sur les éléments du premier tableau, et recopie dans le second. La
méthode à invoquer est System.arraycopy, dont voici la signature.

public static void arraycopy(Object src, int src_pos, Object dest, int
dest_pos, int length)
Remarque:
1) Si un dépassement de capacité a lieu, une exception est générée.
2) Rappelons qu'une fois un tableau créé, il n'est plus possible d'en
changer la taille. L'utilisation de System.arraycopy ne déroge pas à
cette règle.
Accès à un tableau
70

Accès à un élément avec tab[indice]

Exemple : tab[i] = tab[j] * 2;

Attention : les éléments sont indexés à partir de 0


⇒ un tableau possède les éléments allant de 0 à tab.length - 1
Cours POO/JAVA

Un accès en dehors des bornes du tableau provoque une erreur à


l‟exécution (ArrayOutOfBoundsException)
Dorra ZAIBI
Exemple d‟accès à un tableau
71
Cours POO/JAVA
Dorra ZAIBI
Exemple de référencement
72
Cours POO/JAVA
Dorra ZAIBI
Chaîne de caractères
73

Comme pour les tableaux, il n‟existe pas de variable de type String en


Java !

La classe String est une classe fondamentale du langage Java,


puisque c'est elle qui permet de gérer les chaînes de caractères.

Elle déclare une variable référençant une zone mémoire typée avec le
Cours POO/JAVA

type String

Exemple : String s1 = "Coucou"; String s2 = s1;


Dorra ZAIBI
Chaîne de caractères
74

Construction d'un objet String de deux façons


String s1 = "Coucou"; // création implicite
String s2 = new String("Bonjour le monde !") ; //création explicite

Concaténation de deux String


 1ère méthode
Cours POO/JAVA

String s1 = "Bonjour" ;
String s2 = “à tous!" ;
String s3 = s1 + " " + s2 ;
 2ème méthode
=> à l'aide de la méthode concat : String concat(String)
Dorra ZAIBI
Chaîne de caractères
75

D‟autre opérations

Longueur
 int length(): La méthode length() renvoie la longueur ( nombre de
caractères) de la chaîne.

Comparaison
 int compareTo(String anotherString): Compare une chaîne de
Cours POO/JAVA

caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0.

 boolean equals(Object anObject): Compare la chaîne a un objet et


retourne true en cas d‟égalité et false sinon
Dorra ZAIBI

 boolean startsWith(String), endsWith(): renvoient true si la chaîne


commence ou se termine par la chaîne passée en paramètre
Chaîne de caractères
76

Caractère et sous-chaînes
 char charAt(int): Retourne le caractère à l‟indice spécifié en paramètre.
 String substring(int): Sous-chaîne depuis l‟indice jusqu‟à la fin.

Conversions
 String toLowerCase(): Retourne une chaîne égale à la chaîne convertie
en minuscules.
String toUpperCase(): Retourne une chaîne égale à la chaîne
Cours POO/JAVA


convertie en majuscules.

Recherche:
 int indexOf(int): Retourne l‟indice de la première occurrence du
caractère.
Dorra ZAIBI
Conversions vers les types primitifs
77

 Les classes Byte, Short, Integer et Long possèdent une


méthode X.parseX(String) qui permet de convertir une chaîne de caractères
en un entier en Byte, Short, Interger …

Exemple :
int s = Integer.parseInt("111"); // returns 111
int s = Integer.parseInt("-121"); // returns -121
Cours POO/JAVA

 Les classes Float et Double possèdent une méthode X.parseX(String) qui


permet de convertir une chaîne de caractères en un flottant.

NB: Si cette conversion n'est pas possible, une exception est levée:
NumberFormatException
Dorra ZAIBI
Les Chaînes modifiables « StringBuffer »
78

 Elles sont modifiables par insertion, ajouts, conversions, …

 On obtient une « StringBuffer » avec ses constructeurs


StringBuffer mCM = new StringBuffer(int length);
StringBuffer mCM = new StringBuffer(String str);

 On peut les transformer en chaînes normales String


String s = mCM.toString(); => la méthode toString() renvoie le nom de
la classe de l'objet concerné suivi de l'adresse de cet objet

 On peut leur ajouter n‟importe (surcharge) quoi


mCM.append(...); // String, int, long, float, double, boolean, char
Exemple: append()
79

StringBuffer sbf = new StringBuffer("Bonjour - ");


System.out.println("string buffer = " + sbf);

String strvalue = " à tous";

// Here it appends the Object value


sbf.append(strvalue);

System.out.println("After appending result is = " + sbf);


}

 Resultat:
string buffer = Bonjour
After appending result is = Bonjour - à tous
Passage de paramètres
80

Lors des appels de méthode, les arguments sont toujours passés par
valeur

 Dans le cas des types primitifs, c'est la valeur de l'argument qui est
recopiée dans le paramètre de la méthode
Cours POO/JAVA

 Dans le cas des types « objet », c'est la valeur de la variable,


(la référence à l'objet) qui est transmise à la méthode
Dorra ZAIBI
Passage de paramètre:
Type primitif
81

Dans le cas des types primitifs, c'est la valeur de l'argument qui est
recopiée dans le paramètre de la méthode

Les modifications sur le paramètre de la méthode sont


sans effet sur l'argument.
Cours POO/JAVA
Dorra ZAIBI
Passage de paramètre:
Type référence
82

 Dans le cas des types « objet », c'est la valeur de la variable, (la


référence à l'objet) qui est transmise à la méthode.

 Les modifications effectuées en suivant cette référence


(e.g. modification d'un champ de l'objet) sont répercutés dans la mé
moire et sont donc visibles sur l'argument.
Cours POO/JAVA
Dorra ZAIBI
Type référence et valeur nulle
83

Par défaut, une référence vaut une valeur particulière,


nulle
Cours POO/JAVA
Dorra ZAIBI
Allocation mémoire
84

Pour qu'une variable objet prenne une autre valeur que null, il faut être
capable d'y affecter une référence.

 Elle peut être retournée par l'opérateur d'allocation new.


 Cet opérateur a besoin de connaître la taille de l'objet qu'il doit
réserver en mémoire.
new Box(); // j'ai besoin de stocker 1 int (field)
Cours POO/JAVA

new int[10]; // stocker 10 int + la taille du tableau

La zone mémoire allouée doit être initialisée (affectation des valeurs)


new Pixel(1,3); // utilise un « constructeur »
Dorra ZAIBI

 Ce que retourne l'opérateur new est la référence qui permet


d'accéder à l'objet alloué en mémoire
Désallocation mémoire
85

La désallocation mémoire n‟est pas gérée par le


programmeur, mais par un Garbage Collector (GC).

En fait, la restitution de la mémoire inutilisée est prise en charge


automatiquement par le récupérateur de mémoire (garbage collector).
Ce GC aussi appelé ramasse-miettes.

Il n'existe pas d'instruction delete comme en C++.


Cours POO/JAVA

En Java, les destructeurs appelés finaliseurs (finalizers), sont


automatiquement invoqués par le garbage collector.

Pour créer un finaliseur, il faut redéfinir la méthode finalize() héritée de


Dorra ZAIBI

la classe Object.
Désallocation mémoire
86

Les objets qui ne sont plus référencés peuvent être « récupérés » par
le GC, pour « recycler » l'espace mémoire qu'ils occupent.

Un même objet peut être référencé par plusieurs variables.

Il faut qu'aucune variable ne référence plus un objet pour qu'il soit


réclamé.
Cours POO/JAVA

Les variables cessent de référencer un objet


 Quand on leur affecte une autre valeur, ou null
 Quand on quitte le bloc où elles ont été définies: elles meurent et
Dorra ZAIBI

disparaissent...
Plan
87

 Introduction

 Variable, valeur constante, conversion en Java

 Opérateurs

 Structure de contrôle

 Manipulation des types primitifs, les tableaux, les chaînes de caractères,


passage des paramètres

 Notion d‟objets et de classes

 Héritage

 Interface

 Polymorphisme

 Paquetage
Structure d‟une classe
88

Une classe est définie par son nom et son package d'appartenance
(e.g.: java.lang.String)

En l'absence de directive, les classes sont dans un package dit « par


défaut » (i.e., pas de package).

Une classe peut contenir trois sortes de membres


Des champs ou attributs
Cours POO/JAVA

 Des méthodes et constructeurs


 Des classes internes

 Les membres statiques (static) sont dits membres de classe.


Dorra ZAIBI

Ils sont définis sur la classe et non sur les objets

 Les membres non statiques (ou membres d‟instance) ne


peuvent sans un objet
Structure d‟une classe
89

La syntaxe de déclaration d'une classe est la suivante :

Modificateurs class nom_de_classe [extends classe_mere]


[implements interfaces] { ... }
Cours POO/JAVA
Dorra ZAIBI
90
Dorra ZAIBI Cours POO/JAVA

Exemple
Initialisation et valeur par défaut
91

Les champs possèdent une valeur par défaut qui


leur est affectée lors de la création d'un objet

 0 pour les types numériques primitifs


 false pour les booléens
 null pour les types référence
Cours POO/JAVA

Tandis que les variables locales doivent nécessairement être initialisées


avant d'être utilisées

Les attributs peuvent être initialisés :


– Lors de la déclaration
Dorra ZAIBI

– Dans le constructeur
Champ constant
92

Comme pour les variables locales, il est possible de déclarer


un champ avec le modificateur final.

Cela signifie qu'il doit avoir une affectation unique.

Le compilateur vérifie que il a bien été initialisé, et ce quelque soit le


constructeur mais également qu‟il n'a été affecté qu'une seule fois.
Cours POO/JAVA
Dorra ZAIBI
93
Dorra ZAIBI Cours POO/JAVA

Champ constant
Exemple: déclaration d‟un
94
attribut
Cours POO/JAVA
Dorra ZAIBI