Cours Java
Cours Java
Cours Java
Par M.youssfi
Natifs
Byte Code
JIT(Just In Time)
Byte Code
JIT
Code source
Code source
Code source
Compilation
Compilation
Compilation
Programme objet
Byte Code
Byte Code
Edition de lien
Programme.Exe
Interprtation par
La JVM en mode byte code
(Traduit en code machine
et excute instruction par
Instruction )
Interprtation par
La JVM en mode JIT
(Traduit tout le programme
Byte Code en programme
machine puis lexcute )
Installation de java
Configuration de l environnement
Premire Applet
public class PApplet extends java.applet.Applet {
public void init() {
add(new java.awt.Label("a marche !"));
}}
Les primitives
Java dispose des primitives suivantes :
Primitive
char
byte
short int long
float
double
boolean
void
tendue
Taille
0 65 535
-128 +127
32 768 +32 767
2 147 483 648 + 2 147 483 647
de - 2 63 (+ 2 63 - 1), soit de - 9 223 372 036 854 775 808
16 bits
8 bits
16 bits
32 bits
64 bits
32 bits
64 bits
1 bit
0 bit
de 1.4E-45 3.40282347E38
de 4.9E-324 1.7976931348623157E308
true ou false
-
Character
Byte
Short
Integer
Long
Float
Double
Boolean
Void
BigInteger BigDecimal
String
Primitive
char
byte
short
int
long
float
double
boolean
-
int i = 12;
char c = a;
doublevaleurFlottanteEnDoublePrcision
23456.3456;
boolean fini = true;
Primitives
Le casting (mot anglais qui signifie moulage), galement appel cast ou,
parfois, transtypage, consiste effectuer une conversion d'un type vers
un autre type. Le casting peut tre effectu dans deux conditions
diffrentes :
Vers un type plus gnral. On parle alors de sur-casting ou de surtypage.
Vers un type plus particulier. On parle alors de sous-casting ou de soustypage.
Primitives
Exemples :
Casting implicite :
b=a;
Casting explicite
b=(long)a;
Casting explicit :
Oprateurs
Oprateur d affectation:
x=3;
x=y=z=w+5;
pour la comparaison ( if x = = 5 )
+
addition
soustraction
*
multiplication
/
division
%
modulo (reste de la division)
Oprateurs
exemples de racourcis:
x = x + 4; ou x+=4;
z = z * y; ou Z*=y;
v = v % w; ou v%=w;
==
<
>
<=
>=
!=
quivalent
plus petit que
plus grand que
plus petit ou gal
plus grand ou gal
non quivalent
Oprateurs
&&
||
!
Et (deux oprandes)
Ou (deux oprandes )
Non (un seul oprande)
Structures de contrle
L'instruction conditionnelle if
if (expression) {
instruction1;
}
else {
instruction2;
}
Structures de contrle
Structures de contrle
L'instruction switch
Structures de contrle
La boucle for
Exemple :
for (int i = 2; i < 10;i++) {
System.out.println("Vive Java !");
}
Structures de contrle
continue:
for (int i = 0; i < 10; i++) {
if (i == 5) continue;
System.out.println(i);
}
Structures de contrle
L instruction While
while (condition){
BlocInstructions;
}
L instruction do ..
while
do{
BlocInstructions;
}
while (condition);
Exemple :
int s=0,i=O;
while (i<10){
s+=i;
i++;
}
Exemple :
int s=0,i=O;
do{
s+=i;
i++;
}
while (i<10);
Objet et classe
Hritage
Encapsulation (Accessibilit)
Polymorphisme
Un Fichier
dmarrer()
acclrer()
freiner()
Etat
Comportement
Classe
Employ
code
: int
nom
: String
nbEmploys : static int
Trois attributs de la classe Employ
Attributs :
Employ
code
: int
nom
: String
nbEmploys : static int
Trois attributs de la classe Employ
: Employ
code =1
nom ="jamil"
: Employ
code =2
nom ="alami "
Dfinition :
Mthodes :
Mthodes : Exemple
Attributs :
code
: int
nom
: String
nbEmploys : static int
Constructeur :
Employ()
Mthodes :
afficheCode():void
afficheNom():void
Reprsentation graphique de
la classe Employ En UML
Constructeur
ex : new Employ();
Handle :
alpha
Addresse de lobjet
Objet :
:Employe
code=1
nom= "jamil "
afficheCode()
afficheNom()
Exemple Test
class TestEmploye{
public static void main(String[] args){
new Employe();
Employe e2 ;
e2=new Employe();
Employe e3=new Employe();
e2.nom="Jamil";
e2.afficheCode();
e2.afficheNom();
e3.afficheCode();
System.out.println("Nombre d'employs en utilisant l'objet e2="+e2.nbEmployes);
System.out.println("Nombre d'employs en utilisant l'objet e3="+e3.nbEmployes);
System.out.println("Nombre d'employs en utilisant la classe Employe="+Employe.nbEmployes);
}
}
Exemple Test
class Employ
Attributs :
code : int
nom : String
nbEmploys : static int =2
Constructeur :
Employ()
Mthodes :
afficheCode()
afficheNom()
new Employe() ;
:Employe
Attributs :
code =1
nom =null
Employe e2 ;
e2=new Employe() ;
e2:Employe
Attributs :
code =2
nom =Jamil
afficheCode()
afficheNom()
afficheCode()
afficheNom()
Premier Objet
Deuxime Objet
afficheCode()
afficheNom()
Troisime Objet
Exercice1:Modlisation d un segment
class Segment
extr1
extr2
int extr1
int extr2
Segment(int a, int b)
void ordonne()
int longueur()
boolean appartient(int x)
String toString()
Exercice1:Modlisation d un segment
Questions:
extr1
extr2
Concepts de lhritage
Chien
Teckel
Labrador
Chat
Caniche
Canari
Concepts de lhritage
Animal
Attributs :
vivant
: boolean
ge
: int
Constructeur :
Animal(int a)
Mthodes :
crie()
vieillit()
meurt()
L'hritage
L'hritage
Surcharge
cet animal.");
+ " an(s).");
cet animal.");
+ " an(s).");
Surcharge
Surcharge
mthode(int a, long b)
mthode(long b, int a)
Surcharge
Surcharger le Constructeur.
Les constructeurs peuvent galement tre surchargs.
On peut crer deux constructeurs pour la classe Animal:
Animal() {
this(1);
}
Animal(int a) {
ge = a;
vivant = true;
System.out.println("Un animal de " + a
+ " an(s) vient d'tre cr");
}
Surcharge
Surcharger le Constructeur.
On peut galement constater que le premier
constructeur est un cas particulier du deuxime.
Un constructeur peut appeler un autre en
utilisant le mot this qui dsigne lobjet courant.
Animal() {
this(1)
}
Animal(int a) {
ge = a;
vivant = true;
System.out.println("Un animal de"+a+"an(s) cr");
}
Animal A1=new Animal();
Animal A2= new Animal(4);
Java
fournit
automatiquement
un
constructeur par dfaut.
Le constructeur par dfaut est le suivant :
NomDeLaClasse() {}
Rsum
class TestAnimaux {
public static void
main(String[] args) {
Canari titi = new Canari(3);
Canari mimi=new Canari() ;
titi.ageMaxi=5 ;
titi.vieillit();
titi.crie();
titi.vieillit(4);
mimi.vieillit(5);
mimi.crie() ;
}
}
class Animal {
boolean vivant;
int ge;
int geMaxi = 10;
Animal(int a) {
ge = a;
vivant = true;
System.out.println("Un animal de " + a
+ " an(s) vient d'tre cr");
}
Animal() {
this(1);
}
Programme Test
void vieillit(int a) {
ge += a;
if (ge > geMaxi)
meurt();
else{
System.out.println("C'est l'anniversaire
de cet animal.");
System.out.println("Il a maintenant " +
ge + " an(s)");
}
}
void vieillit() {
vieillit(1);
}
void meurt() {
vivant = false;
System.out.println("Cet animal est
mort");
}
void crie() {
}
}
CompteBancaire(soldeInitial : rel)
deposer(montant : rel)
retirer(montant : rel)
getSolde() : rel
Accessibilit
Accessibilit : Exemple
Voiture
capacite
carburant
Accessibilit :
Exemple
Voiture
capacite
getCapacite()
carburant
getCarburant()
setCarburant(int c)
Accessibilit : Exemple
Voiture
v1:Voiture
- carburant : int
- capacit :int
- carburant =0
+ Voiture()
+ setCarburant(int c) : void
+ getCarburant() :int
+ getCapacite() :int
+ Voiture()
+ setCarburant(int c) : void
+ getCarburant() :int
+ getCapacite() :int
class Parc{
public static void main(String[] args){
Voiture v1=new Voiture();
v1.carburant=20; // interdit
v1.setCarburant(20) ; // solution
int car=v1.carburant ; // interdit
int car=v1.getCarburant() ; Solution
v1.capacite=100 ; // interdit de modifier
System.out.println(v1.capacite) ;interdit
System.out.println(v1.getCapacite()); Sol.
}
}
class Voiture{
private int carburant ;
private static int capacite=80 ;
Voiture(){
carburant=0 ;
}
public void setCarburant(int c){
if ((c<capacite)&&(c>0))
carburant=c ;
}
public int getCarburant(){
return carburant;
}
public int getCapacite(){
return capacite;
}
}
Accessibilit
L'instruction package:
L'instruction package:
package monpackage;
public class Test {
public class Employe { public static void main(String[] argv) {
int matricule;
new monpackage.Employe();
static int nombre;
}
public Employe() {
}
matricule = ++nombre;
afficherMatricule();
}
void afficherMatricule() {
System.out.println(matricule);
}
}
javac -d . Employe.java
permet de:
Application:
package a.b.c;
public class Employe {
int matricule;
static int nombre;
public Employe() {
matricule = ++nombre;
afficherMatricule();
}
void afficherMatricule() {
System.out.println(matricule);
}
}
L'instruction import
import java.awt.Button;
Cette instruction n'a pas pour effet de charger la classe Button, mais
simplement de la rendre disponible de faon plus simple.
Vous pouvez alors y faire rfrence sous la forme :
Si vous voulez "importer" toutes les classes d'un package, vous pouvez
utiliser la syntaxe : import java.awt.*;
Ainsi, toutes les classes du package java.awt seront accessibles sans
qu'il soit besoin de spcifier leur chemin d'accs.
jar cf archive.jar a
static :
class Voiture{
private int carburant ;
private static int capacite=80 ;
Voiture(){
carburant=0 ;
}
public setCarburant(int c){
if ((c<capacite)&&(c>0))
carburant=c ;
}
public int getCarburant(){
return carburant;
}
public static int getCapacite(){
return capacite;
}
}
final
Java ne dispose pas de constantes.
Ce n'est pas une limitation, car Java dispose d'un
mcanisme beaucoup plus puissant qui permet non
seulement d'utiliser une forme de constantes, mais
galement d'appliquer ce concept d'autres lments
comme les mthodes ou les classes.
Les variables final
Une variable dclare final ne peut plus voir sa valeur
modifie.
Ex : final float pi = 3.14;
Les variables final non initialises
abstract
Les Interfaces
Les Interfaces
transient
synchronized :
(Voir Threads)
native
( voir Srialisation)
Volatile
native
transient
volatile
private
protected
public
package
au mme package
aux classes drives de ces classes,
ainsi qu'aux classes appartenant aux mmes packages que les
classes drives.
Exercice
Un parc auto se compose des voitures et des camions qui ont des caractristiques
communes regroupes dans la classe Vehicule.
Chaque vhicule est caractris par son matricule, lanne de son modle, son prix.
Tous les vhicules ont le nombre de roues gale 4.
Lors de la cration dun vhicule, son matricule est incrment selon le nombre de vhicules
crs.
Tous les attributs de la classe vhicule sont supposs privs. ce qui oblige la cration des
accsseurs (get) et des mutateurs (set.).
La classe Vehicules possde galement deux mthodes abstraites demarrer() et accelerer()
qui seront dfinies dans les classes drives et qui afficheront des mssages personnaliss.
La mthode toString() de la classe Vehicule retourne une chane de caractres qui contient
les valeurs du matricule, de lanne du modle et du prix.
Les classes Voiture et Camion tendent la classe Vehicule en dfinissant concrtement les
mthodes accelerer() et demarrer() en affichant des messages personnaliss.
Les trois classes prcdentes appartiennent un package nomm igsi.parc
Crer la classe Vehicule.
Crer la classe Voiture.
Crer la classe Camion.
Crer une classe Test qui appartient au package par dfaut et qui permet de tester la classe
Voiture et la classe Camion.
class Lapin {
private static int nombre = 0;
private static int maxi = 3;
private boolean vivant = true;
private Lapin() {
System.out.println("Un lapin vient de natre.");
System.out.println("Vous possdez " + (++nombre) + "
lapin(s).");
}
public void passeALaCasserole() {
if (vivant) {
vivant = false;
System.out.println("Un lapin vient de passer la
casserole.");
System.out.println("Vous possdez " + (--nombre) + "
lapin(s).");
}
else {
System.out.println("Ce lapin a dj t mang !");
}
}
Rsum
Rsum (static)
Rsum (final)
Rsum (abstract)
au mme package
aux classes drives de ces classes,
ainsi qu'aux classes appartenant aux mmes packages que les
classes drives.
Rsum (public)
Rsum (protected)
Exercice : Vhicules
Des voitures
Des camions
Des Autocars
Vhicule
Voiture
Camion
Autocars
Exercice : Vhicules
Questions:
Polymorphisme
Polymorphisme
Polymorphisme
Instanciation et hritage
Polymorphisme
Le rsultat
est:
Cration
Cration
Cration
Cration
Ce fruit
affich
par
le
programme
d'un Fruit.
d'une Pomme.
d'un Fruit.
d'une Orange.
pese 107 grammes
Polymorphisme
Polymorphisme
Le sous-casting
Polymorphisme
Le sous-casting
Polymorphisme
Le "late binding"
Polymorphisme
Le "late binding"
Polymorphisme
Le "late binding"
Notre problme peut tout de mme tre rsolu grce au fait que Java
utilise une technique particulire pour dterminer quelle mthode doit
tre appele.
Dans la plupart des langages, lorsque le compilateur rencontre un
appel de mthode (ou de fonction ou procdure, selon la terminologie
employe), il doit tre mme de savoir exactement de quelle
mthode il s'agit.
Le lien entre l'appel et la mthode est alors tabli au moment de la
compilation. Cette technique est appele early binding, que l'on
pourrait traduire par liaison prcoce.
Java utilise cette technique pour les appels de mthodes dclares
final. Elle a l'avantage de permettre certaines optimisations.
En revanche, pour les mthodes qui ne sont pas final, Java utilise la
technique du late binding (liaison tardive). Dans ce cas, le
compilateur n'tablit le lien entre l'appel et la mthode qu'au moment
de l'excution du programme.
Ce lien est tabli avec la version la plus spcifique de la mthode. Dans
notre cas, il nous suffit d'utiliser une mthode pour chaque classe
(Pomme et Orange) ainsi que pour la classe parente Fruit, au lieu
d'une mthode statique dans la classe principale (Polymorphisme).
Ainsi, la mthode la plus spcifique (celle de la classe Pomme ou
Orange, selon le cas) sera utilise chaque fois que la mthode sera
appele avec un argument de type Fruit. Soit le programme suivant :
Polymorphisme
Le polymorphisme et les interfaces
interface Roland {
final static int
CAISSE_CLAIRE = 68,
GROSSE_CAISSE = 69,
CHARLEY_PIED = 72,
CHARLEY_MAIN = 74,
TOM_BASSE = 80;
}
interface T1 {
final static int
PIANO = 1,
GUITARE = 22;
// etc.
}
interface EX7 {
final static int
PIANO = 1,
ACCOUSTIC_BASS = 22;
// etc.
}
Ce programme affiche :
true
true
true
true
true
true
Polymorphisme
sa classe,
toutes les classes parentes de sa classe,
toutes les interfaces qu'il implmente,
toutes les interfaces parentes des interfaces qu'il
implmente,
toutes les interfaces qu'implmentent les classes
parentes de sa classe,
toutes les interfaces parentes des prcdentes.
Polymorphisme
Polymorphisme
Rsum
Association
Agence
grer
Client possder
Compte
Agence
1
0..1
M..N
*
0..*
1..*
Un et un seul
Zro ou un
De M N (entiers naturels)
De zro plusieurs
De zro plusieurs
D'un plusieurs
* 500
BNP
EVRY
indice 0
unClient:Client
500
Client
grer
changerDirecteur(...)
ajouterUnClient(...)
Agence
directeur : chane
adresse : chane
lesClients : Clients[500]
changerDirecteur(...)
ajouterUnClient(...)
nom : chane
ge : entier
vieillir()
changerNom(...)
Compte
possder
Client
nom
: chane
ge
: entier
compte : Compte
vieillir()
changerNom(...)
lesDpts : entier[100]
lesRetraits : entier[100]
dposer(...)
retirer(...)
Les Exceptions
Throwable
Error
Exception
Etc
Etc
ArithmenticException
IOExcption
Etc
Les exceptions sont des objets Erreur qui sont gnrs par un programme
java, quon peut attraper et traiter.
Par contre les objets Error ne peuvent tre ni traits ni prvus par le
programmeur (exemple les erreurs qui sont provoques par la machine
virtuelle java) .
Les Exceptions
Les deux types dexeptions de Java
En Java, on peut classer les erreurs en deux
catgories :
Les exeptions surveilles,
Les exeptions non surveilles.
Les Exceptions
Les Exceptions
Rsultat de lexcution :
Capture de l'exception
aprs le bloc try
La syntaxe, pour crer un objet de cette classe, pour le cas dune saisie
au clavier, est la suivante :
BufferedReader br =new BufferedReader(new
InputStreamReader(System.in));
Cela veut dire que cette mthode est susceptible de lancer une exception
de type IOException.
Cela est d au fait que les exceptions de type IOException sont surveilles et
doivent donc recevoir, de la part du programmeur, un traitement spcial. Ce
traitement peut prendre deux formes :
Dans ce cas :
Entres Sorties
Programme
Donnes
Flot dentre
Flot de sortie
Clavier
Donnes
Imprimante
Moniteur
Principe des
entres/sorties
Pour effectuer une entre ou une sortie de donnes en Java,
le principe est simple et se rsume aux oprations suivantes :
Streams
FileReader
File
Autoexec.bat
read()
sort
FileWriter
File
Write()
copie.bat
ent
BufferedReader
FileReader
File
readLine()
read()
bsort
sort
BufferedWriter
FileWriter
File
Write()
newLine()
Autoexec.bat
Write()
copie.bat
ent
BufferedReader
FileReader
readLine()
newLine()
f
File
read()
bsort
sort
BufferedWriter
FileWriter
File
Write()
Autoexec.bat
Write()
copie.bat
Streams de
communication
Un stream de communication tablit une liaison entre le programme et
une destination qui peut tre :
La mmoire :
Donnes binaires :ByteArrayInputStream, ByteArrayOutputStream,
StringBufferInputStream
Srialisation :
Donnes binaires : ObjectInputStream, ObjectOutputStream
Lecture anticipe
Donnes binaires : PushBackInputStream
Caractres : PushBackReader
Affichage et impression
Donnes binaires : PrintStream
Caractres : PrintReader
Interfaces graphiques
Composants AWT
Nous avons notre disposition
principalement trois types d'objets :
Java et JDBC
Application Java
JDBC
Oracle
MySQL
SQL Server
Cre
Connection
Cre
Statement
Cre
ResultSet
SQL
Lien tabli
vers la base
Donnes
Pilote
Base de donnes
Charger un pilote
Utiliser la mthode forName de la classe Class, en
prcisant le nom de la classe pilote.
Exemple: pour un pilote Jdbc-Odbc, on crira:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver ") ;