Académique Documents
Professionnel Documents
Culture Documents
Cours Java Smi Ige s5
Cours Java Smi Ige s5
Prof: S.KRIT
______________________________________________________________________________
SOMMAIRE
GL_IGE_SMI
Chapitre 1 GENERALITES SUR LE LANGAGE JAVA
GL_IGE_SMI
Chapitre 1 INTRODUCTION A JAVA
La classe : Abstraction d’un ensemble d’objets qui ont les mêmes caractéristiques
( attributs) et les mêmes comportements ( méthodes)
Exemple :
Une classe de nom Individu
Attributs : numeroCin, nom, prenom, dateNaissance, adresse
Méthodes : changeAdresse(), calculSalaire(),dateRetraite()..
Objets : Mohammed, Nadia, …
GL_IGE_SMI
1 – 2 L’encapsulation des données :
- Les données sont protégées à l’intérieur de chaque objet.
- Les données (publiques ,secrètes)
1- 3 L’Héritage
1- 4 Le Polymorphisme
Le polymorphisme permet la redéfinition d’une méthode
1 - 5 Le Multithreading
THREADS : processus qui s’exécutent simultanément à l’intérieur d’un
unique programme
GL_IGE_SMI
2-NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 1 Caractéristiques de JAVA
GL_IGE_SMI
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 1 Caractéristiques de JAVA
GL_IGE_SMI
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 2 Historique de JAVA
GL_IGE_SMI
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 2 Historique de JAVA
GL_IGE_SMI
3- ENVIRONNEMENT DE JAVA
GL_IGE_SMI
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Java évolue au fil des années. En plus de faire évoluer les
numéros de versions, le nom complet de chaque version a parfois été
changé. Les principaux événements de la vie de Java sont les
suivants :
Année Evénements
1995 mai : premier lancement commercial
1996 janvier : JDK 1.0.1
1997 février : JDK 1.1
1998 décembre : lancement de J2SE 1.2
1999 décembre : lancement J2EE
2000 mai : J2SE 1.3
2002 février : J2SE 1.4
2004 septembre : J2SE 5.0
mai : Java EE 5
2006
décembre : Java SE 6.0
GL_IGE_SMI
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Depuis sa version 1.2, Java a été renommé Java 2. Les
numéros de version 1.2 et 2 désignent donc la même version. Le JDK
a été renommé J2SDK (Java 2 Software Development Kit) mais la
dénomination JDK reste encore largement utilisée, à tel point que la
dénomination JDK est reprise dans la version 5.0.
En outre, Java 2 désigne les versions de J2SE 1.2 à J2SE 1.4
La version actuelle est Java SE 6 alors que la version Java SE 7 est
en cours de développement.
Compatibilité de version
Java assure une compatibilité binaire ascendante (les programmes
compilés avec une ancienne version peuvent s'exécuter avec une
plate-forme plus récente).
GL_IGE_SMI
3- ENVIRONNEMENT DE JAVA
GL_IGE_SMI
3- 4 Le code source
- Une application java est généralement composée de
plusieurs fichiers source. Les fichiers source de java ont
l’extension .java.
- Un fichier .java peut contenir plusieurs classes.
- Le nom du fichier source java doit être le même que celui
de la classe publique que ce fichier renferme (Un fichier java ne
peut pas contenir plus d’une classe publique)
3- 5La compilation
* Le byte code
- La compilation va transformer le code source en J-code ou byte-
code Java indépendant de toute plate forme
- La commande qui permet la compilation est la suivante :
Javac nom_fich.java
Création d’un ou plusieurs fichiers .class.
GL_IGE_SMI
3- 2- 3 La machine virtuelle java
- Le code java comprend des instructions écrites pour une certaine
machine virtuelle java (JVM : Java virtuel Machine)
- un programme java est exécutée sur tout ordinateur pour lequel une
machine virtuelle est disponible.
- Une application sera exécutée par l’interpréteur de java
Java nom_fich
Les fichiers .jar sont des fichiers java compressés comme les
fichiers .zip selon un algorithme particulier devenu un standard de fait
dans le monde des PC.
Ils sont parfois appelés fichiers d'archives ou, plus simplement,
archives.
Ces fichiers sont produits par des outils comme jar.exe. ( qui fait
partie du jdk) .
Les fichiers .jar peuvent contenir une multitude de fichiers
compressés avec l'indication de leur chemin d'accès.
Un fichier .jar peut ainsi être exécuté directement dans tout
environnement possédant une machine virtuelle
GL_IGE_SMI
4- LES PAQUETAGES (les packages)
* Organisation hiérarchique des classes en packages
* Regrouper plusieurs classes qui collaborent entre elles dans une
application
* Définir un certain niveau de protection
4- 1 Construction de package
- Pour ranger une classe dans un package, il faut insérer la ligne suivante
au début du fichier source:
package nomDuPaquetage ;
- Un paquetage qui doit contenir des classes et donc des fichiers est un
répertoire. le paquetage a le même nom que le répertoire qui le contient.
Exemples :
Java.lang.Math
Java.lang.System
Java.lang.String
4- 3 API de JAVA
- java.applet : utile pour faire des applets qui sont des applications
utilisables à travers le web
GL_IGE_SMI
5 - LES CLASSES JAVA
* l’en-tête
* le corps
GL_IGE_SMI
5- LES CLASSES JAVA
Modificateur Définition
public La classe est accessible par toutes les autres
classes des autres packages. Elle est visible
partout
private La classe n’est accessible qu’à partir du
fichier où elle est définie
final Les classes finales ne peuvent pas être
héritables
friendly l'accès est garanti à toute classe dans le
package.
abstract Aucun objet ne peut instancier cette classe.
Seules les classes abstraites peuvent
déclarer des méthodes abstraites. Cette
classe sert pour l’héritage
GL_IGE_SMI
5 - 3 Conventions d’écriture en JAVA
GL_IGE_SMI
5- 4 Un premier exemple
public class Premier
{
public static void main (String[ ] arg)
{
System.out.println( ‘‘bravo’’) ;
}
}
public : visible de partout , y compris des autres paquetages
GL_IGE_SMI
5- 4 Un premier exemple
GL_IGE_SMI
6- UTILISATION DES CLASSES
Pour utiliser une classe, elle doit être instanciée . Il y aura alors création d’un objet.
Mais avant de créer un objet , il faut le déclarer
NomClasse objet ;
7 - 1 Définition
GL_IGE_SMI
Exemple d’utilisation de constructeur
Employe_this(String nom)
{
this.nom=nom; // variable globale de la classe = variable locale
}
GL_IGE_SMI
7 – 2 La variable this
float salaireh ()
{ float s;
s=(taux_h*nb_h);
return s;
}
public static void main(String[] arg)
{ float s1,s2;
Employe_this emp1,emp2;
emp1=new Employe_this (" Mohammed");
emp2=new Employe_this ("Nadia");
emp1.nb_h= 35; // le nombre d’heures de l’employé 1
emp2.nb_h=38 ; // le nombre d’heures de l’employé 2
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh");
} // fin de main
} // fin de la classe
GL_IGE_SMI
Chapitre 2 LES OUTILS ELEMENTAIRES
POUR LA PROGRAMMATION JAVA
1- COMMENTAIRES EN JAVA
2- TYPES ELEMENTAIRES EN JAVA
3- LES PROPRIETES DES ATTRIBUTS
4- LES STRUCTURES DE CONTROLES
5- LES PROPRIETES DES METHODES
6- LES TABLEAUX
7- LA SAISIE AU CLAVIER
8- LES CHAINES DE CARACTERES
9– LES OPERATIONS SUR LES OBJETS
GL_IGE_SMI
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA
11 - Commentaires en java
GL_IGE_SMI
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA
GL_IGE_SMI
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA
GL_IGE_SMI
Java dispose également des classes suivantes pour gérer ces primitives :
Classe Primitive
______________________________
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean
GL_IGE_SMI
3- LES PROPRIETES DES ATTRIBUTS
3 - 1 Déclaration
Tous les objets d’une même classe ont les mêmes attributs,
mais chaque objet associe à ces attributs des valeurs qui lui sont
propres.
Avant d’utiliser un attribut, il doit être déclarée comme suit :
GL_IGE_SMI
3- LES PROPRIETES DES ATTRIBUTS
3 - 1 Déclaration
Modificateur Définition
GL_IGE_SMI
33-2 Identificateurs
A Chaque objet , classe, programme ou variable est associé un identificateur. Les
identificateurs Java sont formés d'un nombre quelconque de caractères. Ils doivent
respecter les règles suivantes :
- Les majuscules et les minuscules sont distinguées.
- Le premier caractère ne doit pas être un chiffre
- L’ identificateur ne doit pas être un mot clé de Java.
En plus des règles ci-dessus, il est conseillé de respecter les directives
suivantes :
_ - Evitez les caractères accentués dans les noms de classes.
- - Evitez de donner le même nom à des identificateurs d'éléments différents
GL_IGE_SMI
3-3 Mots clé de java
GL_IGE_SMI
Exemple1 : attribut statique
class Statique
{
int nons;
static int s;
}
public class UtiliseStatic
{
public static void main (String[] arg)
{
Statique.s=10;
Statique obj1= new Statique();
obj1.nons=20;
Statique obj2= new Statique();
obj2.nons=30;
obj2.s=15;//Pour tous ,les objets s=15
System.out.println(Statique.s); //15
System.out.println(obj1.s); //15
System.out.println(obj1.nons); //20
System.out.println(obj2.nons); //30
}
}
GL_IGE_SMI
Exemple2 : Calcul des moyennes des élèves ainsi que la
moyenne de la classe
class Moyenne
{ static int nb_eleves ; // nombre d’élèves
float note1,note2,note3; // notes des élèves
int num; // numéro de l'élève
String nom; // nom de l'élève
static float moyenne_classe;
float moyenne_eleve()
{ float som;
Som= (note1+note2+note3) /3;
return (som); } }
GL_IGE_SMI
Exemple2 :Calcul des moyennes des élèves ainsi que la moyenne de la classe
GL_IGE_SMI
System.out.println("Eleve : numéro : "+eleve1.num);
System.out.println("Nom : "+eleve1.nom+" Moyenne : "+moy1);
System.out.println("Eleve : numéro : "+eleve2.num);
System.out.println("Nom : "+eleve2.nom+" Moyenne : "+moy2);
Moyenne.moyenne_classe=(moy1+moy2)/ Moyenne.nb_eleves;
System.out.println("La moyenne de la classe est "+
Moyenne.moyenne_classe);
}
}
A l'exécution on aura :
Eleve 1 Nom : Adnane Moyenne : 14.3333
Eleve 2 Nom : Amal Moyenne : 15.3333
La moyenne de la classe est : 14.833
GL_IGE_SMI
-3-5 Les opérateurs de java
* Multiplication
/ division
% modulo
+ addition
- soustraction
= affectation
== identité
!= différent de
&& et logique
|| ou logique
++ incrémentation
+= - = *= /=
GL_IGE_SMI
3-6 – Les initialiseurs
GL_IGE_SMI
Exemple :
class Initialiseur
{
int a1; static int a2;
void m1()
{ int a3;
System.out.println(a3) ; //erreur car a3 non initialisée
}
public static void main(String[] arg)
{ System.out.println("a2="+a2);
Initialiseur obj= new Initialiseur();
System.out.println("obj.a1="+obj.a1);
obj.m1();
}
}
GL_IGE_SMI
Pour des initialisations plus complexes, on peut utiliser un
bloc placé à l’extérieur de toute méthode ou constructeur
Par exemple, float e
{
if (b != 0 )
{ e = (float) a /b ; }
}
GL_IGE_SMI
3-7 Les attributs constants
class Constantes
{
final int C ; /* déclare une constante d’instance qui peut être
initialisée dans le constructeur */
On obtient à l’exécution :
2
100
GL_IGE_SMI
4- Les structures de contrôle
a – L’instruction if
if (expression)
InstructionSiVrai ;
else
InstructionSiFaux
b- L’opérateur ?
condition ? siVrai : siFaux
Exemple : int a, b ;
int min = a<b ? a : b
GL_IGE_SMI
c- L’instruction switch
switch (variable)
{ case cas1 : instruc11 ;
instruc12 ;
.
break ;
case cas2 : instruc21 ;
instruc22 ;
.
break ;
.
default : instrDefault ;
}
GL_IGE_SMI
Les instructions de répétition
a – L’instruction while
while (condition)
instruction ;
b – L’instruction do
do
instr ;
while (condition)
c – L’instruction for
for ( initialisation, ; test ; incrementation)
GL_IGE_SMI
5- Les propriétés des méthodes
les méthodes sont les fonctions qu’on peut appliquer aux objets.
Elles permettent de changer l’état des objets ou de calculer des valeurs
Plusieurs méthodes d’une même classe peuvent avoir le même
nom, mais des paramètres différents ( surcharge) .
Le nom et le type des paramètres constituent la signature de la
méthode. Une méthode peut elle aussi posséder des modificateurs.
GL_IGE_SMI
Modificateur Définition
NomClasse.nomMethodeStatique(arguments)
nomObjet.nomMethodeStatique(arguments)
GL_IGE_SMI
5-3 – La surcharge
GL_IGE_SMI
EXEMPLE
class Surcharge
{ int n ;
double x ;
Surcharge( )
{
n=1;
x = 3.5 ;}
Surcharge(int n, double x)
{
this.n = n ;
this.x = x ;
}
int operation(int p)
{ return 10*p +n ;}
double operation (double y , int p)
{ return x*p + y ; }
double operation(int p, double y )
{ return (double) n/p + y ; }
}
GL_IGE_SMI
public class EssaiSurcharge
{
public static void main (String[] arg)
{
Surcharge surcharge ;
surcharge = new Surcharge( ) ;
System.out.println (surcharge.operation (2)) ;
System.out.println (surcharge.operation (1.5 , 4)) ;
System.out.println (surcharge.operation (4 , 1.5)) ;
surcharge = new Surcharge(7 , 2.0) ;
System.out.println (surcharge.operation (2)) ;
}
}
GL_IGE_SMI
remarque :
si on ajoute l’instruction : (surcharge.operation (4 , 5)) ; il
y’aura erreur de compilation car ambiguité .Par contre s’il
n’y avait pas de surcharge (une seule méthode double
operation (double y , int p) ) cette même instruction ne
génerera pas d’erreur car transtypage automatique
GL_IGE_SMI
6 – Les tableaux 65
Les tableaux en java sont des structures pouvant contenir un nombre fixe d ’éléments de
même nature. Chaque élément est accessible grâce à un indice correspondant à sa position dans
le tableau.
Les tableaux doivent être déclarés comme tous les objets. Java dispose de deux syntaxes
équivalentes pour la déclaration des tableaux,
type_elements[ ] tableau;
ou
type_elements tableau[ ] ;
Comme tout objet java un tableau doit être crée après sa déclaration. Les tableaux java sont
de taille fixe.La création doit indiquer leur taille. La syntaxe à utiliser est la suivante :
x = new type[ dimension];
dimension est le nombre d'éléments que le tableau pourra contenir.
GL_IGE_SMI
Exemple :
class TableauA
{ public static void main(String[] arg)
{
int[] tableau ;
tableau = new int[2];
tableau[0]=-5;
tableau[1]= 8
for(int i=0 ;i<2 ;i++)
System.out.println(tableau[i]);
}
}
Autre façon de définir un tableau : On peut définir un tableau avec un
tableau littéral au moment de sa déclaration.
class TableauB
{public static void main(String[ ] argv)
{ int tableau[ ]=new int[3];
System.out.println(‘’Taille du tableau : ‘’+ tableau.length) ;
} // affichera 3
}
class TableauD
{
public static void main(String[] argv)
{ Integer tableau[] = new Integer[4] ; //un tableau de 4 objets
int somme = 0 ;
for (int i=0 ; i<tableau.length ; i++)
tableau[i]= new Integer(i) ;
for (int i=0 ; i<tableau.length ; i++)
somme+=tableau[i].intValue() ; //intValue retourne l’attribut i
System.out.println(‘’ La somme des entiers est ‘’+somme) ;
}
}
GL_IGE_SMI
6-5 Tableau multidimensionnel :
GL_IGE_SMI
7- La saisie au clavier
- En java, le clavier est un fichier représenté par un
objet particulier de La classe java.io.BufferedReader qui
admet le constructeur :
BufferedReader (InputStreamReader objet) ou
Scanner sc=new Scanner(System.in);
Int a,
a = sc.nextInt();
Pour représenter le clavier, on doit instancier la classe
BufferedReader comme suit :
BufferedReader (new InputStreamReader(System.in))
La méthode readLine de BufferedReader permet de
lire une ligne
GL_IGE_SMI
Exemple : Ecrire une fonction de prototype int puissance(int a, int b) qui
calcule ab, a et b sont des entiers.
import java.util.Scanner;
GL_IGE_SMI
- Les Conversions
GL_IGE_SMI
Exemple :
public class Chaine1
{ String ch1="langage" ;
String ch2= " java" ;
String ch3=ch1+ch2;
void affiche_longueur()
{ System.out.println(ch1+" a pour longueur " + ch1.length());
System.out.println(ch2+" a pour longueur " + ch2.length());
System.out.println(ch3+" a pour longueur " + ch3.length());
}
void affiche_caractere(String ch)
{ for(int i = 0;i<ch.length();i++)
System.out.println(ch+" à l'indice "+i+" = "+ch.charAt(i));
}
public static void main(String[] arg)
{ Chaine1 obj = new Chaine1();
obj.affiche_longueur();
obj.affiche_caractere(obj.ch3);
}
}
GL_IGE_SMI
8-2 Les chaînes de caractères de type StringBuffer
GL_IGE_SMI
- Les Constructeurs de la classe StringBuffer
GL_IGE_SMI
- Caractère et sous-chaîne.
- Conversion
String toString() Retourne une chaîne égale à la chaîne
- Modifications
StringBuffer delete(int start, int end) Enlève tous les caractères compris entre start et
end.
StringBuffer deleteCharAt(int index) Enlève le caractère à l’indice index
GL_IGE_SMI
8-2 Les chaînes de caractères de type StringBuffer
Exemple : utilisation de la longueur et de la capacité
public class Chaine2
{static StringBuffer stb1,stb2;
public static void main(String[ ] arg)
{ stb1=new StringBuffer();
stb2=new StringBuffer(10);
System.out.println("stb1 a pour longueur "+stb1.length()); //0
System.out.println("stb1 a pour capacité "+stb1.capacity()); //16
System.out.println("stb2 a pour longueur "+stb2.length()); //0
System.out.println("stb2 a pour capacité "+stb2.capacity()); //10
stb1=new StringBuffer("Chaine");
System.out.println("stb1 a pour longueur "+stb1.length()); //6
System.out.println(stb1+ " pour capacité "+stb1.capacity()); //22=16+6
stb1.append(" StringBuffer");
System.out.println(stb1+" a pour longueur "+stb1.length());//19
System.out.println(stb1+" a pour capacité"+stb1.capacity()); //22
stb1.setLength(3);
System.out.println(stb1+" a pour longueur "+stb1.length()); //3
System.out.println(stb1+" a pour capacité"+stb1.capacity());//22
} }
GL_IGE_SMI
9 – OPERATIONS SUR LES OBJETS
9 – 1 L’affectation =
ObjetA = ObjetB ObjetA désigne le même objet que ObjetB, c’est la copie de référence
Toute modification effectué sur l’objet référencée par objetA sera répercuté sur l’objet
référencée par objetB et vice versa.
Exemple :
class Copie
{
public static void main(String[] argv)
{
int[ ] tableau = {1,2};
int[ ] table ;
table = tableau;
table[0] =7;
System.out.println(‘‘tableau contient :’’ + tableau[0] +tableau [1]);
/* tableau[0]=7 et tableau[1]=2 */
}
}
GL_IGE_SMI
9 –2 Egalité entre objets
2 – LA CLASSE java.lang.Object
5 – LES INTERFACES
GL_IGE_SMI
Chapitre 3 HERITAGE ET INTERFACES EN JAVA
1 – 1 Définition de l’héritage
GL_IGE_SMI
1- 2 – Déclaration de l’héritage
GL_IGE_SMI
1-3 – Propriétés de l’héritage
-En java, l’héritage est simple, toute classe ne peut hériter que
d’une et une seule classe. Si une classe n’hérite d’aucune autre
classe, elle hérite par défaut de la super classe Object définie dans
la package java.lang
GL_IGE_SMI
1-4- Opérateurs : super et instanceof
- L’opérateur super :
Pour faire référence à la classe parente (super
classe) , il suffit d’utiliser le mot clé super. Ce mot permet
d’invoquer un attribut ou une méthode de la super classe
On utilise super(arguments) pour invoquer le
constructeur de la super classe ayant les arguments
correspondants
- L’opérateur instanceof :
L’opérateur instanceof permet de savoir à quelle
classe appartient une instance :
GL_IGE_SMI
1-4- Opérateurs : super et instanceof
class A
{ }
class B extends A
{ }
public class C
{ public static void main(String[] arg)
{ A a= new A();
B b = new B();
C c = new C();
System.out.println( a instanceof A ); // true
System.out.println( a instanceof B );//false
System.out.println( b instanceof A );//true
System.out.println( b instanceof B );//true
a=b;
System.out.println( a instanceof A );//true
System.out.println( a instanceof B );//true
//System.out.println( c instanceof A ); :erreur de compilation
//(c et A ne sont pas de même type)
} }
GL_IGE_SMI
1-5- Un exemple de l’héritage
Personne
….
GL_IGE_SMI
1-5- Exemple
class Personne // la super classe
{
final String nom;
final int annee_naissance;
String adresse; // sauf pour les SDF!!
Personne(String nom,int annee_naissance)
{this.nom=nom;
this.annee_naissance= annee_naissance;}
String getNom()
{ return nom;}
int getNaissance()
{ return annee_naissance;}
public String toString()
{
return("Je suis "+getNom()+" et je suis" +
getClass().getNam());}
}
GL_IGE_SMI
1-5- Exemple
class Fonctionnaire extends Personne
{int numeroSomme;
double salaire;
String fonction;
Fonctionnaire(String nom,int annee_naissance,int numeroSomme)
{super(nom,annee_naissance);
this.numeroSomme=numeroSomme;
}
double getSalaire()
{ return salaire;}
}
for(int i=0;i<desPersonnes.length;i++)
System.out.println(desPersonnes[i]);
}
}
- A l’exécution :
Je suis F et je suis Fonctionnaire
Je suis M et je suis MedecinPublic
Je suis E et je suis Eleve
Je suis C et je suis Chomeur
GL_IGE_SMI
2- LA CLASSE java.lang.Object
La classe d’entête public class Object est la super classe de
toutes les classes Java : toutes ses méthodes sont donc héritées par
toutes les classes.
GL_IGE_SMI
2- LA CLASSE java.lang.Object
2-2 La méthode public String toString()
La méthode toString() permet d'obtenir la représentation d'un
objet quelconque par une chaîne de caractères. Ainsi lorsque une
référence r vers un objet de classe quelconque est dans une expression
en lieu et place d'une chaîne de caractères c'est en fait la chaîne
retournée par le message r.toString() qui est utilisée dans l'expression.
La méthode toString de la classe Object retourne une chaîne
correspondant au nom de la classe de l'objet suivi de @ suivi de
l'adresse mémoire de la structure de données définissant les
caractéristiques de l'objet (cette adresse est la valeur contenue dans la
variable référencant l'objet).
La méthode toString() est souvent redéfinie
GL_IGE_SMI
2- LA CLASSE java.lang.Object
Soit la classe Livre définie comme suit
public class Livre
{ double prix;
String titre;
String auteur;
public Livre(double p, String t, String a)
{ prix=p;
titre = t;
auteur = a;
}
public static void main(String[] arg)
{ Livre monLivre= new Livre(50.00,"Programmation en langage
Java", "SIL_S4");
System.out.println(monLivre);
// La classe Livre ne redéfinissant pas la méthode toSTring
// c'est celle héritée de la classe Object qui est invoquée.
}
}
// A l'exécution, on aura : Livre@ba34f2
GL_IGE_SMI
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la méthode toString() redéfinie
GL_IGE_SMI
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la méthode toString() redéfinie
public static void main(String[] arg)
{ Livre2 monLivre= new Livre2(50.00,"Programmation en langage
Java",« Smestre_S4");
System.out.println(monLivre);
// La classe Livre redéfinit la méthode toSTring
// c'est celle redéfinie qui est invoquée.
}
}
- A l'exécution, on aura :
Titre : Programmation en langage Java
Auteur : Semestre_S4
Prix : 50.0
GL_IGE_SMI
2- LA CLASSE java.lang.Object
GL_IGE_SMI
2- LA CLASSE java.lang.Object
String titre;
String auteur;
{ prix=p;
titre = t;
auteur = a;
}
GL_IGE_SMI
2- LA CLASSE java.lang.Object
2-3. La méthode public boolean equals(Object obj)
Exemple 1 : Utilisation de la méthode equals héritée
public static void main(String[] arg)
{ LivreCompare l1 = new LivreCompare(500.00,"Programmation
en langage Java",« SIL_S4");
LivreCompare l2 = new LivreCompare(50.00,"Programmation en
langage Java", "SIL_S4");
System.out.print("Les livres référencés par l1 et l2 sont ");
if (l1.equals(l2))
/* ici équivalent à l1 == l2 puisque la méthode equals n'est pas
redéfinie. On compare le contenu des deux références l1 et l2 (c'est à
dire les adresses mémoire des deux Livres */
System.out.println("identiques");
else
System.out.println("différents"); }
}
- A l’exécution : les livres référencés par l1 et l2 sont différents
Remarque : Pour avoir un comportement plus conforme à ce que l'on attend
pour la méthode equals il faudrait redéfinir celle-ci
GL_IGE_SMI
2- LA CLASSE java.lang.Object
2-3. La méthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la méthode equals redéfinie
public class LivreCompare2
{
double prix;
String titre;
String auteur;
public LivreCompare2(double p, String t, String a)
{ prix=p;
titre = t;
auteur = a; }
public boolean equals(LivreCompare2 l)
{ return (this.titre.equals(l.titre) && this.auteur.equals(l.auteur)
&& this.prix == l.prix); }
GL_IGE_SMI
2- LA CLASSE java.lang.Object
2-3. La méthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la méthode equals redéfinie
public static void main(String[] arg)
{ LivreCompare2 l1 = new LivreCompare2 (50.00,
"Programmation en langage Java",« SIL_S4");
LivreCompare2 l2 = new LivreCompare2 (50.00,
"Programmation en langage Java",« SIL_S4");
System.out.print("Les livres référencés par l1 et l2 sont ");
if (l1.equals(l2)) // ici on compare les attributs de l1 et l2
System.out.println("identiques");
else
System.out.println("différents");
}
- A l’exécution : les livres référencés par l1 et l2 sont identiques
GL_IGE_SMI
3- Masquage des attributs et redéfinition des méthodes
GL_IGE_SMI
3- Masquage des attributs et redéfinition des méthodes
GL_IGE_SMI
class A
{ int attr=10;
void meth()
{ System.out.println("Je suis la méthode de A"); }
}
class B extends A
{
int attr=20;
void meth()
{ System.out.println("Je suis la méthode de B"); }
}
public class Masque
{ public static void main(String[] argv)
{Aa;
B b = new B();
System.out.println("b.attr= "+b.attr);
System.out.println("a.attr= "+a.attr);
b.meth();
a.meth(); }
}
GL_IGE_SMI
A l'exécution , on aura :
b.attr= 20
a.attr= 10
Je suis la méthode de B
Je suis la méthode de A */
GL_IGE_SMI
4- casting ou transtypage
GL_IGE_SMI
Casting des objets
class Animal
{}
class Conversion
{ public static void main (String[] argv)
{
Chien chien; // déclaration d’un objet de type Chien
Animal animal = new Chien ();
chien = (Chien)animal;
System.out.println(" Ce chien mesure : "+ chien.taille +" cm");
GL_IGE_SMI
Casting des objets
A l’exécution :
Ce chien mesure : 80 cm
Tout animal ne peut pas être converti en chien
GL_IGE_SMI
5 - LES INTERFACES
GL_IGE_SMI
Remarques :
- Elle peut être attribuée à un package . Si elle ne l’est pas, elle fera
partie du package par défaut
interface I1
{}
GL_IGE_SMI
6 – DEFINITION D’UNE CLASSE ABSTRAITE
GL_IGE_SMI
Chapitre 4 LES COLLECTIONS DE DONNEES
INTRODUCTION
1- GENERALITES SUR LES COLLECTIONS EN JAVA
2- L’INTERFACE java.util.Collection
3- LES LISTES
4- LES ENSEMBLES
5- LES MAP
6- LES CLASSES UTILITAIRES
GL_IGE_SMI
1- GENERALITES SUR LES COLLECTIONS JAVA
1-1 Définition d’une collection
Une collection représente un groupe d'objets, connu par ses
éléments et utilisé pour stocker, rechercher et manipuler ces éléments
Les collections peuvent permettre des éléments en double (ou
doublons) à l'image des listes, ou parfois les interdisent telles que les
ensembles.
Le langage Java dispose de plusieurs outils destinés à gérer des
collections d’une façon unifiée qui met en oeuvre :
- des interfaces qui permettent la manipulation des collections
indépendamment de leurs représentations (l’interface Collection,
l’interface List, …)
- des classes qui implémentent les interfaces précédentes (la
classe Vector, ArrayList,…)
- des méthodes qui réalisent des opérations utiles (add(…),
contains(…),..)
GL_IGE_SMI
1- GENERALITES SUR LES COLLECTIONS JAVA
1-2 Organisation des collections
L’ensemble de ces outils java (interfaces, classes,
méthodes) qui permettent la mise en œuvre des collections
est organisé dans le package java.util selon deux
hiérarchies :
L’interface java.util.Collection et l’interface java.util.Map
GL_IGE_SMI
Chapitre4 LES APPLETS
INTRODUCTION
1 – LE LANGAGE HTML
GL_IGE_SMI
Chapitre4 LES APPLETS
INTRODUCTION
Pour publier une applet sur Internet , il faut d’abord créer une
page HTML. L’applet est référencée dans la page HTML et exécutée
par le logiciel de navigation.
GL_IGE_SMI
Chapitre4 LES APPLETS
1 – LE LANGAGE HTML
GL_IGE_SMI
Chapitre4 LES APPLETS
Les liens dans une page HTML
Dans une page HTML , on peut définir des liens qui représentent
des sauts vers d’ autres endroits. Pour identifier la cible vers la quelle doit
pointer le lien., on utilise la balise a (ancre), cette balise a un attribut href
(hypertext reference) ; celui ci doit contenir une URL qui pointe sur un
document ou sur une partie du document
Il existe deux types de liens, des liens internes qui renvoient à un
emplacement situé dans le même document et des liens externes qui
appellent un autre document figurant dans le même ordinateur serveur ou
sur un autre géographiquement éloigné.
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.applet.Applet
GL_IGE_SMI
Chapitre4 LES APPLETS
Une applet est incluse dans une page HTML sous la forme d’une
référence qui indique l’endroit où le logiciel de navigation doit aller la
chercher
La balise APPLET s’utilise comme n’importe quelle commande HTML.
Sa syntaxe est la suivante :
<APPLET CODE= ‘’Nomclass.class’’ widht = w height=h >
</APPLET>
NomClasse : indique le nom de la classe définissant l’applet
w et h désignent la largeur et la hauteur (en pixels) de la zone
de la page html destinée à représenter l’applet
GL_IGE_SMI
Chapitre4 LES APPLETS
GL_IGE_SMI
Chapitre4 LES APPLETS
import java.applet.Applet ;
import java.awt.Graphics ; // l’applet est une fenêtre graphique
GL_IGE_SMI
Chapitre4 LES APPLETS
4 – EXEMPLE D’UNE APPLE
2ème étape la compilation
Une fois le code enregistré dans le fichier Helloworld.java. On
le compile pour obtenir le fichier Helloword.class
<HTML>
</applet>
</HTML>
A - LE PACKAGE java.awt
5- LES CONTENEURS
INTRODUCTION
INTRODUCTION
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
A - LE PACKAGE java.awt
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
2 – LES PRINCIPALES CLASSES DE java.awt
2-1 La classe Graphics
Remarque : Les segments tracés en java ont une largeur égale à un point d’écran. Pour
tracer un segment plus épais , on doit tracer plusieurs segments parallèles
20
(50,20)
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
import java.awt.*;
class TraceLigne extends Frame
{
TraceLigne( String titre) // Constructeur
{
super (titre);
/* appel au constructeur de la super classe de Traceligne (Frame) qui dessine une
fenêtre invisible et appelle automatiquement la méthode paint */
}
public void paint(Graphics g) // méthode redéfinie
{ g.setColor(Color.blue);
// dessin d’une ligne épaisse (2 pixels d’épaisseur
g.drawLine(50,65,150,100);
g.drawLine(50,66,150,101);
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
monDessin.setVisible(true);
/* la méthode setVisible(boolean) de la classe java.awt.component rend visible ou cache le
composant en fonction de l’état du boolean */
} // fin de main
} // fin de la classe
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
* drawRect(int x1, int y1, int larg , int haut) affiche un rectangle vide
à partir du point (x1,y1) de largeur larg et de hauteur haut
(x1,y1)
hauteur
larg : largeur
* fillRect(int x1, int y1, int larg , int haut) affiche un rectangle plein à
partir du point (x1,y1) de largeur larg et de hauteur haut. La couleur de
remplissage du rectangle plein est la couleur courante
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
import java.awt.*;
class TraceRect extends Frame
{
int x=50, y=60, largeur=150 , hauteur=100;
Color couleur=Color.red ; // déclaration d'un objet couleur
TraceRect (String titre)
{ super (titre); }
public void paint(Graphics g)
{
g.setColor(couleur);
g.drawRect(x,y,largeur,hauteur);
g.fillRect(x,y+150,largeur,hauteur); // rectangle plein
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
} // fin de la classe
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
* drawOval (int x, int y, int largeur, int hauteur) affiche un ovale vide de
coin supérieur gauche de coordonnées (x,y) et de largeur et hauteur
définis
(x,y)
Largeur
Largeur
Hauteur
Dans le cas d’un cercle largeur = hauteur = diamètre
* fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
-On peut aussi spécifier une couleur à l’aide de trois nombres floats
compris entre 0.0 et 1.0
-Ces trois nombres représentent les 3 valeurs RGB
Color rouge = new Color(1.0f, 0.0f, 0.0f) ;
Color blanc = new Color(1.0f, 1.0f, 1.0f) ;
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
import java.awt.*;
public class UtiliseFont extends Frame
{ UtiliseFont(String titre)
{ super(titre); }
public void paint (Graphics g)
{
Font ft= new Font("Serif",Font.BOLD,20);
g.setFont(ft);
g.setColor(Color.red);
g.drawString("ATTENTION DANGER",100,100);
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Exemple: L’application suivante permet d’afficher une case à cocher
de nom Test . Si l’utilisateur active cette case le message Case activée
sera affichée, sinon le message Case désactivée sera affichée
import java.awt.*;
class DemoCheckbox extends Frame
{
static boolean etat = false;
Checkbox test;
DemoCheckBox(String titre)
{ super (titre);
FlowLayout fl=new FlowLayout(); // gestionnaire de mise en page
setLayout(fl);
test=new Checkbox("TEST");
add(test);
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
A l’exécution, on aura
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
4-1 FlowLayout :
La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche à droite.
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
4-1 FlowLayout :
La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche à droite.
C’est la disposition par défaut, celle qui sera utilisée si l’on
ne choisit pas un autre gestionnaire. Le principe est très simple :
tous les éléments sont mis côte à côte, de gauche à droite. Lorsqu’il
n’y a plus assez de place pour ajouter un élément, on passe à la
ligne suivante. Chaque ligne est centrée par défaut
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
4-2 BorderLayout :
4-2 BorderLayout :
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
4-3 GridLayout :
La classe GridLayout organise tous les composants d’un
conteneur en grille (lignes et colonnes). Le même espace est affecté à
tous les composants. Lorsqu’on instancie GridLayout, on doit spécifier le
nombre de lignes et de colonnes. Les éléments sont ajoutés dans la grille
de gauche à droite, de haut en bas.
Déclaration d’un objet de la classe GridLayout
GridLayout gl = new GridLayout (int nb_lignes, int nb_colonnes);
/* On spécifie le nombre de lignes ou le nombre de colonnes souhaité. L'une
des deux valeurs doit être nulle sinon seul le nombre de lignes est pris en
compte. Par exemple GridLayout(5,4) est identique à GridLayout(5,0) */
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
Pour mettre en service les différents composants déjà vus
(boutons, listes, cases à cocher, …) , il faut toujours les incorporer
dans un objet d'une classe dérivée de la classe abstraite Container
(conteneur). Les conteneurs les plus utilisés sont :
Panel : Conteneur qui n'a pas de fenêtre propre sert surtout à
ordonner les contrôles. La classe java.applet.Applet est dérivée de
la classe Panel
Window : crée une fenêtre principale sans cadre ni menu
Frame (dérivant de Window) : il s'agit d'une classe de fenêtre avec
barre de titre
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
5-1 Le conteneur Panel
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
Exemple : Utiliser dans une applet deux panneaux
import java.awt.* ;
import java.applet.* ;
public class DemoPanel extends Applet
{ public void init()
{ FlowLayout fl=new FlowLayout();
setLayout(fl);
Panel p1= new Panel();
Button b1=new Button("Premier");
Button b2=new Button("Deuxième");
p1.add(b1);
p1.add(b2);
add(p1);
FlowLayout fl2=new FlowLayout(FlowLayout.LEFT,40,20);
setLayout(fl2);
Panel p2= new Panel();
Button b3=new Button("Troisième");
Button b4=new Button("Quatrième");
p2.add(b3);
p2.add(b4);
add(p2); }
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
5-2 Le conteneur Frame
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Les interfaces EventListener permettent à un composant
d'interface graphique utilisateur de générer des événements
utilisateur. Aucun composant ne pourra être entendu par les
autres éléments d'un programme sans la présence d'au moins un
des auditeurs. Un programme doit contenir une interface
d'auditeur pour chaque type de composant
Un objet peut déléguer la gestion de ses événements à
plusieurs Listeners. Chacun des Listener réagira aux événements
de l’objet.
Un Listener peut écouter plusieurs objets .
Pour qu’un objet puisse déléguer la gestion on doit spécifier qui s’en
chargera par une méthode du type : add<Typed’événement>Listener.
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple : Il s’agit de construire une interface graphique qui
permet de tracer un cercle rouge si on clique sur le bouton trace et
d’effacer ce cercle si on clique sur le bouton efface
import java.awt.*;
import java.awt.event.*;
class EssaiBouton extends Frame implements ActionListener
{
Button trace = new Button("trace");
Button efface = new Button("efface");
EssaiBouton()
{
setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple :
add(trace);
add(efface);
trace.addActionListener(this);
efface.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{ Graphics g=getGraphics();
if (e.getSource()==trace)
{ g.setColor(Color.red);
g.drawOval(50,50,100,100); }
else if (e.getSource()==efface)
{ g.setColor(getBackground());
g.drawOval(50,50,100,100); }
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple :
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
Souris(String titre)
{ super(titre);
text1 = new TextField(30);
FlowLayout fl=new FlowLayout();
setLayout(fl);
add(text1);
addMouseListener(this);
}
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
Exemple 1
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing
Exemple2
import javax.swing.*;
import java.awt.event.*;
public class SwingDemo extends JFrame
{ Icon image = new ImageIcon("smallbabies.jpeg");
//JLabel label = new JLabel(image);
JButton SwingButton = new JButton(image);
public SwingDemo(String WindowTitle)
{super(WindowTitle);
getContentPane().add(SwingButton);
// getContentPane().add(label); }
GL_IGE_SMI
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing
Exemple2
GL_IGE_SMI
Chapitre 6 LES EXCEPTIONS
1- INTRODUCTION
GL_IGE_SMI
LES EXCEPTIONS
1- Introduction
Un programme ne se déroule pas toujours comme
prévu. Plusieurs cas d'erreurs peuvent venir perturber son
bon déroulement : division par zéro, dépassement des
bornes d'un tableau, fichier inexistant,…
Dans tout programme, le traitement des erreurs
représente une tâche importante, souvent négligée par les
programmeurs.
Java dispose d'un mécanisme très efficace appelé le
mécanisme d'exceptions pour obliger les programmeurs à
prendre en compte les erreurs. Ce mécanisme admet deux
principes fondamentaux :
GL_IGE_SMI
LES EXCEPTIONS
1- Introduction
- La plus grande partie des erreurs qui pourraient
survenir doit être détectée par le compilateur, de façon à
limiter autant que possible les occasions de les voir se
produire pendant l'utilisation des programmes
- Le traitement des erreurs doit être séparé du reste
du code, de façon que celui-ci reste lisible.
GL_IGE_SMI
LES EXCEPTIONS
2- Définition d’une exception
Une exception est une interruption de l'exécution d'un
programme suite à une erreur. Par exemple, une division par
zéro provoque une exception de type ArithmeticException
Les exceptions en java sont des instances de sous-classes
des classes :
java.lang.Error (pour des erreurs graves, qui devront
généralement conduire à l'arrêt du programme)
ou
java.lang.Exception (pour des événements inattendus,
qui seront souvent traités de sorte qu'elle ne provoquent
pas l'arrêt du programme).
GL_IGE_SMI
LES EXCEPTIONS
3- Un premier exemple d' une exception
class DivParZero
{
public static void main(String[] argv)
{
int zero = 0 ;
zero = 2000 / zero ;
}
}
GL_IGE_SMI
LES EXCEPTIONS
3- Un premier exemple d' une exception
A l'exécution du programme, on obtient l'affichage suivant :
On distingue :
- Le nom complet de l'exception qui a été levée :
java.lang.ArithmeticException
- Un message précisant la cause de cette erreur : / by zero
- L'indication de la classe, de la méthode et du numéro de ligne où s'est
produite cette exception : at DivParZero.main(DivParZero.java:6)
GL_IGE_SMI
LES EXCEPTIONS
3- Un premier exemple d' une exception
Si on désire ne pas avoir d'interruptions dans notre programme, on gérer
l'erreur en utilisant les blocs try et catch de la façon suivante :
class DivParZero
{
public static void main(String[] argv)
{
int zero = 0 ;
try
{ zero = 2000/zero ; }
catch (ArithmeticException e)
{ System.out.println("Une exception arithmétique a été levée");
System.out.println("Message : "+e.getMessage()); }
}
A l'exécution, on obtient :
Une exception arithmétique a été levée
Message : / by zero
GL_IGE_SMI
LES EXCEPTIONS
4- Attraper une exception
Pour pouvoir attraper une exception ( ne pas la laisser
arrêter le programme), il faut entourer le code susceptible de la
lancer dans un bloc précédé de l'instruction try. L'exception
lancée dans le bloc peut être attrapée par une sorte de méthode
d'un type particulier désignée par le mot clé catch et prenant
pour paramètre un objet du type de l'exception lancée ou du
type d'une classe parente.
GL_IGE_SMI
LES EXCEPTIONS
4-1 Les blocs try et catch
Si on décide de traiter une exception, on dit qu'on attrape
l'exception et il faut utiliser dans ce cas les mots clé try et
catch
Le mot clé try permet de spécifier un bloc de code sur le
quel on s'attend qu'une exception soit levée ( c à d possibilité
d'avoir une erreur)
Le bloc de l'instruction try doit être suivi d'une instructions
catch
Le mot clé catch sert à spécifier le code à exécuter pour
une exception donnée. Il faut faire suivre le mot catch d'une
parenthèse ouvrante, d'un type exception (une classe), du nom
qu'on lui donne , d'une parenthèse fermante et du code associé
placé entre accolade
GL_IGE_SMI
LES EXCEPTIONS
4-1 Les blocs try et catch
GL_IGE_SMI
LES EXCEPTIONS
4-2 Mécanisme de lancement d'une exception
* Si l'instruction i n'est pas située dans un bloc try ,
Alors :
** Si uneMethode est la méthode main, le programme se termine et
l'exception n'a pas été attrapée.
** Sinon, on se retrouve dans la méthode qui a appelée uneMethode,
au niveau de l'instruction j qui a fait appel à uneMethode. L'instruction j
lance à son tour l'exception.
Si une exception est lancée et pas attrapée, et donc qu'elle
provoque la terminaison du programme, la pile des méthodes
traversées par l'exception est indiquée à l'utilisateur. On dit qu'il y’a
propagation de l'exception
GL_IGE_SMI
LES EXCEPTIONS
Exemple : Calcul d'une moyenne (entière) de notes entières envoyées en
arguments par la ligne de commande .Les arguments non entiers doivent être
ignorés et signalés à l'utilisateur
class ExceptionCatch
{
static int moyenne(String[] liste)
{
int somme = 0,entier, nbNotes = 0;
for (int i = 0; i < liste.length; i++)
{
try {
entier = Integer.parseInt(liste[i]);
somme += entier;
nbNotes++; }
catch (NumberFormatException e)
{System.out.println("la "+ (i+1) +"ème note n'est pas entière");}
}
return (somme/nbNotes);
}
GL_IGE_SMI
LES EXCEPTIONS
public static void main(String[] argv)
{
System.out.println("La moyenne
est"+moyenne(argv));
}
}
A l'exécution : java ExceptionCatch 12 a 15
La 2 ème note n'est pas entière
La moyenne est 13
GL_IGE_SMI
LES EXCEPTIONS
4-3 Le mot clé throws
Exemple :
void fonction() throws IOException
La méthode fonction est susceptible de lancer des exceptions
de type entrée/sortie
Remarque : Il est obligatoire d'indiquer par le mot clé throws les
exceptions susceptibles d'être lancées et non attrapées (sauf pour les
exceptions les plus courantes de l'API). Sinon il y 'aura erreur de
compilation
GL_IGE_SMI
LES EXCEPTIONS
4-4 Bloc Finally
Un bloc finally est un bloc d'instructions précédé du mot clé
finally. Ce bloc sera toujours exécuté après le traitement d'exception. Il
est en général utilisé pour fermer des fichiers, libérer des ressources,
Un bloc finally suit Un bloc try ou un bloc catch
Exemple d'utilisation d'un bloc finally
class UtiliseFinally
{
static int moyenne(String[] liste)
{
int somme=0, entier, nbNotes=0, i=0;
for ( i=0;i<liste.length;i++)
{ try
{ entier=Integer.parseInt(liste[i]);
somme +=entier;
nbNotes++; }
GL_IGE_SMI
LES EXCEPTIONS
4-4 Bloc Finally
finally
{ System.out.println("donnée traitée :"+liste[i]); }
}
return somme/nbNotes;
}
public static void main(String[] argv)
{
try
{ System.out.println("La moyenne est "+moyenne(argv)); }
catch (NumberFormatException e)
{ System.out.println("Erreur sur vos entiers"); }
}
}
A l'exécution de : java UtiliseFinally 20 xy
On aura : donnée traitée : 20
donnée traitée : xy
Erreur sur vos entiers
GL_IGE_SMI
LES EXCEPTIONS
4-5 Quelques classes d'exceptions
Exception Type d'exception
IOException Entrée Sortie
Exemples : lecture sur un fichier
inexistant
ArithméticException Arithmétique
Exemple : Division par zéro
ArrayIndexOutOfBoundsExcepti Dépassement des bornes d'un
on tableau
NumberFormatException Format du nombre n'est pas
respectée
Exemple : un int représentée en
float
OutOfMemoryException Dépassement de mémoire
GL_IGE_SMI
LES EXCEPTIONS
5- Définir sa propre exception
Si on veut pouvoir signaler un événement exceptionnel d'un
type non prévu par l'API, il faut étendre la classe java.lang.Exception.
GL_IGE_SMI
LES EXCEPTIONS
5- Définir sa propre exception
Exemple :
class ExceptionRien extends Exception
{ public String toString()
{ return "Aucune note n'est valide " ; }
}
//Cette classe peut être utilisée comme exception dans une autre classe :
class ExceptionThrow
{
static int moyenne(String[] liste) throws ExceptionRien
{ int somme = 0,entier, nbNotes = 0;
for (int i = 0; i < liste.length;i++)
{
try
{entier = Integer.parseInt(liste[i]);
somme += entier;
nbNotes++;
}
GL_IGE_SMI