« Programmation Java/Instanciation et cycle de vie » : différence entre les versions

Contenu supprimé Contenu ajouté
Introduction
Aucun résumé des modifications
Ligne 120 :
}
</syntaxhighlight>
 
== Initialisation d'un objet ==
 
L'appel à l'instruction <code>new</code> crée un nouvel objet de la classe spécifiée initialisé de la façon suivante :
* Juste après l'allocation mémoire, tous les membres sont initialisés à leur valeur par défaut dépendant du type (<code>null</code> pour les références, <code>false</code> pour les booléens, et <code>0</code> pour les types numériques).
* Le constructeur nommé en interne <code>&lt;init&gt;</code> correspondant aux types des arguments de l'instruction <code>new</code> est appelé.
Le code de chaque constructeur <code>&lt;init&gt;</code> est constitué de plusieurs parties concaténées :
* l'appel explicite au constructeur de la classe de base dans le fichier source, ou un appel implicite au constructeur par défaut (sans arguments) ;
* le code commun de construction définit par les initialisations de membres et les blocs de code non précédés du mot <code>static</code>
* et le code définit explicitement dans le fichier source.
 
=== Exemple ===
 
<syntaxhighlight lang="java">
public class MaClasse extends ClasseDeBase
{
// Attributs : un nom et 4 lignes de description
 
private String name;
 
private DescriptionLine[] description = new String[4]; // (1)
 
{
description[0] = new DescriptionLine("Exemple d'objet"); // (2)
}
 
private DescriptionLine firstline = description[0]; // (3)
 
// Constructeur
public MaClasse(String name)
{
super("Exemple"); // (0)
this.name = name; // (4)
}
}
</syntaxhighlight>
 
Le code du constructeur <code>&lt;init&gt;(String name)</code> contient alors cette séquence :
<syntaxhighlight lang="java">
super("Exemple"); // (0)
description = new String[4]; // (1)
description[0] = new DescriptionLine("Exemple d'objet"); // (2)
firstline = description[0]; // (3)
this.name = name; // (4)
</syntaxhighlight>
 
L'ordre des initialisations est donc très important.
Dans l'exemple précédent, si les lignes (2) et (3) sont interverties, une exception de type <code>NullPointerException</code> est lancée lors de la construction de l'objet.
 
== Nettoyage ==