Академический Документы
Профессиональный Документы
Культура Документы
Introduction : Java est une technologie qui est la fois un langage de programmation purement oriente objet et une plate-forme dexcution. Le langage Java a la particularit principale dtre portable sur plusieurs plates-formes (matriels et systmes dexploitation). Le langage Java fut officiellement prsent 1995 par Sun. Le langage reprend en grande partie la syntaxe des langages C et C++, trs utiliss par les informaticiens. En Java, tout est objet lexception des types primitifs (nombres entiers, rels, caractres, etc.). Le langage Java permet de dvelopper des applications autonomes et aussi des applications client-serveur. Ct client, les applets sont lorigine de la notorit du langage. Cest surtout ct serveur que Java sest impos dans le milieu de lentreprise grce aux servlets et aux JSP (Java Server Pages). Les applications Java peuvent tre excutes sur tous les systmes dexploitation pour lesquels a t dveloppe une plateforme Java, dont le nom technique est JRE (Java Runtime Environment : Environnement dxcution Java). Le JRE est constitu : - dune JVM (Java Virtual Machine : Machine Virtuelle Java) qui interprte le code compil de Java (appel bytecode). - dune bibliothque standard partir de laquelle doivent tre dvelopps tous les programmes en Java.
Historique
1995 : lancement officiel de Java 1.0 1996 : lancement du JDK 1.0 et des versions 1.01 et 1.02 de Java (250 classes dans la bibliothque). 1998 : version 1.1 du JDK (500 classes). 1999 : version 1.2 JDK que lon appelle Java2 (1500 classes) 2000 : version de J2SE (Java 2 Standard Edition) 1.3 (1800 classes) 2002 : version de J2SE (Java 2 Standard Edition) 1.4 (2700 classes). 2003 : version de J2EE (Java 2 Entreprise Edition) 1.4. 2004 : version du J2SE 1.5 appel J2SE 5.0 ou Java 5 (3500 classes). 2006 : version du J2SE 1.6 appel J2SE 6.0 ou Java 6.
Une classe contient une ou plusieurs mthodes. Par exemple dans la classe Chien, la mthode aboyer() va contenir des instructions spcifiant la facon dont un chien aboie. Les mthodes sont obligatoirement dclares dans une classe. Excution dun programme Java Source Compilation Excution On cre un document On compile le(s) fichier(s) source(s) Lexcution est lance en source avec une avec le programme javac, par utilisant le programme java extension .java, par exemple javac Toto.java. Si la avec le nom du fichier exemple Toto.java compilation a russi, un fichier principal du programme .class Toto.class est cr, ce fichier sans lextension .class. Par est constitu de byte-code. exemple java Toto. La machine virtuelle Un programme sexcute en lanant la JVM sur le fichier principal (Toto.class). Ce fichier contient du byte code et la JVM traduit ce byte code en code machine comprhensible par la plateforme sous-jacente et excute le programme. Lorsque la JVM dmarre elle cherche la classe spcifie lexcution, puis elle recherche une mthode spciale la mthode main qui ressemble exactement ceci :
public static void main(String [] args) { //le code de la mthode main }
La JVM excute ensuite tout ce qui se trouve entre les accolades { } de la mthode main. La mthode main Toute application java a au moins une mthode main. Attention, pas une par classe, mais au moins une par application. La mthode main correspond lendroit o le programme commence sexcuter. Voici un exemple de programme complet :
public class PremierExemple{ public static void main(String [] args) { System.out.println("Bonjour tous"); System.out.println("Cest mon premier exemple de classe en java"); } }
1. Enregistrement de la classe dans le fichier PremierExemple.java 2. Compilation : javac PremiereExemple.java 3. Excution du programme : java PremiereExemple 4. Le rsultat du programme :
Bonjour tous Cest mon premier exemple de classe en java
Taille
1 2 4 8
Valeur minimale
-128 : Byte.MIN_VALUE -32768 : Short.MIN_VALUE -2,147,483,648 : Integer.MIN_VALUE Long.MIN_VALUE
Valeur maximale
127 : Byte.MAX_VALUE 32767 : Short.MAX_VALUE Integer.MAX_VALUE Long.MAX_VALUE
Les constantes peuvent scrire sous forme dcimale (548, -78, +5), ou sous forme hexadcimale en prcisant la valeur de 0x ou 0x (0x1A 0X12), ou octale en faisant prcder la valeur de 0 (032, 05). Une constante entire est forcment de lun des types int ou long. On peut forcer une constante tre du type long en faisant suivre sa valeur de la lettre l ou L, exemple 25L. Le compilateur rejettera toute constante ayant une valeur suprieure la capacit du type long. Les flottants/rels (float ou double) Il en existe deux sortes. Le tableau suivant dcrit chacun deux avec leur nom, la taille occupe en mmoire en octets, la prcision correspondant au nombre de chiffres significatifs pris en compte dans la partie dcimale, la valeur minimale et la valeur maximale possible avec la constante correspondante dans le langage. Nom
float double
Taille
4 8
Prcision
7 15
Pour les constantes, il existe deux notations : la notation dcimale : 12.43 -0.38 -.38 4. .27 la notation exponentielle : 4.25E4 ou 4.25e+4 pour 4.25 104 54.2e-32 pour 54.2 1032 48e13 pour 48 1013 Par dfaut toutes les constantes cres sont de type double, pour forcer avoir un type float on fait suivre la valeur de la lettre f, exemple : 12.5f Le type caractre (char) Les caractres, dsigns par le type char, sont cods sur 2 octets, notation dune constante caractre : a, B, , +. Exemple
char lettre=a;
Certains caractres avec notation spciale (squences dchappement) : \b : pour le retour arrire (backspace) \r : pour un retour chariot \t : pour une tabulation \" : pour un guillemet \n : pour un saut de ligne \ : pour une apostrophe \f : pour un saut de page \\ : pour le caractre \. Le type boolen (boolean) Il sert reprsenter une valeur logique de type vrai ou faux, il existe deux valeurs possibles pour un boolen en java : true et false (pour vrai et faux). Exemple :
boolean estOrdonne=false;
En JAVA, les valeurs logiques ne sont pas reprsentes par des valeurs mais par un type spcifique : le type boolean. Dclaration de variables : Syntaxe : <type> <nomVariable> ; Exemple :
int age, num ; float moyenne ; char sexe ;
En JAVA, les dclarations peuvent apparatre nimporte quel endroit du programme. Dun point de vue mthodologique, il est souvent conseill deffectuer la dclaration de toutes les variables (importantes) ensembles au dbut puis de les initialiser avant de les utiliser. Remarque : Les variables nayant pas reu de valeur ne peuvent pas tre utilises sous peine daboutir une erreur de compilation. Il est donc important de penser initialiser les variables ds leur cration. Initialisation de variables : Syntaxe : <type> <nomVariable> = <valaurInitiale>; Exemple :
int age=18 ; char sexe=f ;
Dclaration des constantes : Le mot cl final Pour indiquer quune variable ne peut pas tre modifie pendant lexcution dun programme, on peut utiliser le mot cl final :
final int nombreDeMois=12 ;
Toute modification de la constante nombreDeMois, ayant 12, est rejete par le compilateur.
Oprateurs et expressions
Oprateurs arithmtiques Il existe cinq oprateurs principaux : + : addition a+b - : soustraction a-b / : division a/b * : multiplication a*b % : modulo, a % b calcule le reste de la division de a par b. Le problme de la conversion de type : float x, res ; int n, p ; res=n*x+p ; La variable n tant de type int, x de type float, le compilateur converti n en float puis faire le calcul. Le rsultat final est alors de type float. La hirarchie de conversion permettant de ne pas modifier la valeur initiale : int long float double. Remarque: par dfaut, pour les types byte, char, short, si un de ces types apparat dans une expression, la valeur est dabord convertie en int. Oprateurs de comparaison Ils servent faire des comparaisons relatives et sont principalement utiliss dans les tests conditionnels. < : infrieur strictement >= : suprieur ou gal <= : infrieur ou gal == : gal > : suprieur ! = : diffrent de. Oprateurs logiques Ces oprateurs permettent de manipuler des valeurs logiques. ! : ngation && : ET logique || : OU logique (a < b) && (c < d): cette expression retourne la valeur true (vrai) si les deux expressions a < b et c < d sont toutes les deux vraies, la valeur false (faux) dans le cas contraire. (a < b) || (c < d) : retourne la valeur true si lune au moins des deux conditions a < b ou c < d est vraie, la valeur false dans le cas contraire. !(a < b) retourne la valeur true si la condition a < b est fausse, la valeur false dans le cas contraire. Cette expression possde en fait la mme valeur que a >= b.
Oprateurs daffectation Loprateur daffectation est not : = Exemples : c=b+3 ; c=a ; Loprateur possde une associativit de gauche droite, ainsi dans lexpression i = j = 5 ; on value j=5 dabord, puis i=j, i et j ont la fin la mme valeur qui est 5. Remarque : Attention aux problmes de conversion, supposons que nous ayons une variable de type int n et une variable de type float x, lexpression n=x+5 ; est rejete par le compilateur. Il faut en fait crire n=(int) x + 5 ;. Il est ncessaire de faire une conversion explicite. Les conversions pour lesquelles il ny a pas besoin de faire une conversion explicite sont les suivantes : byte short int long float double Lincrmentation et la dcrmentation. Ces oprations consistent respectivement augmenter une variable (en gnral entire) 1 et diminuer une variable de 1 (i = i-1 ; n = n+1 ;). Ces oprations sont dfinies par les oprateurs ++ et -- : i-- ; n++ ; ou --i ; ++n ;. Il existe cependant un diffrence suivant o est plac loprateur lors de lvaluation dune expression, sil est plac avant (on parle doprateur prfix) la variable lopration est effectue avant lvaluation de lexpression, sil est plac aprs (on parle doprateur postfix) lopration est effectue aprs. n= ++i -5 ; : on affecte dabord la valeur 6 i puis la valeur 1 n. n= i++ - 5 ; : on affecte dabord la valeur 0 n puis la valeur 6 i. Affectation largie, les instructions suivantes sont quivalentes : i = i + k ; et i+=k ; Il existe la mme chose avec les oprateurs *, / et -.
Exemple : Dans l'instruction: res = 2*(5+1)*3+4*2; L'ordinateur value d'abord l'expression entre parenthses, ensuite les multiplications, ensuite l'addition et enfin l'affectation.
Conversion de types
Conversion automatique La grande souplesse du langage Java permet de mlanger des donnes de diffrents types dans une expression. Avant de pouvoir calculer, les donnes doivent tre converties dans un mme type. La plupart de ces conversions se passent automatiquement. Le programmeur doit quand mme prvoir leur effet. Lorsque lon dsire convertir un type vers autre qui a une taille de reprsentation infrieure, les rgles suivantes sappliquent : entier vers entier (long vers int, short vert byte, . . .) les octets les moins significatifs sont conservs. double vers float : arrondi au plus proche. flottant vers entier : il y a dabord un arrondi au plus proche dans le type long ou int, puis on effectue la conversion en conservant les octets les moins significatifs. Remarque : Lors d'une affectation, la donne droite du signe d'galit (affectation) est convertie dans le type gauche du signe d'galit. Dans le cas o il peut y avoir perte de prcision si le type de la destination est plus faible que celui de la source, une conversion force est obligatoire (sinon erreur de compilation). Conversion de type force (casting) Parfois il est ncessaire de convertir une donne dans un type diffrent de celui que choisirait la conversion automatique; dans ce cas, nous devons forcer la conversion l'aide d'un oprateur spcial ("cast"). Donc, il est possible de convertir explicitement une valeur en un type quelconque en forant la transformation l'aide de la syntaxe: (<Type>) <Expression> Exemple :
int nb1=5, nb2=2; float res; res = (float)nb1/nb2; res= 2.5
Remarque: Les contenus de nb1 et de nb2 restent inchangs; seulement les valeurs utilises dans les calculs sont converties. Les lments spcifiques au langage Java Parmi les points abords ci-dessus, quatre sont plutt spcifiques au langage JAVA. Le mot cl final qui permet de dclarer des constantes laide de variables. Le type byte qui permet de reprsenter des entiers entre -128 et 127. Le type boolean pour reprsenter les valeurs true (vrai) et false (faux). Tous les tests conditionnels doivent tre compatibles avec le type boolean. Mettre une valeur entire dans un test provoque une erreur de compilation en Java (par exemple if(2)... est interdit). 8
Les conversions de type doivent tre explicites en java chaque que lon veut convertir un type gnral vers une reprsentation plus petite. Exemple :
int n=2; float x=1.0; n=(int) x;
Un autre lment est trait de manire spcifique en Java : le type chane de caractres (String). Une introduction est propose dans la section suivante. Une premire introduction au type String En Java, les chanes de caractres sont dfinies sous forme dobjet par un type spcifique : la classe String. Nous prsentons ici une courte introduction, nous reviendrons sur ce type plus tard. Dclaration String salutation = "bonjour"; Une chane de caractre constante se dclare toujours entre guillemets "... ". Connatre la longueur dune chane : length int taille = salutation.length(); Accs un caractre : charAt char c1 = salutation.charAt(0); char c2 = salutation.charAt(2); La variable c1 contient le caractre b, la variable c2 contient le caractre n. Concatnation : loprateur + String ch1 = "Bonjour"; String ch2 = " tous"; String ch = ch1 + ch2; La variable (objet) ch contient la chane Bonjour tous. Impression dune chane de caractres System.out.println(salutation); System.out.println(ch1+ch2); System.out.println(ch); Comparaison de chanes : equals La mthode equals qui teste lgalit de deux chanes de caractres retourne true ou false: ch1.equals(ch2) ou ch1.equals("Bonjour"). La mthode compareTo pour comparer deux chanes de caractres dans lordre lexicographique (alphabtique) : ch1.compareTo(ch2) renvoie un entier strictement ngatif si ch1 est situe avant ch2 dans lordre lexicographique. renvoie un entier strictement positif si ch1 est situe aprs ch2 dans lordre lexicographique. 0 si ch1 contient la mme chane que ch2.
if - else Syntaxe: if ( <condition> ) <bloc d'instructions 1> else <bloc d'instructions 2> Si la <condition> fournit la valeur true, alors le <bloc d'instructions 1> est excut. Si la <condition> fournit la valeur false, alors le <bloc d'instructions 2> est excut. Exemple: if (a > b) max = a; else max = b; Remarque : En combinant plusieurs structures if - else en une expression nous obtenons une structure qui est trs courante pour prendre des dcisions entre plusieurs alternatives: if ( <condition1> ) <bloc1> else if (<condition 2>) <bloc2> else if (<condition 3>) <bloc3> else if (<condition N>) <blocN> else <blocN+1>
10
Exemple:
public class MontantTTC { public static void main(String [] args) { double tauxTva=0.2; double ht, ttc, net, tauxRemise, remise; ht=200.5; ttc=ht * (1 + tauxTva); if(ttc < 1000.0) tauxRemise=0.; else if(ttc < 2000) tauxRemise=1.; else if(ttc < 5000){ tauxRemise=2.; System.out.println("Message: Prix ttc entre 2000 et 5000"); } else{ tauxRemise=5.; System.out.println("Message: Prix ttc suprieur a 5000"); } remise = ttc * tauxRemise/100; net = ttc - remise; System.out.println("Prix ttc: "+ttc); System.out.println("Remise: "+remise); System.out.println("Net a payer: "+net); } }
Oprateurs conditionnels ( ? :) Syntaxe <condition>? <expression1> : < expression2> ; Si la condition est vraie alors expression1 est fournie comme rsultat, sinon expression2. Exemple : Linstruction
max = a<b ? a :b ;
Si a < b, alors la variable max reoit la valeur de la variable a, sinon elle reoit la valeur de b. switch Linstruction switch (branchement) est une instruction de choix, permettant de tester plusieurs valeurs dune expression. Lexpression peut tre de type byte, short, char ou int. Syntaxe :
11
switch(<expression>) { case constante_1: <suite dinstructions1> case constante_2: <suite dinstructions2> case constante_n: <suite dinstructionsn> [default: suite dinstructions] } Exemple :
public class ExoSwitch{ public static void main(String [] args) { int n; n=Integer.parseInt(args[0]); switch(n) { case 0: System.out.println("zero"); break; case 1: System.out.println("un"); break; case 3: System.out.println("trois"); break; default: System.out.println("autre!"); } System.out.println("Fin du programme"); } }
12
do-while Il sagit dune boucle faire-tant que similaire la boucle while sauf que la condition est value aprs chaque parcours de boucle. La boucle do-while est excute au moins une fois, alors que la boucle while peut ne jamais tre excute. Syntaxe : do { <instructions> }while(<condition>); Exemple:
public class BoucleDoWhile{ public static void main (String [] args){ int i=1; System.out.println("Avant la boucle"); do{ System.out.println("Dans la boule, la valeur de i est "+i); I++; }while(i<10); System.out.println("Aprs la boucle"); } }
Remarque : En pratique, la boucle do - while n'est pas si frquente que while; mais dans certains cas, elle fournit une solution plus lgante. Une application typique de do - while est la saisie de donnes qui doivent remplir une certaine condition.
13
for La structure for en Pascal et la structure pour en langage algorithmique sont utilises pour faciliter la programmation de boucles de comptage. La structure for en C est plus gnrale et beaucoup plus puissante. Syntaxe : for ( <initialisation> ; <condition> ; <compteur> ) <bloc d'instructions> La partie < initialisation > est value une fois avant le parcours de la boucle (avant dentrer dans la boucle). Elle est utilise pour initialiser les donnes de la boucle. La <condition> est value avant chaque excution de la boucle. Elle est utilise pour dcider si la boucle est rpte ou non. Le <compteur> est valu la fin de chaque itration de la boucle. Cette partie est utilise pour changer les donnes de la boucle. Exemple:
public class ExoFor { public static void main (String arg[]) { for(int i=1; i<=5; i++) { System.out.print("Bonjour: "); System.out.println(i + "fois"); } } }
14
15
Remarques globales Les instructions se terminent par un point virgule ;. Les blocs de code sont dfinis entre accolades {}. On dclare une variable avec un nom et un type : int x;. Un oprateur daffectation est avec un seul signe : =. Un oprateur dgalit est avec deux signes : ==. Lorsque lon crit du code, il est impratif de respecter les rgles dindentation : les instructions lintrieur dun bloc doivent tre dcales droite, cest galement lorsque lon utilise une structure de contrle. La dfinition de mthodes et dattributs de classes doivent tre indents par rapport la dfinition de la classe elle-mme. Pensez commenter votre code et bien dcrire ce que font vos fonctions et quoi servent vos classes ! ...
16