Quelques classes
La classe Object Il s ’agit de la classe principale, elle contient les
fonctions : protected Object clone() qui crée et retourne une copie de l ’objet boolean equals(Object obj) qui détermine si obj est égal à l ’objet
courant. protected void finalize() appelé par le ramasse miettes s ’il n ’y a
plus de référence à l ’objet Class getClass() retourne la classe courante de l ’objet int hashCode() retourne une clé pouvant être utilisé pour un tri void notify() réveille un processus en attente sur l ’objet void notifyAll() réveille tous les processus en attente String toString() retourne une chaîne représentant l ’objet void wait() mets en pause le processus courant en attendant un
réveil
La classe String (1)
Les chaînes sont constantes, leurs valeurs ne peuvent être changées après leurs créations.
StringBuffer permet l ’utilisation de chaînes "dynamiques".
Construction : String str = "abc"; est équivalent à char data[] = {'a', 'b', 'c'};String str = new String(data);
La classe String comporte des méthodes d’accès aux caractères, de comparaisons, de recherche, d’extraction, de copie, de conversion minuscules/majuscule, ...
La classe String (2)
L ’opérateur (+) est surchargé pour permettre la concaténation, et à la conversion implicite d’objets en chaîne.
Toute conversion se fait de manière automatique en faisant appel à la méthode toString() héritée de la classe Object. Il est donc possible de surcharger cette méthode dans les nouvelles classes créées.
La classe String (3)
char charAt(int index) retourne le caractère de la position index int compareTo(String anotherString) compare la chaîne à une autre, en gérant les
majuscules-minuscules. Retourne 0 en cas d’égalité, un entier négatif si la chaîne est inférieure à l’autre, et positif si la chaîne est supérieure à l’autre chaîne.
int compareToIgnoreCase(String str) idem que la précédente, mais ignore la case. String concat(String str) ajoute la chaîne str à la fin de la chaîne. boolean endsWith(String suffix) teste si la chaine se termine par le suffixe. boolean equals(Object anObject) nécessaire pour comparer deux chaînes, traite la case. boolean equalsIgnoreCase(String anotherString) idem, mais ignore la case. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) copie les caractères de
la chaîne dans un tableau de caractères. int indexOf(int ch) retourne l’index de la première occurrence du caractère.
On trouve aussi int indexOf(int ch, int fromIndex) ; int indexOf(String str) et int indexOf(String str, int fromIndex)
Ainsi que int lastIndexOf(int ch) ; int lastIndexOf(int ch, int fromIndex) ; int lastIndexOf(String str) ; int lastIndexOf(String str, int fromIndex) ;.
int length() retourne la longueur String replace(char oldChar, char newChar) retourne une nouvelle chaîne après le
remplacement de toutes les occurrences du caractère. boolean startsWith(String prefix) teste si la chaîne commence par le préfixe. String substring(int beginIndex, int endIndex) extrait une sous-chaîne. String toLowerCase() ; String toUpperCase() change la case. String trim() efface les espaces avant et après.
Des classes très utiles (import java.util.*)
Interfaces : Collection, Comparator, Enumeration, EventListener, Iterator, List, ListIterator, Map, Map.Entry,Observer, Set, SortedMap, SortedSet
Classes : AbstractCollection, AbstractList, AbstractMap, AbstractSequentialList, AbstractSet, ArrayList, Arrays, BitSet, Calendar, Collections, Date, Dictionary, EventObject, GregorianCalendar, HashMap, HashSet, Hashtable, LinkedList, ListResourceBundle, Locale, Observable, Properties, PropertyPermission, PropertyResourceBundle, Random, ResourceBundle, SimpleTimeZone, Stack, StringTokenizer, TimeZone, TreeMap, TreeSet, Vector, WeakHashMap
Quelques classes de java.util
La classe Vector est la plus utilisée. Elle permet de stocker des objets dans un ensemble de longueur variable.
addElement(objet) permet d’ajouter un objet en queue,
get(index) permet de récupérer l’objet positionné à l’index donné,
find() permet de récupérer la position de l ’objet,
isEmpty() teste si le vecteur est vide,
size() donne la taille du vecteur.
Quelques classes de java.util
La classe Stack hérite directement de la classe Vector et ajoute entre autres les méthodes :
push(objet) : ajoute un objet en tête ; pop() : retire le premier objet ; peek() : renvoie une référence au premier objet sans
le retirer ; empty() : teste si la pile est vide.
Une pile peut aussi contenir des objets de différents types.
Quelques classes de java.util
La classe Hashtable peut être vue comme un dictionnaire composé de deux vecteurs : un vecteur pour la clé et un vecteur pour l’objet.
Une table de clés possède les méthodes : put(clé, objet) : get(clé) : containskey(clé) : containsvalue(objet) : isEmpty() : entre autres...
Quelques classes de java.util
La classe Set définit un ensemble ne pouvant contenir qu’un exemplaire d’un objet.
Cette classe dispose, entre autres, des méthodes :
add(objet) qui n’ajoute l’objet que s’il n’est pas déjà présent
contains(objet) ;
remove(objet) ;
isEmpty().
Quelques classes de java.util
L ’interface Enumeration ne contient que deux méthodes :
nextElement() : retourne l ’objet (à caster) courant et passe à l’élément suivant,
hasMoreElements() : indique la présence d’au moins un élément.
elle est utilisée surtout pour la lecture des éléments d’un vecteur : for(Enumeration e=vecteur.elements();e.hasMoreElements();)
System.out.println(e.nextElement()) ;
Remarque : elements() est la méthode qui retourne une énumération à partir du vecteur.
Gestion d ’exceptions
Les exceptions
La gestion des exceptions est très importante, voire primordiale, dans tous systèmes informatiques. Elle confère un aspect beaucoup plus professionnel aux applications.
Eviter les applications qui plantent sans information précise, ex :
Les exceptions (2)
Les exceptions sont des instances des classes héritant des classes
java.lang.Error (pour des erreurs graves quasi impossibles à gérer : plus de mémoire, classe manquante, ...)
java.lang.Exception (pour des exceptions attendues sinon probables pouvant être gérée : débordement d ’un tableau, erreur de calcul, ...).
Ces deux classes implémentent l’interface Throwable
Les exceptions (3)
La classe Exception possède deux constructeurs Exception() et Exception (String msg) ).
Elle hérite de l ’interface Throwable de : getMessage qui permet de récupérer le message de
l’exception s’il existe. toString, qui retourne la classe et le message sous
forme de chaîne. printStackTrace, qui fait appel à toString, mais qui en
plus indique l’endroit du programme où a été levée l’exception.
Capture d’une exception
Pour récupérer, ou attraper, une exception :
….try
{…. //endroit où pourrait apparaître une exception }catch (type_exception_1 e1)
{ …. // traitement de l’exception de type 1 }catch (type_exception_2 e2)
{ …. // traitement de l’exception de type 2 }finally
{ …. // dans tous les cas, passer par ici }….
Exemple
...total = 0try
{somme = a + b;moyenne = somme / total;nb_moy = nb_moy + 1
}catch(Exception e)
{System.out.println(« division par
0 ...»);moyenne = 0;nb_moy = nb_moy + 1
}...
Exception levée
Partie abandonnée
reprise du cours normal du programme
Exception attrapée et gérée
Des classes d ’Exception
ClassNotFoundException, CloneNotSupportedException, IllegalAccessException, .InstantiationException, InterruptedException, NoSuchFieldException, NoSuchMethodException, RuntimeException, ArithmeticException, ArrayStoreException, ClassCastException, IllegalArgumentException, IllegalThreadStateException, NumberFormatException, IllegalMonitorStateException, IllegalStateException, IndexOutOfBoundsException, ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException, NegativeArraySizeException, NullPointerException, SecurityException, UnsupportedOperationException
Exemple (2)
...total = 0try
{somme = a + b;moyenne = somme / total;nb_moy = nb_moy + 1;
}catch(ArithmeticException e)
{System.out.println(« division par 0 ...»);moyenne = 0;nb_moy = nb_moy + 1;
}catch(Exception e)
{System.out.println(«... erreur inconnue ...»);
}
...
Exception levée
Autres erreurs
Erreur de calcul attrapée et gérée
Propagation d ’une exception
Si une exception n ’est pas gérée dans une procédure, elle se propage hors de la procédure,
Il faut donc que cette procédure soit capable de propager l ’exception (utilisation du mot clé throws),
Si à la fin du programme, une exception n ’a pas été attrapée, la pile des méthodes traversées par l'exception est affichée.
Exemple (3)
void moyenne() throws Exception{
total = 0somme = a + b;moyenne = somme / total;nb_moy = nb_moy + 1
}public static void main(Strig args[]){
try {moyenne(); }catch(Exception e) {
System.out.println(« division par 0 ...»);}
}
Exception levée
Exception attrapée et gérée
Exception propagée
Définir son exception
Il est possible de définir une exception en la faisant dériver de la classe Exception :
class ExceptionMoyenne extends Exception{
public String toString(){
return "Problème de moyenne";}
}
Le mot clé throw permet de lancer son exception.
Exemple (4)
void moyenne() throws ExceptionMoyenne{
total = 0somme = a + b;if (total==0) then throw (new ExceptionMoyenne());moyenne = somme / total;nb_moy = nb_moy + 1
}public static void main(Strig args[]){
try {moyenne(); }catch(ExceptionMoyenne e) {
System.out.println(e.getMessage());}
}
Exception lancée
Exception attrapée et gérée
Exception propagée
Les Entrées-Sorties
La classe Java.lang.System
Utilisation des classes et interfaces du package java.io
Il existe trois flux (flots) : System.in : flux d ’entrée,
System.out : flux de sortie standard,
System.err : flux de sortie pour message d ’erreur.
Les entrées sorties peuvent générer une exception de type IOException à gérer
Exemple (read)
import java.io.*;class Lire {
public static void main(String[] argv){
int b, nb = o;try{
while((b = System.in.read())!=10){
nb++;system.out.println(b);
}}catch(IOException e){ …}
}}
Flux d ’entrées
InputStream dont dérivent les classes ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream et StringBufferInputStream
Reader (orientée caractères) dont dérivent les classes BufferedReader, LineNumberReader, CharArrayReader, FilterReader, PushbackReader, InputStreamReader, FileReader, PipedReader, StringReader
Flux de sorties
OutputStream dont dérivent les classes
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
Writer (orientée caractères) dont dérivent les classes
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
Gestion de fichiers
La classe File permet d’accéder aux caractéristiques des fichiers et répertoires.
Trois constructeurs : File(File dir, String name) ; File(String path, String name); File(String path).
Les différentes méthodes sont : canRead() ; canWrite() ; delete() ; equals(Object
obj) ; exists() ; getAbsolutePath() ; getCanonicalPath() ; getName() ; getParent() ; getPath() ; hashCode() ; isAbsolute() ; isDirectory() ; isFile() ; lastModified() ; length() ; list(FilenameFilter filter) ; list() ; mkdir() ; mkdirs() ; renameTo(File dest) ; toString().
Exemple (File)
public static void main(String args[]){ File f = new File("C:\\ProgJava\\Fichiers", "Essai.java"); System.out.println("Essai.java est dans le répertoire " +
f.getPath()); if (f.exists()) {
System.out.println("Essai.java est dans le répertoire " + f.getPath());System.out.println(" droits en lecture, écriture" + f.canRead() + "," + f.canWrite() );
}}
Exemple (FileInputStream)
FileinputStream fis;byte[] b = new byte[1024];
try {
fis = new FileInputStream(" toto.txt ");} catch (FileNotFoundException e) {…}try {
int i =fis.read(b);}catch (IOException e) {…}String s = new String (b);
Exemple de filtre ( DataInputStream )
Lecture de données typées, y compris les chaînes de caractères pouvant être lues ligne par ligne… N ’est plus recommandée depuis java 1.1
public static void main(String args[]){ File f = new File("C:\\ProgJava\\Fichier", "Essai.java"); if (f.exists()) {
String chaine = ""; try {
FileInputStream fis = new FileInputStream(f);DataInputStream bis = new DataInputStream(fis);chaine = bis.readLine();bis.close();fis.close();
} catch (Exception e) {} System.out.println(chaine); }}
Exemple (FileOutputStream)
FileinputStream fis;byte[] b = new byte[1024];
try {
fis = new FileInputStream(" toto.txt ");} catch (FileNotFoundException e) {…}try {
int i =fis.read(b);}catch (IOException e) {…}String s = new String (b);
Java.io.FileOutputStream
Exemple d ’écriture dans un fichier :
public static void main(String args[]){ File f = new File("C:\\ProgJava\\fichier", "Essai.txt"); try {
FileOutputStream fos = new FileOutputStream(f);String s = new String (" Coucou ");int longueur = s.length();byte[] buffer = s.getBytes();for(int i = 0; i < longueur; i++) fos.write(buffer[i]);fos.close();
} catch (Exception e) {}}
Exemple de filtre ( DataOutputStream )
Lecture de données typées, y compris les chaînes de caractères …
public static void main(String args[]){ File f = new File(" C:\\ProgJava\\fichier", "Essai.txt"); try {
FileOutputStream fos = new FileOutputStream(f);DataOutputStream dos = new DataOutputStream(fos);dos.writeBytes(" coucou ");dos.close();fos.close();
}catch (Exception e) {}
}}
Depuis le JDK 1.1 et Java2
Notion de flot de caractères (characters Streams) :
On ne travaille plus uniquement sur des bytes, mais sur des caractères
Apparition de 2 classes : Writer et Reader FileReader <-> FileInputStream FileWriter <-> FileOutputStream
Echange facile de données avec accents (unicode)
Récapitulation
Flot de caractères Description
Reader Classe Abstraite pour flot d ’entrée (InputStream)
BufferedReader Bufférise les entrées ligne par ligne
LineNumberReader Garde trace du nb de lignes lues
CharArrayReader Lit un tableau de caractères
InputStreamReader Ttransforme un flot de byte et car. Unicode
FileReader Transforme des bytes lus depuis un fichier en car.
FilterReader Classe abstraite pour filtrer les caractères d ’entrées
PipedReader Lecture depuis PipeWriter
StringReader Lit depuis une chaîne de caractères
Récapitulation
Flot de caractères Description
Writer Classe Abstraite pour flot de sortie (OutputStream)
BufferedWriter Bufférise les sorties ligne par ligne
CharArrayWriter Ecrit un tableau de caractères
inputStreamWriter Transforme un flot de car. Unicode en flot de bytes
FileWriter Transforme un fichier de car. en flot de bytes
PrintWriter Ecrit des valeurs et des objs dans un Writer
PipedWriter Ecrit dans un PipeWriter
StringWriter Ecrit dans une chaîne de caractères
Exemple (FileWriter)
public static void main(String args[]){
File f = new File("C:\\Progjava\\fichier", "Essai.txt");try{
FileWriter fw = new FileWriter(f);PrintWriter pw = new PrintWriter(fw);// ou PrintWriter pw = new PrintWriter(new
FileWriter(f));pw.println(" coucou ");pw.close(); fw.close();
}catch (Exception e) {}
}
Exemple (FileReader)
public static void main(String args[]){
String chaine = "";File f = new File("C:\\Progjava\\fichier", "Essai.txt");try{
FileReader fr = new FileReader(f);BufferedReader br = new BufferedReader(fr);
// ou BufferedReader br = new BufferedReader(new FileReader(f));chaine = br.readLine();br.close(); fr.close();
}catch (Exception e) {} System.out.println(chaine);
}
Exemple (Saisie clavier)
public static void main(String args[]){
String chaine = "";try{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);chaine = br.readLine();
}catch (Exception e) {}System.out.println(chaine);
}
La sérialisation
Signifie persistance,
Pour éviter la perte des données à la fin de l ’exécution
Si un objet contient un autre objet, ce dernier est aussi sérialisé, et on obtient un arbre de sérialisation
Sérialisation (2)
Les objets transients Ce sont des objets qui ne peuvent pas
être sérialisés (processus, flux de données)
Si ils sont inclus dans un objet sérialisé, il faut indiquer qu ’ils sont transient
idem si on ne veut pas que certaines parties d ’un objet soient sérialisées
Syntaxe pour la sérialisation
La classe doit implémenter l ’interface serializable (pas de méthode à implémenter)
Exemple :import java.io.*;
class MaClasse implements Serializable {
public transient Thread mathread;private String nom;private int total;
Bidon reservoir; ...
Sauvegarde d ’un objet
public static void main(String args[]){
Bidon b1 = new Bidon("b1", 25);Bidon b2 = new Bidon("b2", 50);File f = new File("C:\\Progjava\\fichier", "Essai.obj");try{
FileOutputStream fos = new FileOutputStream(f);ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(b1);oos.writeObject(b2);oos.close(); fos.close();
}catch (Exception e) {}
}
Lecture d ’un objet persistant
public static void main(String args[]){
File f = new File("C:\\Progjava\\fichier", "Essai.obj");try{
FileInputStream fis = new FileInputStream(f);ObjectInputStream ois = new ObjectInputStream(fis);Bidon b1 = (Bidon) ois.readObject();Bidon b2 = (Bidon) ois.readObject();ois.close(); fis.close();
}catch (Exception e) {}
}
Top Related