Création de classe JAVA

 

Avant d'utiliser un objet, vous allez l'instancier à partir d'une classe. Une classe regroupe donc tout ce qui est nécessaire pour pouvoir ensuite utiliser un objet originaire de la classe.

Par exemple, la classe voiture vous permettra de créer (instancier) une voiture (voiture n°1) et de la faire vivre dans le temps.

 

- Tout d'abord les termes utilisés

 

Le principe de java est similaire à tous les langages objets: Pour utiliser un objet, on envoie un message. Ce message déclenche une méthode dans l'objet. Cette méthode pouvant elle même envoyer d'autres messages à d'autres objets...

 

Les classes

Il existe 3 types de classes:

- Classe concrète:Toutes les méthodes sont implémentées

- Classe abstraite: Certaines méthodes sont implémentées, les autres sont abstraites et seront donc à implémenter via surcharge.

- Classe d'interface: Aucune méthode n'est implémentée. (identique au concept de virtuel pure en c++)

 

Toutes les classes dérivent de la classe de base java.lang.Object. (Note: le package java.lang est automatiquement importé, vous n'avez pas à le faire).

Image non trouvée !Dans eclipse, l'utilisation de la super classe object est signalée lors de la création d'une classe. Exemple lors de la création de la classe Hello:

Image non trouvée !

Le nom d'une classe doit commencer par une majuscule

Le nom d'une méthode doit commencer par une minuscule

L'utilisation de caractères spéciaux est interdite.

 

Image non trouvée !Dans JAVA, une classe (éventuellement public) par fichier source.

Il est cependant possible de mettre plusieurs classes dans un fichier, mais il n'existera alors qu'une seule classe public, où les autres classes seront imbriquées dans une classe public.

Si le fichier .java contient une classe public, le nom du fichier devra porter le même nom que celui de la classe public (à la mjascule prêt, car case sensitive). S'il n'existe pas de classe public dans le fichier, le nom du fichier pourra être un nom quelconque.

 

- Les modifieurs/niveau d'accès

public, protected, private, final

- Dérivation/Héritage simple

extends et super

- Le polymorphisme en JAVA

surcharge
redéfinition

- Classes abstraites

abstract

- Constructeur/destructeur

- Héritage multiple/interfaces

Héritage multiple
Interface
Reproduire l'héritage multiple (implements)

- Static et classes utilitaires

- Classes imbriquées ou internes

- Classes locales

- Classes anonymes

 

Héritage de méthodes de la super classe object:

Comme toutes les classes héritent de la classe object, des méthodes seront automatiquement disponibles dans toutes les nouvelles classes comme:

Méthodes Désignation
getClass pour récupérer une instance de java.lang.Class
equals pour effectuer des tests d’égalité entre deux objets. Il faudra souvent redéfinir la méthode afin de préciser plus précisement sur quoi doit se faire le test. Car deux instances de même classe sont-elles vraiment identique ? Elles auront le même hashcode en tout cas, et c’est le test effectué de base par la méthode equal.
finalize Presque équivalent au destructeur…Mais n’est pas forcement déclenchée, car c’est au carbadge collector qu’incombe la tache de détruire des objets instanciés !
hashcode Empreinte. Deux objets equals ont le même hashcode par défaut.
toString Chaîne représentant un objet.


Il y a d'autres méthodes, comme notify, notify all wait…

 

.class

Les classes se compilent pour produire du bytecode (cf. explication dans l'exemple helloworld). Le fichier généré se nomme xxxxx.class ou xxxxx est le nom que vous avez donné à votre classe. Ce qui est marrant, c'est la signature (encore appelé nombre magique) de ce fichier .class. Cette signature est situé aux quatre premiers octets du fichier généré (utilisez un éditeur hexadécimal pour les lire). Ce nombre vaut en hexdécimal: CA FE BA BE (à lire cafe baby)...

Ils ont beaucoup d'humour !

 

Désassembler un .class

Il sera possible de désassembler le byteCode:

javap -c Hello > Hello.bc