Page de garde Classes de base du JDK Novembre 2000 [email protected].

25
Page de garde Classes de base du JDK Novembre 2000 [email protected]

Transcript of Page de garde Classes de base du JDK Novembre 2000 [email protected].

Page 1: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

Page de garde

Classes de base du JDK

Novembre [email protected]

Page 2: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 3: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 4: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 5: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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 !

Page 6: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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)

Page 7: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 8: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 9: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 10: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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 !

Page 11: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 12: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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 );

Page 13: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 14: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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()

Page 15: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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"

Page 16: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 17: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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 )

Page 18: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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 ), …

Page 19: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

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

Page 20: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Les streams

Les streams

Tous les accès aux données (fichier, socket, …) se font via des streams (flux, flot)

Page 21: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Les streams

Les streams

Les flots de caractères (lecteurs) :

Page 22: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Les streams

Les streams

Les flots de caractères (écrivains) :

Page 23: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Les streams

Les streams

Les flots "d'octets" (lecteurs) :

Page 24: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Les streams

Les streams

Les flots "d'octets" (écrivains) :

Page 25: Page de garde Classes de base du JDK Novembre 2000 Yannis.BRES@cma.inria.fr.

java.io \ Le StreamTokenizer

java.io.StreamTokenizer

La version Stream de java.util.StringTokenizer…