# Programmation Java/Classes de base

* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
* Introduction
* La notion de machine virtuelle
* Installation
** NetBeans
** Eclipse
** Visual Studio Code
* Bases du langage
** Premier programme
** Commentaires
** Types de base
** Opérateurs
** Conditions
** Bloc de portée
** Itérations
** Tableaux
* Les classes en Java
** Membres
** Modificateurs d'accès
** Héritage
** Encapsulation
** Polymorphisme
** Classes abstraites
** Interfaces
** Classes internes
** Transtypage
** Types génériques
** Instanciation et cycle de vie
** « this »
** Objets comparables et clés
** Énumérations
** Exceptions
** Packages
* Classes de base
** Collections
** Nombre de taille arbitraire
** Tags Javadoc
** Annotations
** Entrées sorties
** Threads et synchronisation
** Méthodes natives
** Réflexion
** Regex
** JUnit
* Conclusion
* Exemples en Java
** Générer un carré magique
** Générer un triangle de Sierpiński
** XML
** Swing
*** Un premier exemple
*** Formulaire avec boutons sur image
*** Calcul de somme
*** Calcul de distance
* Annexes
** Les outils de base fournis avec le Java Development Kit
** Créer une archive Java
** Paramétrer la JVM
** Liste des mots réservés
** Débogage
** Java et les autres langages
[ Modifier le sommaire ]
Java est livré avec un ensemble de bibliothèques de base proposant des classes qui s'avèrent vite nécessaires. Tout programmeur Java doit avoir un bonne connaissance de toutes les possibilités offertes par ces composants. Il n'est pas nécessaire d'apprendre quoi que ce soit mais simplement d'avoir une idée générale de ce qui est disponible pour savoir quelles parties de la bibliothèque utiliser pour résoudre un problème donné.
Dorénavant, vous aurez toujours besoin d'avoir avoir la documentation complète sous le coude, via Internet ou sur votre ordinateur.

## Paquetage java.lang

Le paquetage (le package) java.lang est le paquetage de base de Java. Il n'est même pas nécessaire de faire un import de ce paquetage : il est implicite.
Ce paquetage regroupe les classes concernant les types (Boolean, Byte, Character, Short, Integer, Long, Float, Double, String), les classes (Object classe de base de toutes les autres, Class), les threads (Thread, ThreadGroup), …

### Les chaînes de caractères

Les chaînes de caractères ne sont pas des types primitifs et sont des instances de la classe java.lang.String. Les constantes sont entourées de guillemets.
Exemple :
La concaténation se fait avec l'opérateur + :
La concaténation d'une chaîne de caractères avec un type primitif ajoute sa représentation nominale (décimal pour les types entiers, le caractère pour char, "true" ou "false" pour boolean) :
La concaténation d'une chaîne de caractères avec un objet appelle sa méthode toString retournant une chaîne de caractères :
Par défaut, la méthode toString définie dans la classe java.lang.Object retourne le nom de la classe de l'objet, suivi du caractère arobase @, suivi de la valeur retournée par la méthode hashCode en hexadécimal.
La méthode length permet d'obtenir la longueur d'une chaîne de caractères :
Equivaut à :
Nous pouvons utiliser des guillemets à l'intérieur d'une chaine de caractères en utilisant le caractère d'échappement \
Nous pouvons également utiliser des caractères spéciaux tels que \n (nouvelle ligne), \t (tabulation) pour formater la sortie.
Enfin, nous pouvons afficher des caractères particuliers (tels les caractères accentués, par exemple) en utilisant le préfixe \u suivi du code Unicode du caractère sur 4 chiffres hexadécimaux :
Cependant, la séquence \u est également utilisable en dehors des chaînes de caractères pour encoder le code source. Exemple :
équivaut à :

## Paquetage java.io

Ce paquetage concerne les flux d'entrées et sorties en général (fichiers, réseau, buffer).
Les deux classes abstraites InputStream et OutputStream gèrent les entrées et sorties binaires, utilisant des tableaux d'octets.
Les sous-classes de celles-ci sont plus spécialisées :
* FileInputStream et FileOutputStream gèrent les fichiers,
* ByteArrayInputStream et ByteArrayOutputStream lisent/écrivent depuis/vers un tableau d'octets.
Les classes Reader et Writer utilisent les tableaux de caractères.
Leurs sous-classes sont également plus spécialisées :
* FileReader et FileWriter gèrent les fichiers,
* StringReader et StringWriter lisent/écrivent depuis/vers une chaîne de caractères.

## Paquetage java.util

Ce paquetage contient les classes permettant la gestion de collections (liste chaînées, table de hachage, tableau extensible, …). Elle contient également une classe de générateur aléatoire (classe Random), deux classes gérant le lancement de tâches périodiques ou à un moment donné (Timer et TimerTask), la gestion des dates (Date, Calendar, GregorianCalandar), …

## Paquetage java.net

Ce paquetage contient les classes permettant de communiquer à travers un réseau en utilisant des sockets TCP ou UDP. Il existe également des classes pour gérer les adresses IP (version 4 et 6).

## Paquetage java.awt

Ce paquetage regroupe les classes graphiques de base.
Les composants graphiques utilisent les composants natifs de la platforme de lancement. Ils sont nommés Heavyweight, par opposition à Lightweight qui désigne les sous-classes de la classe Component. Bien que beaucoup plus rapide, il tend à être remplacé par swing, bien plus fourni.

## Paquetage javax.swing

C'est un paquetage de gestion d'interface graphique très fournie.
Les composants sont entièrement développés en Java à partir de la classe java.awt.Component. Quelle que soit la plateforme de lancement de l'application, ils ont donc le même comportement et la même apparence, qui peut d'ailleurs être configurée.
* Metal
* Nimbus