J'ai une classe et dans cette classe j'ai ceci:
//some code
private int[] data = new int[3];
//some code
Puis dans mon constructeur:
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
Si je fais cela, tout va bien. Les valeurs de données par défaut sont initialisées mais si je le fais à la place:
public Date(){
int[] data = {0,0,0};
}
Ça dit:
Local variable hides a field
Pourquoi?
Quelle est la meilleure façon d'initialiser un tableau à l'intérieur du constructeur?
data
après a"//some code"
une portée de la classe entière. tandis que la variabledata
dans le constructeur a une portée à l'intérieur du constructeur. et une fois le constructeur terminé, la variable sera détruite. Et aussi ladata
variable à l'intérieur du constructeur masque la variable du même nom dans la classe. Cela justifie l'erreurLocal variable hides a field
Réponses:
Cela initialise déjà vos éléments de tableau à 0. Vous n'avez pas besoin de répéter cela dans le constructeur.
Dans votre constructeur, cela devrait être:
la source
data=new int[3]
dans le constructeur par défautDate()
?Vous pouvez soit faire:
Qui s'initialise
data
dans le constructeur, ou:Qui s'initialise
data
avant que le code du constructeur ne soit exécuté.la source
public Data() throws Error {
siOutOfMemoryError
elle sera lancée.En effet, dans le constructeur, vous avez déclaré une variable locale avec le même nom qu'un attribut.
Pour allouer un tableau d'entiers dont tous les éléments sont initialisés à zéro, écrivez ceci dans le constructeur:
Pour allouer un tableau d'entiers qui a d'autres valeurs initiales, placez ce code dans le constructeur:
ou:
la source
pourquoi pas simplement
la raison pour laquelle vous avez l'erreur est que
int[] data = ...
déclare une nouvelle variable et masque le champdata
cependant il faut noter que le contenu du tableau est déjà initialisé à 0 (la valeur par défaut de
int
)la source
dans votre constructeur, vous créez un autre tableau int:
Essaye ça:
REMARQUE: Au fait, vous n'avez PAS besoin d'initialiser vos éléments de tableau s'il est déclaré comme variable d'instance. Les variables d'instance obtiennent automatiquement leurs valeurs par défaut, qui pour un tableau d'entiers, les valeurs par défaut sont toutes des zéros.
Si vous aviez un tableau déclaré localement, vous devrez initialiser chaque élément.
la source
Le meilleur moyen est de ne pas écrire d'instructions d'initialisation. C'est parce que si vous écrivez
int a[]=new int[3]
alors par défaut, en Java toutes les valeurs de tableau c'est à direa[0]
,a[1]
eta[2]
sont initialisées à0
! En ce qui concerne la variable locale masquant un champ, publiez l'intégralité de votre code pour que nous puissions conclure.la source