page de garde classes de base du jdk novembre 2000 [email protected]
TRANSCRIPT
Présentation des classes de base
Les classes de base
Réification du langage : java.lang
Réification des différents types de références : java.lang.ref
"Réflectivité" (en fait introspection) : java.lang.reflect
Mathématiques sur les grands nombres : java.math
Entrées / sorties : java.io
Classes utiles : java.util
Classes graphiques : java.awt et javax.swing
java.lang \ Réification des types primitifs
Réification des types primitifs
Chaque type primitif du langage possède une classe associée dans le package java.lang
java.lang.Boolean, java.lang.Character, java.lang.Integer, …
Ces classes possèdent des constructeurs ou des méthodes effectuant les conversions
Les classes dérivant de java.lang.Number :
Définissent les bornes des plages de valeur (MIN_VALUE et MAX_VALUE)
Permettent la conversion de chaînes de caractères en nombre (parseXXX(…))
Permettent la conversion inverse (en différentes bases pour les entiers)
Les classes de flottants (java.lang.Float et java.lang.Double) définissent :
La constante NaN (Not a Number)
Les constantes NEGATIVE_INFINITY et POSITIVE_INFINITY
Ainsi que les prédicats correspondants
java.lang \ Classes et interfaces "systèmes"
Classes et interfaces "systèmes"
Le package java.lang contient aussi les classes et interfaces "connues" du compilateur
Ces classes sont traitées de manière spécifique par le compilateur
java.lang.Object
java.lang.String et java.lang.StringBuffer
java.lang.Throwable, java.lang.Error et java.lang.Exception
java.lang.Runnable et java.lang.Thread
…
java.lang \ Les chaînes de caractères
Les chaînes de caractères
java.lang.String stocke un tableau fixe de caractères
java.lang.StringBuffer stocke un ensemble mutable de caractères
Ces classes proposent de nombreuses méthodes :
De comparaison
D’extraction de caractères
De modification de la casse
…
Lorsque l’on effectue une concaténation de chaînes à l’aide de l’opérateur +, le système effectue de nombreuses conversion String StringBuffer…
Pensez lorsque nécessaire à utiliser StringBuffer dans vos expressions !
java.lang.Math
java.lang.Math
Cette classe donne accès à de nombreuses fonctions (méthodes statiques) mathématiques :
Valeur absolue, arrondissement, troncature par défaut ou excès
Maximum et minimum
Valeurs aléatoires
Logarithmes et exponentielles
Conversions angulaires
Fonctions trigonométriques
…
Constantes e et (java.lang.Double)
java.math
Le package java.math
Contient deux classes permettant une arithmétique de précision arbitraire :
java.math.BigInteger
Jamais d’overflow
Méthodes pour les performances (décalages, négations, opérations logiques…)
Congruence
Test (grossier) de primalité
java.math.BigDecimal
Valeur entière "infinie", jusqu’à 32 chiffres après la décimale
java.util
Le package java.util
Contient des abstractions et implémentations de :
Collections génériques
Calendriers
Contient quelques interfaces / classes utiles :
Itérateur
Vecteur de bits
Générateur de nombre pseudo-aléatoires
Décomposition de chaînes en lexèmes
Manipulation de ressources
Aide à la localisation d’applications
…
java.util \ Les Collections
Les Collections
Aussi appelées Containers : tableaux, vecteurs, hashtables, …
Les interfaces appartiennent à deux hiérachies distinctes :
Un Set est un ensemble d’objets distincts
Une List est une séquence d’objets ordonnés
Une Map associe des paires (clef , valeur), les clefs étant uniques
java.util \ Les Collections
Les Collections
Définissent des méthodes pour :
Ajouter et supprimer des éléments (add...(...), remove...(...))
Tester la présence d’éléments (contains...(...))
Effectuer une itération sur les éléments (iterator())
…
L’implémentation "complète" des méthodes n’est pas obligatoire : l’appel de méthodes non supportées déclenche java.lang.UnsupportedOperationException
Les objets stockés dans une collection ordonnée ou un Set doivent implémenter l’interface java.lang.Comparable
Note : les collections par défaut ne sont pas thread-safe !
java.util \ Les Collections \ Implémentations
Implémentations des Collections
Hash TableResizable
ArrayBalanced Tree Linked List
Set HashSet TreeSet
List ArrayListLinkedLis
t
Map HashMap TreeMap
A connaître également :
java.util.Vector
java.util.Stack
java.util.BitSet
java.util \ Les Collections \ Wrappers
Les Wrappers de Collections
Méthodes statiques de la classes java.util.Collections
Génèrent, à partir de collections, de nouvelles collections :
Pour les rendre thread-safe
public static List synchronizedList( List lstList );
public static Set synchronizedSet( Set stSet );
…
Pour les rendre non-mutables (lecture-seule)
public static List unmodifiableList( List lstList );
public static Set unmodifiableSet( Set stSet );
…
java.util \ Les Collections \ Wrappers
Algorithmes
Implémentations polymorphiques dans java.util.Collections :
Valeur minimum/maximum
Binary Search (sur List)
Reverse (sur List)
Shuffle (sur List)
Sort (sur List)
…
Implémentations non polymorphiques dans java.util.Arrays (sur des tableaux) :
Binary Search
Sort
…
java.util \ Les Itérateurs
Les Itérateurs
"Ancienne" version : java.util.Enumeration
boolean hasMoreElements()
Object nextElement()
"Nouvelle" version : java.util.Iterator
boolean hasNext()
Object next()
void remove()
java.util \ java.util.StringTokenizer
java.util.StringTokenizer
Décompose une chaîne de caractères en tokens, selon un ensemble de caratères séparateurs
StringTokenizer( String str )
StringTokenizer( String str, String delim )
StringTokenizer( String str, String delim, boolean returnTokens )
Se comporte grossièrement comme un Enumerator :
boolean hasMoreTokens()
String nextToken()
String nextToken( String delim )
Séparateurs par défaut : "\t\n\r\f"
java.io
Les entrées/sorties
Le package java.io contient de nombreuses classes permettant :
D’accéder aux entrées des systèmes de fichiers accessibles
D’effectuer des opérations entrées/sorties sur celles-ci
java.io.File
java.io.File
Abstraction d'un chemin de fichier ou de répertoire
Trois constructeurs d'objets java.io.File :
File( String pathname )
File( String parent, String child )
File( File parent, String child )
Test d'existence de fichier :
boolean exists()
Création réelle de fichier :
boolean createNewFile()
Suppression, renommage :
boolean delete(), void deleteOnExit()
boolean renameTo( File )
java.io.File
java.io.File
Création de répertoire :
boolean mkdir(), boolean mkdirs()
Prédicats de tests de type d'entrée :
isDirectory(), isFile()
canRead(), canWrite(), isHidden()
Exhibe des méthodes pour énumérer les fichiers :
static File[] listRoots()
String[] list(), String[] list( FilenameFilter )
File[] listFiles(), File[] listFiles( FilenameFilter ), …
…
java.io.File
java.io.File
!!! Attention à la portabilité !!!
N'utilisez ni /, ni \ dans les noms de chemins, utilisez :
static String separator
static char separatorChar
N'utilisez ni ;, ni : pour séparer des chemins, utilisez :
static String pathSeparator
static char pathSeparatorChar
java.io \ Les streams
Les streams
Tous les accès aux données (fichier, socket, …) se font via des streams (flux, flot)
java.io \ Les streams
Les streams
Les flots de caractères (lecteurs) :
java.io \ Les streams
Les streams
Les flots de caractères (écrivains) :
java.io \ Les streams
Les streams
Les flots "d'octets" (lecteurs) :
java.io \ Les streams
Les streams
Les flots "d'octets" (écrivains) :
java.io \ Le StreamTokenizer
java.io.StreamTokenizer
La version Stream de java.util.StringTokenizer…