Vous êtes sur la page 1sur 29

Informatique / Programmation

Programmation oriente objet avec Java


01 : Introduction / lments de base

Java / Introduction

Bref historique du langage Java


Le langage Java a t conu au sein de l'entreprise Sun
Microsystems (par une quipe dirige par James Gosling).

Complment

Initialement baptis Oak (chne), il a t officiellement lanc en


1995 sous le nom Java
Java est synonyme de "caf" en argot amricain

Le langage a t popularis par :

Sa portabilit (indpendance des plates-formes)


Le slogan "Write Once Run Anywhere"
Une syntaxe de base trs proche de C/C++
Une orientation Web native
Des lments de scurit intgrs
La gratuit de son kit de dveloppement (JDK)
Son adoption dans la formation (coles, universits)
Son nom ?
2

Java / Introduction

Caractristiques principales
Orientation Objet

(C++) --

Complment

Scurit intgre
Portabilit
Robustesse (typage fort, gestion de la mmoire, ...)
Richesse des librairies de classes (plate-forme Java)
Multitche intgr au langage (Multithreading)
Bonne intgration des communications rseau (Sockets, RMI, )
volutivit (SDK 1.0, 1.1, 1.2, 1.3, 1.4, 5.0, 6.0, 7.0, 8.0, )
Java JavaScript
C# est fortement inspir de Java
3

Java / Introduction

Mode de dploiement [1]

Complment

Application

Se comporte comme une application native


Lancement par une ligne de commande (lanceur natif)
Ncessite la disponibilit d'une machine virtuelle Java (JVM, JRE)
Peut accder (par dfaut) aux ressources locales
(fichiers, rseau, priphriques, ...)

Applet
Lancement intgr dans des pages HTML
S'excute l'intrieur du navigateur (IE, Firefox, ...)
Utilise la machine virtuelle Java du navigateur
(attention aux versions de la machine virtuelle)
Ne peut pas accder (par dfaut) aux ressources locales
(notion de Sandbox) Scurit
Pratiquement plus utilis (remplac par Flash, HTML5, )

Java / Introduction

Modes de dploiement [2]


Applet
Navigateur

Complment

Applet

JVM

Page HTML
Machine cible

Java Web Start


Application dploye et mise jour par le Web
Mise en mmoire cache locale (lancement plus rapide)
L'application peut tre lance depuis une page HTML
ou comme une application locale
Technologie destine remplacer les Applets (mais assez peu utilise)

Java / Introduction

Diffrences par rapport C/C++

Complment

Syntaxe simplifie (limination des redondances C/C++)


Tailles dfinies pour les types primitifs
Garbage Collector (ramasse-miettes)
lments supprims :

Pr processeur / #define / #include / typedef


Fichiers header (.h)
Structures / Unions
Fonctions et variables globales
Hritage multiple
Pointeurs
Surcharge des oprateurs
Instruction goto
Certains transtypages (casting) automatiques

Java / Introduction

Premier programme Java


Un premier programme (trs poli) enregistr dans
le fichier "Bonjour.java" :
Nom de la classe : il doit correspondre au
nom du fichier source (sans l'extension)

//------------------------------------------// Un premier programme Java


//------------------------------------------public class Bonjour {
public static void main(String[] args) {
System.out.println("Bonjour tous !");
}
}

Point d'entre du programme

Java / Introduction

Compilation et Interprtation
Interprtation

Compilation

Java VM
Linux

Source

Compilateur

Bytecode

Interprteur

Java VM
Windows

P1.java

javac P1.java

P1.class

java P1
Java VM
...

On utilise un diteur
pour crer et modifier
les fichiers sources

Dans un environnement de dveloppement


intgr (IDE) les commandes sont disponibles
sous forme de menus et barres d'outils

Machines virtuelles
(JVM/JRE)

Java / Elments de base

Commentaires
Trois formes de commentaires :

// Texte
Commence ds // et se termine la fin de la ligne
Sur une seule ligne
A utiliser de prfrence pour les commentaires gnraux

/* Texte */
Le texte entre /* et */ est ignor par le compilateur
Peuvent s'tendre sur plusieurs lignes
Ne peuvent pas tre imbriqus
Peuvent tre utiles pour inactiver (temporairement) une zone de code

/** Texte */
Commentaire de documentation (comme /* */ mais avec fonction spciale)
Interprts par l'utilitaire javadoc pour crer une documentation au format HTML
Peuvent contenir des balises de documentation (@author, @param, )
Peuvent contenir des balises HTML (Tags)

Java / Elments de base

Exemples de commentaires
/**
* Somme : Calcule une somme
*
* @author Marc Duchemin
* @version 2.3 08.07.2014
*/
public class Somme {
/*--------------------------------------------------+
| Programme principal
|
+--------------------------------------------------*/
public static void main(String[] params) {
//--- Initialisation des variables
int a
= 1;
int b
= 2;
int total;
// Totalisateur
total = a + b;
//--- Affichage du rsultat de l'addition
System.out.println("Rsultat = " + total);
}

}
10

Java / Elments de base

Identificateurs
Les identificateurs sont des noms symboliques permettant de
rfrencer les lments des programmes Java (variables, fonctions, ...).
Rgles pour les identificateurs :
Doivent commencer par une lettre ou un soulign
(ou, viter, un caractre montaire)
Suivi (ventuellement) d'un nombre quelconque de lettres, chiffres
ou souligns (ou, viter, de caractres montaires)
Distinction entre les majuscules et les minuscules
(viter de crer des identificateurs qui ne se distinguent que par la casse)

Utilisent le jeu de caractres Unicode (16 bits)


Selon les plates-formes, les caractres alphabtiques spciaux
(par exemple les caractres accentus, les lettres grecques, ) peuvent
encore poser des problmes => A viter
Les mots rservs du langage sont exclus
(voir liste la page suivante)

11

Java / Elments de base

Mots rservs (Keywords)


Mots rservs du langage Java (mots-cl) :
abstract

default

goto

do

boolean

1)

package

synchronized

if

private

this

double

implements

protected

throw

break

else

import

public

throws

byte

enum

instanceof

return

transient

case

extends

int

short

true

catch

false

interface

static

try

char

final

long

strictfp

void

class

finally

native

super

volatile

float

new

switch

while

for

null

3)

assert

const

1)

continue

4)

2)

2)

2)

1)

Mots rservs du langage mais non utiliss actuellement


Littraux prdfinis
3) Depuis la version 1.4 du JDK
4) Depuis la version 1.5 du JDK
2)

12

Java / Elments de base

Notion de variable [1]


En informatique, la notion de variable est une notion
fondamentale (un concept essentiel).
Une variable dfinit une case mmoire nomme et type.
Le nom est reprsent par un identificateur
Le type dfinit le genre d'informations qui sera enregistr ainsi que
les oprations qui pourront tre effectues sur ces informations
Il existe un certain nombre de types prdfinis mais il est galement
possible de crer ses propres types

Avant de pouvoir tre utilise, une variable doit pralablement tre


dclare (dfinition de l'identificateur et du type).

Syntaxe :
Type Identificateur ;
float
note;
Polygone triangle;

note

4.75

13

Java / Elments de base

Notion de variable [2]


La valeur de la variable peut tre dfinie (initialise), consulte,
modifie en utilisant le nom de la variable.
Les variables ont une visibilit et une dure de vie qui dpendent
du contexte dans lequel elles sont dclares.
Le type d'une variable peut tre soit un type primitif, soit un
type rfrence (c'est--dire le nom d'une classe ou d'un tableau)
Exemples :
int

unNombreEntier;

// Type primitif int

String

motDePasse;

// Classe String (prdfinie)

Point

position;

// Classe Point

char[]

voyelles;

// Tableau de caractres

Point[] nuage;

// Tableau de Point(s)

14

Java / Elments de base

Reprsentation en mmoire
De manire interne, la zone mmoire alloue une variable est
identifie par une adresse.
Cette adresse est compltement cache au programmeur : l'accs
la zone mmoire s'effectue en utilisant le nom de la variable.
Code Java

Reprsentation interne

Notation abstraite
( utiliser)

Variable Adresse Contenu

. . .
float note;
. . .

1215

note

note

1216
1217

Variable Adresse Contenu

. . .
note = 5.2;
. . .

1215

note

1216

5.2

note

5.2

1217
15

Java / Elments de base

Types primitifs [1]


Type

Contient

Taille

Valeurs

boolean

Boolen

[1 bit 1) ]

true, false

char

Caractre (entier non-sign)

16 bits

\u0000..\uFFFF

byte

Entier sign

8 bits

-128..127

short

Entier sign

16 bits

-215.. 215-1

int

Entier sign

32 bits

-231.. 231-1

long

Entier sign

64 bits

-263.. 263-1

float

Nombre en virgule flottante

32 bits

3.4*1038

double

Nombre en virgule flottante

64 bits

1.7*10308

1)

Dpend de l'implmentation de la machine virtuelle

16

Java / Elments de base

Types primitifs [2]


Boolen (boolean)
Ne peuvent prendre que deux valeurs : Vrai ou Faux
Ne peuvent pas tre interprts comme des valeurs numriques [0, 1]
Valeurs littrales (valeurs qui figurent directement dans le code)
true
false

Vrai
Faux

Caractre (char)

Caractres Unicode (codage normalis sur 16 bits)


Site de rfrence de la norme : www.unicode.org
Peuvent tre traits comme des entiers (non-signs !)
Valeurs littrales
Entre apostrophes : 'A' (attention : "A" n'est pas de type char)
Squence d'chappement pour certains caractres spciaux
(voir tabelle page suivante)
17

Java / Elments de base

Types primitifs [3]


Squences d'chappement (char)
Code

Signification

\b

Retour en arrire (Backspace)

\t

Tabulateur horizontal

\n

Saut de ligne (Line-feed)

\f

Saut de page (Form-feed)

\r

Retour de chariot (Carriage-Return)

\"

Guillemet

\'

Apostrophe

\\

Barre oblique arrire (Backslash)

\xxx

Caractre Latin-1 (xxx : valeur octale 000..377)

\uxxxx

Caractre Unicode
(xxxx : valeur hexadcimale 0000..FFFF)

18

Java / Elments de base

Types primitifs [4]


Entiers signs (byte, short, int, long)
Valeurs littrales (int par dfaut) : notation habituelle

Suffixe l ou L pour type long (L est prfrable)


Prfixe 0 (zro) pour valeur octale
(base 8)
Prfixe 0b ou 0B pour valeur binaire
(base 2)
Prfixe 0x ou 0X pour valeur hexadcimale (base 16)

Java 7

Exemples :
0
123
-56
0377
433L
0b1011
0xff
0xA0B3L

//
//
//
//
//
//
//
//

valeur de type int


valeur de type int
valeur de type int
377 [octal] = 255 [dcimal]
valeur de type long
valeur binaire de type int
valeur hexadcimale de type int
valeur hexadcimale de type long
19

Java / Elments de base

Types primitifs [5]


Nombres en virgule flottante (float, double)
Norme IEEE 754-1985
Prcision
float
double

: env. 6 chiffres significatifs


: env. 15 chiffres significatifs

Valeurs littrales (double par dfaut) : notation habituelle (n.m)


Suffixe f ou F pour type float
Suffixe d ou D pour type double (rarement ncessaire)
Notation exponentielle avec e ou E suivi de l'exposant
Valeurs spciales : infini, -infini, zro ngatif, NaN (Not a Number)
Attention :

Les nombres en virgule flottante sont des approximations de


nombres rels (tous les nombres rels ne peuvent pas tre
reprsents de manire exacte).
Il faut en tenir compte dans les comparaisons et notamment
dans les tests d'galit (prendre en compte un "epsilon").

20

Java / Elments de base

Types primitifs [6]


Nombres en virgule flottante (float, double)
123.45
17d
-4.032F
6.02e23
-5.076E-2f

//
//
//
//
//

valeur
valeur
valeur
6.02
-5.076

de type double (par dfaut)


de type double
de type float
x 1023 de type double
x 10-2 de type float

Le caractre '_' peut tre insr dans les littraux numriques


long
int
int
float

creditCardNr
tenMillions
bytePattern
pi

=
=
=
=

Java 7

1234_5678_9012_3456L;
10_000_000;
0b11000011_00001111_11110000_00110011;
3.14_15_93f;

Cas particuliers (problmes numriques) :


1.2/0.0
-5.1/0.0
0.0/0.0

// Infini
// Moins l'infini
// Not a Number (NaN)

Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
Double.NaN
21

Java / Elments de base

Affichage sur la console


Pour afficher une valeur littrale ou le contenu dune variable sur la
console de sortie, on utilise les lignes de code suivantes :
System.out.print();
System.out.println();

// Affichage (reste sur la mme ligne)


// Affichage et retour la ligne

Exemples :
System.out.println("Rsultats");
System.out.println("---------");

Rsultats
---------

int size = 123;


char unit = 'm';
System.out.print("Longueur : ");
System.out.print(size);
System.out.print(" ");
System.out.println(unit);

Longueur : 123 m

Mme affichage mais en utilisant l'oprateur de concatnation (+)

int size = 123;


char unit = 'm';
System.out.println("Longueur : " + size + " " + unit);
22

Java / Elments de base

Conversions de types [1]


Mis part le type boolen, tous les types primitifs peuvent tre
convertis entre eux.
L'encodage Unicode permet (si ncessaire) de considrer les
caractres comme des nombres.
Le type char peut donc agir comme un entier short mais il est non
sign (contrairement aux autres entiers).

Conversion largissante / Promotion (automatique)


(avec perte ventuelle de prcision lors du passage en virgule flottante)

Conversion restrictive explicite (par transtypage / casting)


(sous la responsabilit du programmeur)
Remarque : Certaines conversions restrictives implicites sont automatiquement
effectues lorsque le rsultat d'une expression constante est assigne
une variable (byte, short ou char) pour autant que la valeur de
l'expression puisse tre reprsente (sans perte) par la variable.
short compteur = 12*34;

// Conversion implicite int -> short


23

Java / Elments de base

Conversions de types [2]


Conversions des types primitifs

Conversion de

Conversion vers
boolean

byte

short

float

double

boolean

byte

short

char

int

E*

long

E*

E*

float

R!

R!

R!

R!

R!

double

R!

R!

R!

R!

R!

R*

N : pas de conversion possible


E : conversion largissante
(promotion)

char int long

R : conversion restrictive
* : perte de prcision

! : valeur tronque

24

Java / Elments de base

Transtypage (Casting)
Conversion de type explicite (au risque du programmeur)
Syntaxe : (Type_de_destination) Valeur__convertir
Exemples :
int i = 17;
byte b = 4;
b = i;
b = (byte)i;

// Conversion implicite : littral int -> byte


// Erreur la compilation
// Conversion explicite (int -> byte)

float f = 23.86f;
i = (int)f;
// Valeur tronque (i==23)

25

Java / Elments de base

Types "Rfrence"
En plus des huit types primitifs, Java dfinit deux autres catgories
de types de donnes :
- les classes et
- les tableaux
qui seront tudis en dtail plus tard.
Les classes et les tableaux sont des types gnralement
composites (reprsentant des valeurs multiples).
Ils sont collectivement nomms : Types "Rfrence"
(on parle galement parfois de types non-primitifs).
Pour une variable de type rfrence, la case mmoire ne contient
pas directement les valeurs de la variable mais une rfrence
(une sorte de pointeur) vers une autre zone mmoire contenant les
valeurs.
String nom = "Dupont";

nom

"Dupont"

26

Java / Elments de base

Chanes de caractres
Les chanes de caractres ne font pas partie des types primitifs
Les chanes de caractres font partie des types rfrence
(ce sont des objets de la classe String)
D'usage courant Syntaxe particulire (simplifie) pour les
valeurs littrales :
Texte entre guillemets ("")
Peuvent contenir des squences d'chappement identiques
celles dfinies pour les types char
Ne peuvent pas s'tendre sur plusieurs lignes
Concatnation (mise bout bout) avec l'oprateur "+"
Conversions possibles : types primitifs String
"Ceci est une chane de caractres"
"Le caractre \" se nomme 'guillemet'"
"La conca" + "tnation peut s'tendre " +
"sur plusieurs lignes"
27

Java / Elments de base

Conversions types primitifs String


Il est possible de convertir des valeurs de types primitifs en chanes
de caractres (String) et inversement en utilisant des fonctions
(mthodes) disponibles dans des classes appeles Wrappers.
Conversions
Type primitif Wrapper

en String

de String

byte

Byte

toString(byte b)

parseByte(String s)

short

Short

toString(short s)

parseShort(String s)

int

Integer

toString(int i)

parseInt(String s)

long

Long

toString(long l)

parseLong(String s)

float

Float

toString(float f)

parseFloat(String s)

double

Double

toString(double d)

parseDouble(String s)

D'autres fonctions de conversion sont galement disponibles dans la classe String, notamment
la mthode valueOf() qui permet de convertir en String les valeurs de tous les types primitifs.

28

Java / Elments de base

Exemples de conversions
int
float
double
String

i;
f;
d;
s;

//
//
//
//

Variable
Variable
Variable
Variable

de
de
de
de

type
type
type
type

int
float
double
String

s = "412";
i = Integer.parseInt(s);

// Conversion String -> int

s = "1.234";
d = Double.parseDouble(s);

// Conversion String -> double

f = 123.8F;
s = Float.toString(f);
s = String.valueOf(f);

// Conversion float -> String


// Conversion float -> String

Attention : Ne pas confondre les littraux de type caractre ou chane de caractres avec
les littraux numriques. Par exemple '4', "4" et 4.
Le premier est un caractre (type char), le deuxime une chane de caractres
(type String) et le troisime est une valeur numrique entire (type int).

29