Java Initialiser un tableau int dans un constructeur
J'ai une classe et dans la classe que j'ai ceci:
//some code
private int[] data = new int[3];
//some code
Ensuite dans mon constructeur:
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
Si je fais cela, tout est OK. De données par défaut les valeurs sont initialisées mais si je place ce faire:
public Date(){
int[] data = {0,0,0};
}
Il dit:
Local variable hides a field
Pourquoi?
Quel est le meilleur moyen d'initialiser un tableau à l'intérieur du constructeur?
grâce
- J'espère que vous êtes conscient de la notion de portée de variable? votre variable
data
après"//some code"
est d'avoir un champ d'application de l'ensemble de la classe. tandis que la variabledata
dans le constructeur est d'avoir un champ d'application dans le constructeur. et une fois que le constructeur est fait, la variable sera détruit. Et aussi ledata
variable à l'intérieur de constructeur masque la variable de même nom dans la classe. Cela justifie l'erreurLocal variable hides a field
Vous devez vous connecter pour publier un commentaire.
Déjà initialise votre les éléments du tableau à 0. Vous n'avez pas besoin de le répéter à nouveau dans le constructeur.
Dans votre constructeur, il devrait être:
data=new int[3]
dans defualt constructeurDate()
?Vous pouvez soit le faire:
Qui initialise
data
dans le constructeur, ou:Qui initialise
data
avant le code dans le constructeur est exécuté.public Data() throws Error {
siOutOfMemoryError
sera levée.C'est parce que, 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, il faut l'indiquer dans le constructeur:
Pour allouer un tableau d'entiers qui a d'autres valeurs initiales, mettez ce code dans le constructeur:
ou:
pourquoi ne pas tout simplement
la raison pour laquelle vous obtenu l'erreur est parce que
int[] data = ...
déclare une nouvelle variable et masque le champdata
toutefois, il convient de noter que le contenu du tableau est déjà initialisé à 0 (la valeur par défaut de
int
)dans votre constructeur vous créez un autre tableau int:
Essayez ceci:
REMARQUE: Par la façon dont vous n'avez PAS besoin d'initialiser les éléments du tableau si elle est déclarée comme une variable d'instance. Les variables d'Instance d'obtenir automatiquement les valeurs par défaut, qui, pour un tableau d'entiers, les valeurs par défaut sont tous des zéros.
Si vous aviez déclarés localement tableau s'ils vous auriez besoin d'initialiser chaque élément.
Le meilleur moyen est de ne pas écrire de l'initialisation déclarations. C'est parce que si vous écrivez
int a[]=new int[3]
par défaut, en Java, toutes les valeurs de tableau, c'est à direa[0]
,a[1]
eta[2]
sont initialisées à0
! Concernant la variable locale cacher un champ, postez votre code entier pour nous d'arriver à la conclusion.