Vous êtes sur la page 1sur 110

Les bases du

langage
Rajae El Ouazzani
2014-2015

Historique de JAVA

Cr en 1995 par la socit Sun Microsystems.


Langage de programmation inspir du C++.
Initialement conu pour raliser des programmes
interactifs sur le Web.
Libre (General Public License) depuis novembre 2006.
Rachet par Oracle en 2010.
Version actuelle (depuis juillet 2011) : Java 7 [1]

2014-2015

Prsentation de JAVA [2]

Langage 100% Objet : Tout code fait partie dun objet ( voir plutard).
Java est la fois un langage compil et interprt.
Le code source Java est compil en un pseudo-code universel binaires,
destin une machine virtuelle JVM qui va linterprter. Il est appel
souvent "J-code" ou "bytes code".
Le bytes code Java dsigne un flux d'octets binaire au format d'une
classe java.

2014-2015

Prsentation de JAVA (Suite) [3,4,5,6]

La JVM reprsente un interprteur. Elle se comporte comme un


processeur rel, excute des instructions fondes sur une machine
pile et gre cette pile en mmoire.
Le code de Java est implicitement portable. La mme application
peut tre excute sur toute plate-forme fournissant
l'environnement JVM.
La JVM est fourni dans le JRE (Java Runtime Environment=
L'environnement d'excution Java).
JRE est une famille de logiciels qui permet l'excution des
programmes crits en langage de programmation Java.

2014-2015

Exemple

public class MyProg {


public static void main(String[] args) {
System.out.println("Hello, World");
}
}

2014-2015

Savoir plus sur les langages compils


et interprts [7]

un langage compil, c'est un langage qui est, avant de pouvoir


l'excuter, traduit en langage machine par un compilateur.
Un langage interprt est un langage qui sera traduit dans un langage
plus ou moins similaire au langage machine. Ce dernier sera excut
par un interprteur (machine virtuelle).
Le mme code source peut tre utilis, sans le recompiler, sur
plusieurs plateformes matrielles diffrentes.
Mais un interprteur (logiciel) doit tre install sur la plateforme
cible.

2014-2015

La plateforme Java [8]

La plupart des plateformes sont une combinaison entre le


systme
d'exploitation
(software)
et
le
hardware.
La plateforme Java est une plateforme software seulement. Elle
travaille sur diffrentes plateformes hardware.
La plateforme Java a deux composants:

Java Virtual Machine JVM;


Java Application Programming Interface (API).

API: c'est une large collection de software composants groups


en bibliothques appels packages.

2014-2015

Chapitre 1: Les bases du langage


Java

2014-2015

Plan du chapitre 1: Les bases du langage Java

Section 1: La syntaxe de Java

Les identificateurs
Les littraux
Les mots cls
Les commentaires
Les expressions
Les oprateurs

Section 2: Structures de contrle du droulement


Les boucles
Les instructions de contrle des boucles
Les instructions conditionnelles

Section 3: Les types de donnes en Java


Les types de donnes primitifs
Les types de donnes composites

Section 4: La classe Enveloppes


Section 5: La classe System
Section 6: Transtypage
Section 7: Rgles de porte

2014-2015

Section 1: La syntaxe de Java

2014-2015

10

Les identificateurs [9]

Est compos de lettres(A..Z, a..z), _, $, chiffres (0..9);


Il commence par une lettre, sous tir ( _ ) ou le symbole dollar ( $ );
Un identificateur ne doit pas commencer par un chiffre.
Un identificateur ne peut pas contenir despace vide (tabulation, espace,
nouvelle ligne ou retour chariot).
Les identificateurs diffrencient les minuscules et les majuscules.
Il ne doit pas tre un mot cl ( voir plutard);
Remarques:
Dhabitude, les identificateurs en Java sont mnmoniques (facile
mmoriser).
En gnral, les identificateurs des classes dmarrent par une lettre
majuscule:
MaClasseExemple: exemple du nom dune classe en Java.
monObjetExemple: exemple du nom dun objet en Java.

Les littraux [9]

Un littral, ou une constante, reprsente une valeur qui ne


change jamais.
Il ya une distinction entre un identificateur qui reprsente une
valeur et un littral qui est une valeur.
Par exemple, le nombre 20 est un littral; lidentificateur age
reprsente un nombre qui peut tre gal 20. En Java, un
littral peut tre un nombre (entier ou virgule flottante), un
boolen, un caractre ou une chane de caractres.
Types de littraux: entiers, en virgules flottantes, boolens,
caractres et chaines de caractres.

2014-2015

12

Les littraux

Littraux entiers: peuvent prendre 3 formats: dcimal,


hexadcimal (commencent toujours par 0X) et octal (commencent
par 0).
Un littral entier peut tre stock dans les types de donnes byte,
short, int ou long. Par dfaut, Java stocke les littraux entiers dans
le type de donnes int, limit 32 bits.
Pour stocker un littral entier dans le type de donnes long, qui
peut recevoir des valeurs de 64 bits, on ajoute le caractre l ou L
la fin du littral. Par exemple, le littral 9999L est stock dans le
type long.

2014-2015

13

Les littraux

littraux en virgule flottante:


Un littral en virgule flottante est un nombre contenant un point
dcimal et/ou un exposant. Un littral en virgule flottante suit une
notation standard ou scientifique. Par exemple, 123.456 est la
notation standard, alors que 1.23456e+2 est la notation
scientifique.
Les littraux en virgule flottante sont du type double sur 64 bits
(type par dfaut) ou du type float sur 32 bits. Pour stocker un
littral en virgule flottante dans le type float, ajoutez la lettre f ou F
la fin du nombre.

2014-2015

14

Les littraux

littraux boolens:
true / false
littraux de type caractre:
Un littral caractre reprsente un caractre Unicode unique. Les
littraux caractre sont toujours mis entre guillemets simples
(quotes); par exemple, A et 9 sont des littraux caractre. Java
utilise le type char pour stocker des caractres uniques.
Le jeu de caractres Unicode, sur 16 bits, remplace le code ASCII
de 8 bits pour inclure les symboles et les caractres dautres
langues.

NB: Systme de codage cr en 1998, Unicode spcifie un nombre unique pour chaque
caractre, quels que soient la plate-forme, le logiciel et la langue utiliss. Alors que
l'ASCII tendu 8 bits pouvait prendre en compte un maximum de 256 caractres,
Unicode traduit chaque caractre en 16 bits et peut donc prendre en compte plus de
65.000 caractres uniques, et traiter informatiquement tous les systmes d'criture de la
2014-2015
15
plante.

Les littraux

littraux de type chane


Un littral chane reprsente une suite de caractres.
En Java, les chanes sont toujours entre guillemets doubles.
Java gre les chanes diffremment de C/C++; ce dernier
reprsente une chane par un tableau de caractres, alors que Java
utilise les classes String et StringBuffer.
Ainsi, de tous les types de littraux dont nous avons parl, seuls
les littraux chane sont stocks par dfaut sous forme dobjets.
Les chanes seront dtailles plutard.

2014-2015

16

Les mots cls


Un mot cl est
un identificateur
prdfini qui a
une signification
spciale pour le
compilateur Java
et qui ne peut
pas tre redfini.

abstract

double

int

super

boolean

else

interface

switch

break

extends

long

synchronized

byte

false

native

this

byvalue

final

new

threadsave

case

finally

null

throw

catch

float

package

transient

char

for

private

true

class

goto

protected

try

const

if

public

void

continue

implements

return

while

default

import

short

do

instanceof

static

Les commentaires

En Java, il y a trois styles de commentaires:


/* commentaire sur plusieurs lignes */
// commentaire jusqu' la fin de la ligne
/** utilis par javadoc pour documentation automatique */

2014-2015

18

Les expressions [9]

Une expression est une combinaison significative didentificateurs,


de mots cls, de symboles et doprateurs qui a une valeur.
De faon gnrale, une expression est tout ce qui peut tre mis du
ct droit dun signe daffectation.

s = "Bonjour tous"; // Affectations de variables


x = 123.4;
// Affectations de variables
y = (x * 5) / 2;
/* Les expressions doprateurs utilisent des combinaisons
de variables, littraux, appels de mthodes (sqrt), oprateurs et symboles. */
x = obtenirValeur();
/* Appels de la mthode obtenirValeur(), qui
renvoie une valeur attribue x. */
Personne p1 = new Personne();
/* cette expression alloue / affecte de
la mmoire lobjet p1 de type Personne. Les expressions daffectation
dobjet sont des expressions dappel de mthode spciales.
2014-2015

19

Les oprateurs [9]

Les oprateurs sont des symboles spciaux qui excutent une


fonction particulire sur des oprandes. Exemple: c=a+b
Il y a cinq types gnraux doprateurs:

oprateurs arithmtiques,
oprateurs logiques,
oprateurs de comparaison,
oprateurs daffectation et
oprateurs au niveau bits.

Chaque catgorie peut tre subdivise en unaire et binaire. Les


oprateurs unaires utilisent un seul oprande, alors que les oprateurs
binaires utilisent deux oprandes.
La prsance dtermine la priorit des oprateurs.
2014-2015

20

Les oprateurs arithmtiques

Java fournit un jeu complet doprateurs destins aux calculs arithmtiques.


Oprateur Dfinition

Prsance

++/--

Incrmentation/ dcrmentation automatique

+/-

Plus / moins unaire

Multiplication

Division

Modulo

+/-

Addition / soustraction

Exemple pour ++/-- :


int x, y = 3, z;
x = ++y;
/* la variable y est incrmente de 1, puis sa nouvelle valeur
(4) est attribue x. */
z = y--;
/* la dcrmentation automatique se fait aprs laffectation de
la valeur actuelle de y z. cd z a la valeur 4. */

2014-2015

21

Les oprateurs logiques

Les oprateurs logiques (ou boolens) permettent de regrouper des


expressions boolennes pour dterminer certaines conditions.
Ces oprateurs excutent les oprations boolennes standard (AND, OR,
NOT et XOR).
Oprateur Dfinition

Prsance

Complment logique unaire (NOT)

&

Evaluation AND

XOR

10

Evaluation OR

11

&&

Court circuit AND

12

||

Court circuit OR

13

Court-circuits: les deux oprandes ne seront pas systmatiquement examins. Il y a


en effet des situations dans lesquelles la valeur de l'opration peut tre dtermine
rien qu'en connaissant la valeur de l'oprande de gauche.
22

Exemple
1.
2.
3.
4.

5.
6.

! false
true && false
true || true
true ^ true

// true
// false
// true
// false

false && x
true || x

// false
// true

La valeur de lexemple 5 est false. En effet, si on consulte la table de vrit du


ET logique, on se rend compte qu' partir du moment o l'un des oprandes
vaut false, le rsultat est toujours false.
Un raisonnement similaire d'applique pour lexemple 6. En effet, en consultant
la table de vrit du OU logique, on voit que lorsqu'un des deux oprandes vaut
true, le rsultat est toujours true.
2014-2015

23

Les oprateurs de comparaison

Cest pour comparer des valeurs. A la diffrence des oprateurs logiques, les
oprateurs de comparaison nvaluent quune seule expression.
Oprateur

Dfinition

Prsance

<

Infrieur

>

Suprieur

<=

Infrieur ou gal

>=

Suprieur ou gal

==

Egal

!=

Diffrent de

Loprateur dgalit permet de comparer deux variables objet du mme type.


Dans ce cas, le rsultat de la comparaison na la valeur true que si les deux
variables font rfrence au mme objet.
2014-2015

24

Exemple
Personne p1 = new Personne();
Personne p2 = new Personne();
boolean r1 = p1 == p2;
//r1 a la valeur false
p1 = p2;
boolean r2 = p1 == p2;
//r2 a la valeur true

Comme p1 et p2 font rfrence des objets diffrents, le premier test


dgalit donne le rsultat false (bien quils soient du mme type).
La deuxime comparaison donne le rsultat true, puisque les deux
variables reprsentent maintenant le mme objet.
Remarque: La mthode equals() est utilise la plupart du temps pour
comparer des objets. Cette mthode, dfinie dans la classe Object, doit
tre implmente (crire son code) dans une sous-classe de la classe
Object, avant que lgalit des objets de la classe puisse tre contrle. 25

Les oprateurs daffectation

Ces oprateurs permettent dattribuer des valeurs aux variables.


Oprateur

Dfinition

Prsance

Affectation

15

+=

Ajout et affectation

15

-=

Soustraction et affectation

15

*=

Multiplication et affectation

15

/=

Division et affectation

15

&=

AND avec affectation

15

|=

OR avec affectation

15

^=

XOR avec affectation

15

Exemples :
int y = 2;
y *= 2;
//identique (y = y * 2)
boolean b1=true, b2=false; b1 &= b2;
//identique (b1 = b1 & b2)
2014-2015

26

Les oprateurs au niveau bits


Il y a deux types doprateurs au niveau bits :
Les oprateurs de dcalage qui permettent de dcaler les chiffres binaires
dun nombre entier vers la droite ou la gauche et
Les oprateurs boolens.
Exemple:
short i = 13; //i a la valeur 0000000000001101, un short est cod sur 2 Octets.
i = i << 2; //i a la valeur 0000000000110100, ajout de 2 bits.
i >>= 3;
//i a la valeur 0000000000000110, sustraction de 3 bits.
Dans la deuxime ligne, loprateur de dcalage des bits dcale tous les bits de
i de deux positions vers la gauche.
Loprateur de dcalage sur la droite dcale ensuite les bits de trois positions
vers la droite.

2014-2015

27

Le tableau suivant donne la liste complte des oprateurs Java au


niveau bits :

Oprateur

Dfinition

Prsance

Complment au niveau bits

<<

Dcalage gauche sign

>>

Dcalage droit sign

>>>

Dcalage droit par ajout de zros (non sign)

&

AND au niveau bits

OR au niveau bits

10

XOR au niveau bits

11

<<=

Dcalage gauche avec affectation

15

>>=

Dcalage droit avec affectation

15

>>>=

Dcalage droit par ajout de zros avec affectation 15


2014-2015

28

Un oprateur spcial " ? : "


Nous avons cit deux types doprateurs: unaire et binaire. De
plus, il y a un oprateur ternaire que Java tire de C, loprateur ? :
Sa syntaxe est :
expression1? expression2: expression3;
expression1 est value en premier. Si sa valeur est true,
expression2 est calcule, sinon expression3 est calcule.
Exemple:
int x = 3, y = 4, max;
if(x>y) max=x;
max = (x > y)? x: y;
/* quivalent : else max=y
*/
En gnral, max reoit la valeur de x ou de y, selon que x est
suprieur y ou non.

2014-2015

29

Section 2: Structures de contrle du


droulement

2014-2015

30

Les boucles [9]

En Java, il y a trois faons de crer des boucles:


while() {}
do {} while()
for

2014-2015

31

Boucle while

La boucle while est utilise pour crer un bloc de code qui sera
excut tant quune condition particulire est satisfaite.
Syntaxe:
while (condition) {
code excuter dans une boucle
// incrmentation / dcrmentation
}
La boucle commence par tester la condition. Si la condition a la
valeur true, la boucle excute la totalit du bloc. Ensuite, elle teste
la condition une nouvelle fois et rpte ce processus jusqu ce
que la condition prenne la valeur false. A ce moment, la boucle
achve son excution.
2014-2015

32

Exemple
int x = 0;
//imprime "Bouclage" 10 fois
while (x < 10){
System.out.println("Bouclage");
x++;
}
Remarque:
Vous pouvez galement arrter lexcution dune boucle
avec les instructions return, continue ou break.
2014-2015

33

La boucle do while
La boucle do while ressemble la boucle while, sauf que do while
value la condition aprs les instructions et non avant. Le code suivant
montre la boucle while prcdente convertie en boucle do while:
int x = 0;
do{
System.out.println("Bouclage");
x++;
}while (x < 10);
Remarque:
La diffrence principale entre les deux boucles est que, la diffrence
de la boucle while, la boucle do while sexcute toujours au moins une
fois.

2014-2015

34

La boucle for
La boucle for est la plus puissante des constructions de boucles.
Voici la syntaxe gnrale dune boucle for :
for (expr init; expr condition; expr opration) {
}
Exemple:
for (int x = 0; x < 10; x++){
System.out.println("Bouclage");
}

2014-2015

35

Instructions de contrle des boucles [9]


break
continue.

2014-2015

36

break
Linstruction break permet de sortir dune boucle avant que la condition
de test soit respecte. Quand la boucle rencontre une instruction break,
elle se termine immdiatement en ignorant le code restant.
Exemple :
int x = 0;
while (x < 10){
System.out.println("Bouclage");
x++;
if (x == 5) break;
else
//faire quelque chose dautre
}
Dans cet exemple, la boucle sarrte quand x est gal 5.

37

continue
Linstruction continue permet dignorer le reste de la boucle et de
reprendre lexcution litration suivante de la boucle.
Exemple:
for ( int x = 0 ; x < 10 ; x++){
if(x == 5)
continue; //revient au dbut de la boucle avec x=6
System.out.println("Bouclage");
}

Cet exemple nimprime pas Bouclage si x a la valeur 5.


2014-2015

38

Instructions conditionnelles [9]

Avec les instructions conditionnelles, le code a la possibilit de


prendre des dcisions. En Java, il y a deux structures
conditionnelles:
linstruction if-else et
linstruction switch.

2014-2015

39

Linstruction if-else

La syntaxe de linstruction if-else est la suivante:


if (condition1) {
//blocCode 1
}
else if (condition2) {
//blocCode 2
}
else {
//blocCode 3
}
2014-2015

40

Exemple
if ( x % 2 == 0)
System.out.println("x est pair");
else
System.out.println("x est impair");
if (x = y)
System.out.println("x est gal y");
else if (x < y)
System.out.println("x est infrieur y");
else
System.out.println("x est suprieur y");
2014-2015

41

Linstruction switch

Dune certaine faon, linstruction switch est une version spcialise


de linstruction if-else. Voici la syntaxe gnrale de linstruction
switch:
switch (expression){
case valeur1: blocCode1;
break;
case valeur2: blocCode2;
break;
default : blocCode3;
}
2014-2015

42

Remarques importantes

Les blocs de code nont pas besoin dtre mis entre accolades.
Le bloc de code default correspond au bloc else dune instruction if-else.
Les blocs de code sont excuts selon la valeur dune variable ou dune
expression, pas dune condition.
La valeur de lexpression doit tre de type nombre entier (ou dun type qui
peut tre transtyp en int sans risque, comme char).
Les valeurs case doivent tre des expressions constantes du mme type que
lexpression.
Le mot cl break est facultatif. Il est ncessaire pour terminer lexcution de
linstruction switch une fois quun code de bloc sexcute. Si, par exemple,
break nest pas mis aprs blocCode1 et si blocCode1 est excut, alors
blocCode2 sexcute immdiatement aprs blocCode1.
Si un bloc de code doit tre excut quand lexpression a une valeur parmi
plusieurs, il faut numrer les valeurs-chacune tant prcde dun mot cl
case et suivie par un point-virgule.
43

Exemple 1
int grade = 4;
switch (grade) {
case 0;
case 1:
case 2: System.out.println("chou"); break;
case 3: System.out.println("passable"); break;
case 4: System.out.println("bien"); break;
case 5: System.out.println("trs bien");break;
case 6: System.out.println("avec flicitations");break;
default: System.out.println("Ca n'existe pas!");
}
2014-2015

44

Exemple 2
switch (c){
case '1': case '3': case '5': case '7': case '9':
System.out.println("c est un chiffre impair"); break;
case '0': case '2': case '4': case '6': case '8':
System.out.println("c est un chiffre pair"); break;
case ' ':
System.out.println("c est un espace"); break;
default :
System.out.println("c nest ni un chiffre ni un espace");
}
2014-2015

45

Section 3: Les types de donnes Java

2014-2015

46

Prsentation [9]

En Java, il y a deux catgories de types de donnes :


Le type de donnes intgrs/primitifs et
Le type de donnes composites.
Les types de donnes primitifs peuvent ensuite tre diviss en trois
autres catgories: numrique, boolen et caractre. Ils sont compris
par le compilateur et ne ncessitent pas de bibliothques spciales.
(A la base, une bibliothque spciale fait rfrence nimporte quelle
collection de code qui ne fait pas partie de la dfinition actuelle du
langage).
Les types composites sont de deux sortes: tableaux et chanes.
Gnralement, les types composites ncessitent lutilisation de
bibliothques spciales.
2014-2015

47

Les types de donnes primitifs


Type
Taille (bits) Valeurs min. et max.
boolean 1
true ou false
char
16
0 0xFFFF (65535)
byte
short
int
long

8
16
32
64

float

32

double

64

Dsignation
valeur logique
caractre unicode (non
sign)
-128 127
entier sign sur 1 octet
-32 768 32 767
entier sign sur 2 octets
-2 147 483 648 2 147 483 647
entier sign sur 4 octets
-9 223 372 036 854 775 808 9 223 entier sign sur 8 octets
372 036 854 775 807
+/-1.40239846e-45 +/rel 4 (norme IEEE 754)
3.40282347e+38
+/- 4.94065645841246544e-324
rel 8 (norme IEEE 754)
+/- 1.79769313486231570e+308
48

Exemple
public class VariablesExemples {
public static void main( String[] args ){
boolean result=true;
char option;
option = 'C';
double grade = 0.0;
}
}
Remarque :
La taille des diffrents types de donnes est indpendante de la
machine hte.

2014-2015

49

Types de donnes composites


Les tableaux.
Les chaines de caractres.

2014-2015

50

Les tableaux [8]

La dclaration d'un tableau se fait l'aide d'une paire de crochets:


int [ ] nombre;
// quivalent int nombre[ ];
char voyelle[ ];
la diffrence de C, les tableaux en Java sont des objets de la classe
tableau. Ces dclarations n'introduisent que des rfrences des
tableaux et n'allouent aucune place dans la mmoire, donc on ne peut
pas indiquer le nombre des lments dans la dclaration.
Pour allouer la place pour ces tableaux, on peut soit:
Utiliser l'oprateur new:
int nombre[ ] = new int[10];
//un tableau de 10 lments
Affecter une srie d'lments au tableau au moment de sa cration:
char voyelle[ ] = {'a', 'e', 'i', 'o', 'u'}; // un tableau de 5 lments
2014-2015

51

La taille d'un tableau est disponible grce la variable publique length:


int longueur = voyelle.length;
//longueur = 5
char c=voyelle[0];
// accs au premier lment du tableau
Laccs un lment qui est l'extrieur du tableau gnre une exception:
ArrayIndexOutOfBoundsException de type RuntimeException.
La mthode arraycopy() de la classe System sert copier un certain nombre
d'lments d'un tableau dans un autre:
System.arraycopy (objetsSource, positionSource, objetDestin, positionDestin, longueur)

La syntaxe de lutilisation dun mthode est: classe.mthode()


Exemple dajout dun lment au tableau voyelle:
char voyelle[ ] = {'a', 'e', 'i', 'o', 'u'};
char tmp[ ] = new char[voyelle.length+1];
System.arraycopy(voyelle, 0, tmp, 0, voyelle.length);
tmp[voyelle.lemgth] = 'y';
voyelle=tmp;
Il n'y a plus de rfrences sur l'ancien objet et il sera rcupr par le ramassemiette.
2014-2015
52

Parcours de tableau
Pour parcourir compltement ou partiellement un tableau, il suffit d'utiliser une
boucle for.
Exemple de parcours et daffichage des lments dun tableau sur la
console:
public class Array{
public static void main(String a[]){
int tab[] = {-3,4,-17,2,-1,8};
for(int i =0; i< tab.length; i++){
System.out.println(" "+tab[i]);
}
}
}
Rsultat : -3 4 -17 2 -1 8
Il ne faut pas oublier que le premier indice du tableau est 0, ensuite on parcourt
toutes les positions jusqu' atteindre tab.length - 1.

53

Parcours avec une boucle amliore


Java 5.0 offre une nouvelle boucle for qui permet de parcourir facilement
tous les objets qui reprsentent des collections d'objets. La syntaxe de cette
boucle for est la suivante:
for (<type_de_donne> <nom_variable>:<collection__parcourir>) {
// Corps de la boucle
}
Exemple:
public class Array{
public static void main(String a[]){
int tab[] = {-3,4,-17,2,-1,8};
for(int nb :tab){
System.out.println(" "+nb);
}
}
}
2014-2015
54

Java gre les tableaux plusieurs dimensions avec des objets, se sont
des tableaux de tableaux. La syntaxe ressemble celle de C:
int matrice [ ] [ ];
Rsultat:
matrice = new int [3][8];
30000000
05000000
matrice[0][0] = 3;
00000000
matrice [0][1] = 5;

On peut crer des tableaux dont les lignes n'ont pas forcment la
mme taille:
int mat[][] = new int[3][ ];
Rsultat:
mat[0] = new int [3];
000
00000
mat[1] = new int[5];
0000
mat[2] = new int[4];
2014-2015

55

Exemple 1
public class MatriceEntiers{
public static void main(String a[]){
int mat[][] = {{3,4},{17,2,1,8}};
for(int i =0; i< mat.length; i++){
for(int j = 0; j< mat[i].length; j++)
System.out.print(" "+mat[i][j]);
System.out.println();
}
}
}
Rsultat:
34
17 2 1 8
2014-2015

56

Exemple 2
public class MatriceChaines {
public static void main(String a[]){
String couleur[][] = {{"rouge","vert","bleu"},{"noir", "blanc"}};
for(String[] ligne :couleur){
for(String elm:ligne)
System.out.print(" "+elm);
System.out.println();
}
}
}
Rsultat:
rouge vert bleu
noir blanc

2014-2015

57

Les chaines de caractres

Les chaines de caractres sont traites par les 2 classes


suivantes:
La classe String: pour les chaines constantes.
La classe StringBuffer: pour les chaines variables.

2014-2015

58

La classe String

En Java, les chanes sont gres par une classe spcifique appele
"String". Mme les littraux de type chane sont gr de faon
interne comme des objets de cette classe.
Les chanes de caractres sont inaltrables: une fois cr un objet
String, on ne peut pas changer sa valeur.
Les oprations qui permettent de changer les caractres ou la
taille d'une chane renvoient un nouvel objet String.
String chaine = "Etudiants de GI";
int longueur = chaine.length();
String concatenation = "Salam" + " tous";

2014-2015

59

Mthodes de comparaisons [8]


Remarque: On ne peut pas utiliser les oprateurs relationnels (<, >, ==, etc).
Mthode

Description

Compare une chane de caractre un autre objet. Renvoie


une valeur <0, ==0, ou > 0.
Compare une chane de caractre un autre objet. Renvoie
int compareTo(String anotherString) une valeur <0 ==0 ou > 0. La comparaison est une
comparaison lexicographique.
Compare une chane de caractre un autre objet. Renvoie
int compareToIgnoreCase(String str) une valeur <0 ==0 ou > 0. La comparaison est une
comparaison lexicographique, ignorant la casse.
Compare la chane a un objet et retourne true en cas dgalit
boolean equals(Object anObject)
et false sinon.
boolean equalsIgnoreCase(Object
Compare la chane a un objet et retourne true en cas dgalit
anObject)
et false sinon ( on ignore la casse).
int compareTo(Object o)

60

Exemples
String un = "exemple";
String deux = "exemple";
String trois = "EXEMPLE";
if (un == deux)
if(un.equals(deux))
if (un.equalsIgnoreCase(trois))
if(un.compareTo(trois) > 0)
if(un.compareTo(deux) ==0)

2014-2015

//faux
//vrai
//vrai
//vrai
//vrai

61

Autres mthodes de comparaisons [8]


Mthode

Description

Teste lgalit de deux parties de chanes.


ignoreCase: si true, on ignore la casse.
boolean regionMatches(boolean
toffset: le dbut de loffset de la premire chaine.
ignoreCase, int toffset, String
other : le nom de la deuxime chaine.
other, int ooffset, int len)
ooffset: le dbut de loffset de la deuxime chaine.
len: le nombre de caractres comparer.
boolean regionMatches(int
toffset, String other, int ooffset, Teste lgalit de deux parties de chanes.
int len)

62

Exemple
String str1 = "Salam tous";
String str2 = "Bonjour Tous";
/* Tester lgalit des caractres de lindice 8 dans str1 avec les
caractres de lindice 10 dans str2 sans prendre en considration la
casse, "true" ignore la casse */
boolean test = str1.regionMatches(true, 8, str2, 10, 4);
System.out.println("Rgions gales="+test); // Rgions gales = true

/* En considrant la mme casse des lettres */


test = str1.regionMatches(8, str2, 10, 4);
System.out.println("Rgions gales="+test); // Rgions gales = false

Exercice
public class StringExemple{
public static void main(String a[]){
String prnoms [ ] = {"Mariam", "Mohamed", "Karim", "Samira", "Imane", "Brahim"}, var;

for(boolean ok = false; !ok; ){


ok=true;
for(int i = 0; i < prnoms.length-1; i++){
Rsultat
if(prnoms[i].compareTo(prnoms[i+1])>0){
Brahim : 6 lettres
var = prnoms [i];
Imane : 5 lettres
prnoms [i] = prnoms [i+1];
Karim : 5 lettres
prnoms [i+1] = var;
Mariam : 6 lettres
ok = false;
Mohamed : 7 lettres
}
Samira : 6 lettres
}
}
for(int i = 0; i <prnoms.length;i++)
System.out.println (prnoms[i] + " : "+prnoms [i].length()+" lettres");
}
}

2014-2015

64

Mthodes pour caractre et sous-chane[10]


Mthode

Description
Retourne le caractre lindice
char charAt(int i)
spcifi en paramtre.
Sous-chane depuis d jusqu la
String substring(int d)
fin
Sous-chane depuis d jusquau
String substring(int d, int f)
caractre dindice f non inclus.
Renvoie true si prefix est un
boolean startsWith(String prefix)
prfixe de la chane
Renvoie true si prefix est un
boolean startsWith(String prefix, int i)
prfixe de la chane partir de i.
Retourne true si suffix est un
boolean endsWith(String suffix)
suffixe de la chane.
2014-2015
65

Exemple
String s = "String est immutable";
char resultat = s.charAt(7);
System.out.println(resultat);
// affiche: e
System.out.println(s.substring(7) );
// affiche: est immutable
System.out.println(s.substring(7, 10) ); // affiche: est, le caractre de lindice 10 nest pas inclus.
String st = "est";
boolean test1 = s.startsWith(st);
boolean test2 = s.startsWith(st, 7);

// false
// true

test1 = s.endsWith( "immutable" );


test2 = s.endsWith( "immu" );

//true
// false
2014-2015

66

Mthodes pour conversions [10]


Mthode

Description

String toLowerCase()

Retourne une chane gale la chane convertie en minuscules.

String toLowerCase(Locale locale) Retourne une chane gale la chane convertie en minuscules.
String toString()

Retourne une chane gale la chane

String toUpperCase()

Retourne une chane gale la chane convertie en majuscules.

String toUpperCase(Locale locale) Retourne une chane gale la chane convertie en majuscules.
String trim()

String replace(char ac, char nc)

Retourne une chane gale la chane sans les espaces de


dbut et de fin.
Retourne une chane ou tous les ac ont t remplac par des
nc. Sil ny a pas de remplacement, la chane elle-mme est
retourne.

Remarque: A Locale object represents a specific geographical, political, or cultural region. It


uses the Locale to tailor information for the user. For example, displaying a character is a localesensitive operation the number should be formatted according to the customs and conventions
of the user's native country, region, or culture. [12]
67

Exemples
String Str = new String("Salam Tous");
System.out.println(Str.toLowerCase());
// affiche: salam tous
// Ou bien
Locale defloc = Locale.getDefault();
// utiliser le systme Locale par dfaut
System.out.println("string value = " + Str.toLowerCase(defloc)); // conversion
// Ou bien
System.out.println(str.toLowerCase(Locale.FRANCE)); // choisir le locale: France
Str = new String(" Salam Tous
System.out.println(Str.trim() );

");
// affiche: Salam Tous

System.out.println("Salam".replace('a', 'e'));

2014-2015

// affiche: Selem

68

Mthode

Description

static String
copyValueOf(char[] data)

byte []getBytes(String enc)

Construit une chane de caractres partir dun tableau de


caractres.
Construit une chane de caractres partir dune partie de tableau
de caractres.
data : le vecteur de caractres.
offset : loffset initial de la sous chaine.
count : la longueur de la sous chaine.
Convertit la chane en tableau de byte.

byte []getBytes()

Convertit la chane en tableau de byte.

static String
copyValueOf(char[] data, int
offset, int count)

Copie les caractres de la chane dans le tableau en paramtres.


srcBegin : indice du 1er caractre de la chaine copier.
void getChars(int srcBegin, int
srcEnd : indice qui suit le dernier caractre de la chaine copier.
srcEnd, char[] dst, int
dst : le vecteur destination.
dstBegin)
dstBegin : loffset de dbut dans le vecteur destination.
char []toCharArray()

Convertit la chane de caractres en un tableau de caractres.


69

Exemples
char[] tab={'C', 'O', 'M', 'P', 'I', 'L', 'E', ' ','O', 'N', 'L', 'I', 'N', 'E'}; // tab de caractres
String str = String.copyValueOf(tab, 8, 6 ); /* retourner un String qui contient les
caractres du tableau de loffset 8 et de longueur as 6 */
System.out.println(str); // affiche la sous chaine: ONLINE
String s= "Cours de Java pour GI";
char[] t = new char[30]; // tab de caractres
s.getChars(9, 13, t, 0); //copie de String de lindice 9 12 dans le tableau de caractres.
System.out.println(s.toCharArray()); // affiche le tableau de caractres partir du String s.

2014-2015

70

Mthode

Description

Retourne la reprsentation en chane du


boolen.
Retourne la reprsentation en chane du
static String valueOf(char c)
caractre.
Retourne la reprsentation en chane du
static StringvalueOf(char[] data)
tableau de caractres.
static String valueOf(char[] data, int Retourne la reprsentation en chane du
offset, int count)
tableau de caractres (partie) .
Retourne la reprsentation en chane du
static String valueOf(double d)
double.
static String valueOf(boolean b)

static String valueOf(float f)

Retourne la reprsentation en chane du float.

static String valueOf(int i)

Retourne la reprsentation en chane du int.

static String valueOf(long l)

Retourne la reprsentation en chane du long.

static String valueOf(Object obj)

Retourne la reprsentation en chane de


lobjet.

71

Exemple
String un = String.valueOf(1); // conversion dun nombre en un String

Remarque: Tous les objets Java possdent une mthode toString()


hrite de la classe Objet qui est utilise par String.valueOf() pour la
prsentation sous forme de chane.

2014-2015

72

Mthodes de recherches [10]


Mthode
int indexOf(int ch)

int indexOf(int ch, int fromIndex)


int indexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)

int lastIndexOf(String str)


int lastIndexOf(String str, int fromIndex)

Description
Retourne lindice de la premire occurrence du
caractre
Retourne lindice de la premire occurrence du
caractre partir de fromIndex
Retourne lindice de la premire occurrence de
la chane
Retourne lindice de la premire occurrence de
la chane partir de fromIndex
Retourne lindice de la dernire occurrence du
caractre
Retourne lindice de la dernire occurrence du
caractre partir de fromIndex
Retourne lindice de la dernire occurrence de
la chane
Retourne lindice de la dernire occurrence de
la chane partir de fromIndex

Exemple
String str = "Salam tous";
// retourne lindice du caractre 't' partir de lindice 4
System.out.println(str.indexOf('t', 4));
// affiche 8
// returne lindice de loccurrence du charactre 'l' sil existe et -1 sinon
System.out.println(str.indexOf('l'));
// affiche 2
/* la recherche commence partir de lindice 10 et retourne lindice du 1er caractre
de la sous chaine "tous" et -1 sinon*/
System.out.println(str.indexOf("tous", 2));
// affiche 8
System.out.println(str.indexOf("GI", 2));
// affiche -1

/* Rechercher lindice de la chaine "ful". La recherche se fait en arrire partir de


lindice 18. */
String s = "Java is a wonderful language";
System.out.println(s.lastIndexOf("ful", 18));
// affiche 16

La classe StringBuffer [9]

La classe StringBuffer est diffrente de la classe String, puisque


les objets StringBuffer peuvent tre modifis.
Plusieurs mthodes importantes diffrencient la classe
StringBuffer et la classe String.

2014-2015

75

Mthodes de longueur [10]


Mthode

Description

int length()

La longueur de la chane de caractres

int capacity()

void ensureCapacity (int


minCapacity)
void setLength (int n)

Renvoie la quantit de mmoire affecte au


StringBuffer. Comme la mmoire affecte un
objet StringBuffer peut tre contrle avec le
constructeur StringBuffer (int length), cette
valeur peut tre suprieure la valeur renvoye
par la mthode length.
Cette mthode redimensionne le tableau, si
ncessaire, de faon que la capacit minimale
de la chane soit gale minCapacity.
La longueur de la chane est n ; les caractres
ventuellement ajouts ont une valeur
indtermine.
76

Mthodes de Concatnation [10]


Mthode

Description

Concatne la reprsentation en chane du boolen. Elle


StringBuffer append(boolean b) sert ajouter du texte lobjet StringBuffer. Cette mthode
est fortement surcharge.
StringBuffer append(char c)

Concatne la reprsentation en chane du caractre.

Concatne la reprsentation en chane du du tableau de


caractres.
StringBuffer append(char[] str, Concatne la reprsentation en chane du tableau de
int offset, int len)
caractres.
StringBuffer append(char[] str)

StringBuffer append(double d) Concatne la reprsentation en chane du double.


StringBuffer append(float f)

Concatne la reprsentation en chane du float.

StringBuffer append(int i)

Concatne la reprsentation en chane du int.

StringBuffer append(long l)

Concatne la reprsentation en chane du long.

StringBuffer append(Object obj) Concatne la reprsentation en chane de lobjet

StringBuffer append(String str) Concatne la reprsentation en chane de la chane. 77

Exemple
StringBuffer s1 = new StringBuffer(10);
int c = s1.capacity();
//c = 10
int l = s1.length();
//l = 0
s1.append("Bor");
//s1 = "Bor"
s1.append("land");
//s1 = "land"
c = s1.capacity();
//c = 10
l = s1.length();
//l = 7
s1.setLength(2);
//s1 = "Bo
StringBuffer s2 = new StringBuffer("Bonour ");
s2.insert (3, "j");
//s2 = "Bonjour "
char[] s3 = new char[]{'',' ','t','o','u','s'};
s2.append(s3, 0, 6);
// s2 affiche: Boujour tous

78

Mthodes de caractre et sous-chane [10]


Ces mthodes sont utilises aussi avec la classe String.

Mthode

String substring(int i)

Description
Retourne le caractre lindice spcifi en
paramtre.
Sous-chane depuis i jusqu la fin

String substring(int i, int l)

Sous-chane depuis i et de longueur l.

char charAt(int i)

79

Mthodes de conversion et de modification [10]


Mthode

Description

String toString()

Retourne une chane gale la chane.

StringBuffer delete(int start, Enlve tous les caractres compris entre start
int end)
(inclus) et end (exclus).
StringBuffer
Enlve le caractre lindice index
deleteCharAt(int index)

80

Exemples
StringBuffer s = new StringBuffer("Salam vous tous");
// supprimer les caractres de lindice 8 lindice 13
s.delete(8, 13); // s affiche: Salam tous
s.deleteCharAt(6); // s affiche : Salam tous

2014-2015

81

Section 4: La classe Enveloppes

2014-2015

82

Prsentation [11]

Les classe enveloppes (Wrappers) sont des classes qui encapsulent les
donnes de type primitif, afin de pouvoir les utiliser comme des objets
ordinaires.
Depuis Java 5, les oprations de conversion d'un type primitif vers un objet
d'une classe enveloppe, et la conversion inverse sont devenues
automatique: boxing et unboxing. Les classes enveloppes sont immuables.
Type primitif
boolean
char
byte
short
int
long
float
double

Classe enveloppe
Boolean
Character
Byte
Short
Integer
Long
Float
Double

Sous-classes de la
classe Number
83

Suite

Toutes les sous-classes de Number possdent les mthodes byte


byteValue(), short shortValue(), int intValue(), long longValue() et double
doubleValue() qui ralisent les conversions des types primitifs.
Toutes les classes enveloppes ont une mthode x X.parseX(String s) qui
essaie de convertir une chane de caractres en une donne de type primitif,
si c'est possible (lvent une exception NumberFormatException sinon).
Pour les types entiers, on a aussi les mthodes x X.parseX(String s, int
base) qui essaient de convertir une chane de caractres en une donne de
type primitif, en supposant que la donne est note dans la base base.

Remarques: [13]
Integer.parseInt() is a static method, that you can use to parse a string into
an int without the need to create an instance of class Integer.
Integer.intValue() is a non-static method and is meant to get the int value
of an Integer object.

Exemples
Integer obj = new Integer(15);
int i = obj.intValue(); // retourner la valeur de ce Integer comme un int
System.out.println("La valeur de i = " + i);
// affiche 15
// convertir une chaine de caractres la base correspondante
int a = Integer.parseInt("222", 10);
// affiche 222
int b = Integer.parseInt("1010110", 2); // affiche 86 (somme des puissances de 2)

2014-2015

85

Suite
Toutes les classes enveloppes de type entier ont une mthode static X
X.decode(String s) qui essaie de convertir une chane de caractres en une
donne de type primitif entier, si c'est possible (elles lvent une exception
NumberFormatException sinon).
si la chaine commence par un 0 le dcodage se fait en octal.
si la chaine commence par 0x, ou par # le dcodage se fait en
hexadcimal.
sinon le dcodage se fait en dcimal.
Exemple:

System.out.println(Integer.decode("0234"));
System.out.println(Integer.decode("0xabf"));
System.out.println(Integer.decode("#abf"));
System.out.println(Integer.decode("234"));
2014-2015

//2*82+3*81+4*80=156
//10*162+11*161+15*160=2751
// 2751
//234
86

1- Boolean :
Il y a deux constantes de type Boolean: Boolean.TRUE et Boolean.FALSE.
2- Character :
Mthode

Description

static boolean isLetter(char c)

Retourne true si le caractre c est une lettre et false sinon.

static boolean isDigit(char c)

Retourne true si c est un chiffre et false sinon.

static boolean isLetterOrDigit(char c) Retourne true si c est un chiffre ou une lettre et false sinon.
static boolean isLowerCase(char c)

Retourne true si c est une lettre majuscule et false sinon.

static boolean isUpperCase(char c)

Retourne true si c est un espace et false sinon.

static boolean isSpaceChar(char c)

Retourne true si c est un espace et false sinon.

Retourne true si c est un espace selon Java et false sinon.


'\n': saut de ligne (newline), '\r', retour chariot (retour en
static boolean isWhiteSpace(char c)
dbut de la mme ligne), '\t' : tabulation, '\f' :saut de page
(form feed)....
static boolean isJavaIdentifierPart(char Retourne true si c peut faire partie d'un identificateur Java et
c)
false sinon.
static boolean
Retourne true si c peut tre le premier caractre d'un
isJavaIdentifierStart(char c)
identificateur Java et false sinon.

Exemples
char ch1= 'A', ch2= '9', ch3 ='a', ch4 = ' ';
boolean b1 = Character.isLetter(ch1);
boolean b2 = Character.isLetter(ch2);
boolean b3 = Character.isUpperCase(ch1);
boolean b3 = Character. isLowerCasech3);
boolean b4 = Character.isSpaceChar(ch4);

// b1 a la valeur true
// b2 a la valeur false
// b3 a la valeur true
// b3 a la valeur true
// b4 a la valeur true

char ch5 = '3'; ch6 = '/', ch7 = '_';


boolean b5 = Character.isJavaIdentifierPart(ch5);
boolean b6 = Character.isJavaIdentifierPart(ch6);
boolean b7 = Character.isJavaIdentifierStart(ch7);
boolean b8 = Character.isJavaIdentifierStart(ch5);

// b5 a la valeur true
// b6 a la valeur false
// b7 a la valeur true
// b8 a la valeur false

3- Number :
3.1 Byte :
La classe Byte possde trois constantes: Byte.MAX_VALUE qui vaut 27-1,
Byte.MIN_VALUE qui vaut -27. et Byte.SIZE qui vaut 8 le nombre de bits de la
reprsentation d'un byte.
3.2 Short :
La classe Short possde trois constantes: Short.MAX_VALUE qui vaut 215-1,
Short.MIN_VALUE qui vaut -215. et Short.SIZE qui vaut 16 le nombre de bits
de la reprsentation d'un short.
3.3 Integer :
La classe Integer possde trois constantes: Integer.MAX_VALUE qui vaut 232-1,
Integer.MIN_VALUE qui vaut -232 et Integer.SIZE qui vaut 32 le nombre de bits
de la reprsentation d'un int.

2014-2015

89

Mthodes de la classe Integer


Mthode

static int highestOneBit(int i)


static int lowestOneBit(int i)

Description

Retourne la valeur entire du bit 1 de plus fort poids de la


reprsentation de i
Retourne la valeur entire du bit 1 de moins fort poids de la
reprsentation de i

static int numberOfLeadingZeros


Retourne le nombre de 0 en dbut de la reprsentation de i.
(int c)
static int numberOfTrailingZeros
Retourne le nombre de 0 en fin de la reprsentation de i.
(int c)
static int rotateLeft(int i, int d)

static int rotateRight(int i, int d)

Retourne la valeur de i laquelle on a fait subir une rotation


de distance d vers la gauche. Un bit peut aller occuper le bit
de signe.
Retourne la valeur de i laquelle on a fait subir une rotation
de distance d vers la droite. Un bit peut aller occuper le bit
de signe.

static int reverse(int i)

Retourne la valeur obtenue en inversant l'ordre des bits de i.

static int bitCount(int i)

Retourne le nombre de bits 1 dans la reprsentation de i.

Exemples
int i = 170;
/* retourner la representation en string de la valeur du unsigned integer
reprsent par largument en base 2 */
String n1=Integer.toBinaryString(i);
// n1 a la valeur : 10101010
int n2=Integer.bitCount(i);
// compte le nombre de bits gals 1: 4
// Valeur dcimale du bit 1 le plus fort (puisance de 2)
n=Integer.highestOneBit(i);
// 27=128
// Valeur dcimale du bit 1 le plus faible (puisance de 2)
n=Integer.lowestOneBit(i);
//21=2

Exemple
rotateRight(481, 5)
481 is 0000 0000 0000 0000 0000 0001 1110 0001
481 >>> 5 cuts off the last 5 bits, and adds 5 zeros at the start:
0000 0000 0000 0000 0000 0000 0000 1111 (15)
481 << -5 is the same as 481 << 27, so it cuts off 27 (32-5) leading bits
and adds 27 zeros at the end:
0000 1000 0000 0000 0000 0000 0000 0000 (134217728)

2014-2015

92

3.4 Long :
La classe Long possde trois constantes : Long.MAX_VALUE qui
vaut 263-1, Long.MIN_VALUE qui vaut -263 et Long.SIZE qui
vaut 64 le nombre de bits de la reprsentation d'un long.
La classe Long a les mmes mthodes que la classe Integer.
Exemple:

System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
System.out.println(Long.SIZE);

2014-2015

93

3.5 Float :
La classe Float possde les constantes : Float.MAX_VALUE qui vaut
(3.4028235E38), Float.MIN_VALUE qui vaut (1.4E-45), Float.SIZE qui
vaut 32 le nombre de bits de la reprsentation d'un Float, Float.NaN une
reprsentation de NotANumber, Float.POSITIVE_INFINITY qui
reprsente + et Float.NEGATIVE_INFINITY qui reprsente - .
Des mthodes permettent de voir un int comme un float et inversement.
Exemple:

float f1 = 1.2345f;
System.out.println(Float.MAX_VALUE);

// 3.4028235E38

System.out.println(Float.MIN_VALUE);

// 1.4E-45

System.out.println(Float.SIZE);
// 32
System.out.println(Float.NaN);
// NaN
System.out.println(Float.POSITIVE_INFINITY);
System.out.println(Float.NEGATIVE_INFINITY);

// Infinity
// - Infinity

3.6 Double :
La classe Double possde les constantes : Double.MAX_VALUE qui vaut
(2-2-52)21023, Double.MIN_VALUE qui vaut 2-1074, Double.SIZE qui vaut
64 le nombre de bits de la reprsentation d'un Double, Double.NaN une
reprsentation de NotANumber, Double.POSITIVE_INFINITY qui
reprsente + et Double.NEGATIVE_INFINITY qui reprsente - .
Des mthodes permettent de voir un long comme un double et
inversement.
Exemple:

System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
System.out.println(Double.SIZE);
System.out.println(Double.NaN);
System.out.println(Double.POSITIVE_INFINITY);
System.out.println(Double.NEGATIVE_INFINITY);

4- Void :
La classe Void enveloppe le type primitif void. Cette classe est non
instantiable.

5- Boxing, Unboxing :
L'opration de boxing est l'opration qui permet de transformer un
type primitif en une instance de la classe enveloppante. L'opration de
unboxing est l'opration qui permet de transformer une instance de
classe enveloppante dans le type primitif qu'elle enveloppe.
Exemples:
Integer i = new Integer(26); i/2; // unboxing de Integer vers int
i = 79 ; // boxing de int vers Integer

2014-2015

96

Section 5: La classe System

2014-2015

97

La classe System

La classe System permet daccder aux ressources indpendantes


de la plate-forme du systme. Cest une classe dclare comme
final, qui ne peut donc pas donner naissance des sous-classes. Ses
mthodes et variables sont galement dclares comme statiques,
ce qui lui permet dtre disponible sans tre instancie.
Les mthodes de la classe System sont utiles dans de nombreux
cas. Une fonction importante consiste obtenir lheure du systme
avec la mthode currentTimeMillis. Il est galement possible
dextraire et de modifier les ressources du systme avec les
mthodes Get et Set. La classe System permet de forcer la
rcupration de place (Garbage collection) avec la mthode gc;
enfin, la classe System permet aux dveloppeurs de charger des
bibliothques de liens dynamiques avec la mthode loadLibrary.
2014-2015

98

Exemples
System.out.print("Temps actuel en millisecondes="+ System.currentTimeMillis());

// dmarrer le GarbageCollector
System.gc();
System.out.println("Cleanup completed...");
System.out.println("Program starting...");
// Charger une librairie dans le dossier Windows/System32
System.out.println("Loading Library...");
Runtime.getRuntime().loadLibrary("C:/Windows/System32/crypt32.dll");
System.out.println("Library Loaded.");
Rsultat:
Program starting...
Loading Library...
2014-2015
99
Library Loaded.

// Affiche les proporits du systme courant


Properties p = System.getProperties();
p.list(System.out); -- listing properties -java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\Program Files\Java\jdk1.6.0_06\jre...
java.vm.version=10.0-b22
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=US
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=Service Pack 2
java.vm.specification.name=Java Virtual Machine Specification
user.dir=C:\Program Files\Java\jdk1.6.0_06\bin
java.runtime.version=1.6.0_06-b02

2014-2015

100

Syntaxe: public static String setProperty(String key, String value)


key Le nom du systme.
value La valeur du systme.
// Modifier la version de lenvironnement Java
System.out.println(System.getProperty("java.runtime.version" ));
System.setProperty("java.runtime.version", "Java Runtime 1.6.0");
System.out.println(System.getProperty("java.runtime.version" ));
Rsultat:
1.6.0_22-b22
Java Runtime 1.6.0

2014-2015

101

Suite
Laspect le plus utile de la classe System est les variables quelle
dclare, qui permettent davoir une interaction avec le systme.
On y trouve les variables in, out et err.
La variable in reprsente le flux dentre standard du systme,
alors que la variable out reprsente le flux de sortie standard. La
variable err est le flux derreur standard.
Les flux sont dcrits en dtail dans la section consacre au
paquet des E/S.
Exemple:
System.out.println("File opened...");
System.err.println("File opening failed:");
Nous allons voir la variable in dans le chapitre des flux des
entre-sortie.

2014-2015

102

Section 6: Transtypage

2014-2015

103

Prsentation [9]
Dans certains cas, il est ncessaire de convertir un type de
variable en un autre type, cest le transtypage.
Lexemple suivant montre comment la variable renvoye par
une mthode, de type int, peut tre transtype en type float :
float f = (float) retourInt();
Remarque:
Soyez prudent lors des transtypages, car il y a des risques de
perte dinformations. En rgle gnrale, le type cible du
transtypage doit avoir une taille au moins gale au type initial.

2014-2015

104

Transtypages autoriss

Le tableau suivant montre les transtypages qui ne risquent


pas de provoquer des pertes dinformations :

Type initial
byte

Transtypage
short, char, int, long, float, double

short
char
int

int, long, float, double


int, long, float, double
long, float, double

long
float

float, double
double
2014-2015

105

Transtypage implicite

Dans certains cas, un transtypage peut tre


implicitement par le compilateur. Voici un exemple :

ralis

if (3 > 'a') {
}

Dans ce cas, la valeur a est convertie en nombre entier


(valeur ASCII de la lettre a) avant dtre compare au
nombre 3.

2014-2015

106

Section 7: Rgles de porte

2014-2015

107

Dfinition [9]

Les rgles de porte dterminent o est reconnue une variable


dans un programme. Les variables appartiennent deux
catgories de porte principales :
Variables globales : Variables reconnues tout au long du
programme.
Variables locales : Variables reconnues uniquement dans le
bloc de code o elles sont dclares.

La rgle de porte gnrale : une variable dclare dans un


bloc de code nest visible que dans ce bloc et dans les blocs
qui y sont imbriqus.

2014-2015

108

Exemple:
class Porte {
int x = 0;
void mthode1() {
int y;
y = x;
}
void mthode2() {
int z = 1;
z = y;
}
}

//correct

//incorrect!

2014-2015

109

Rfrences
[1] : https://www.java.com/fr/download/faq/release_dates.xml
[2] : http://refg.tu-sofia.bg/JavaCours/OOP.html
[3] : http://refg.tu-sofia.bg/JavaCours/OOP.html
[4] : http://fr.wikipedia.org/wiki/Environnement_d%27ex%C3%A9cution_Java
[5] : http://fr.wikipedia.org/wiki/Bytecode_Java
[6] : http://fr.wikipedia.org/wiki/Machine_virtuelle_Java
[7] : http://fr.openclassrooms.com/forum/sujet/compile-vs-interprete-26416
[8] : http://refg.tu-sofia.bg/JavaCours/OOP.html
[9] : http://www.i3s.unice.fr/~riveill/cours/langage/99-java-intro.pdf
[10] : http://imss-www.upmf-grenoble.fr/prevert/Prog/Java/CoursJava/ChainesDeCaracteres.html
[11] : http://imss-www.upmf-grenoble.fr/prevert/Prog/Java/CoursJava/enveloppes.html
[12]: http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html
[13]: http://www.coderanch.com/t/377888/java/java/intValue-ParseInt
110