Pourquoi l'observation interfère avec l'initialisation des champs
Votre classe a des champs nommés capacité et éléments, que vous essayez d'initialiser dans le constructeur. Toutefois, les valeurs que vous définissez lors de la construction ne sont pas reflétées lors de l'interrogation des valeurs de champ. Ce comportement découle d'un concept appelé shadowing.
L'ombrage se produit lorsque deux variables partagent le même nom mais existent dans des portées différentes. Dans votre constructeur, vous déclarez des variables locales également nommées capacité et éléments. Ces variables locales ont priorité sur les champs correspondants dans la portée du constructeur, les occultant ainsi.
public StringArray() { int capacity = 10; // Local variable shadows field String[] elements; // Local variable declaration without initializer elements = new String[capacity]; // Initializes local variable, not field }
En conséquence, l'affectation à la variable de capacité locale initialise cette variable, pas le champ. De même, bien que vous initialisiez la variable elements, son affectation n'a pas d'impact sur le champ car la variable locale est prioritaire. Par conséquent, la capacité du champ reste à sa valeur par défaut (0) et les éléments sont définis sur null.
Pour résoudre ce problème, supprimez les déclarations de variables locales dans le constructeur pour permettre aux noms de capacité et aux éléments de faire référence au variables d'instance.
public StringArray() { // Remove local variable declarations this.capacity = 10; this.elements = new String[capacity]; }
Alternativement, si la conservation des paramètres du constructeur est nécessaire, utilisez des noms qualifiés pour référencer explicitement les variables d'instance.
public StringArray(int capacity) { this.capacity = capacity; // Initializes the field using qualified name }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!