Ich habe eine Klasse und in dieser Klasse habe ich diese:
//some code
private int[] data = new int[3];
//some code
Dann in meinem Konstruktor:
public Date(){
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
Wenn ich das mache, ist alles in Ordnung. Standarddatenwerte werden initialisiert, aber wenn ich dies stattdessen tue:
public Date(){
int[] data = {0,0,0};
}
Es sagt:
Local variable hides a field
Warum?
Wie kann ein Array im Konstruktor am besten initialisiert werden?
data
danach"//some code"
hat einen Gültigkeitsbereich der gesamten Klasse. während die Variabledata
im Konstruktor einen Bereich innerhalb des Konstruktors hat. und sobald der Konstruktor fertig ist, wird die Variable zerstört. Außerdemdata
versteckt die Variable im Konstruktor die gleichnamige Variable in der Klasse. Dies rechtfertigt den FehlerLocal variable hides a field
Antworten:
Dadurch werden Ihre Array-Elemente bereits auf 0 initialisiert. Sie müssen dies im Konstruktor nicht erneut wiederholen.
In Ihrem Konstruktor sollte es sein:
quelle
data=new int[3]
in defualt Konstruktor verwendenDate()
?Sie könnten entweder tun:
Was
data
im Konstruktor initialisiert wird , oder:Was initialisiert wird,
data
bevor der Code im Konstruktor ausgeführt wird.quelle
public Data() throws Error {
wennOutOfMemoryError
sie ausgelöst wird.Dies liegt daran, dass Sie im Konstruktor eine lokale Variable mit demselben Namen wie ein Attribut deklariert haben.
Um ein ganzzahliges Array zuzuweisen, bei dem alle Elemente auf Null initialisiert sind, schreiben Sie dies in den Konstruktor:
Fügen Sie diesen Code in den Konstruktor ein, um ein ganzzahliges Array mit anderen Anfangswerten zuzuweisen:
oder:
quelle
warum nicht einfach
Der Grund, warum Sie den Fehler erhalten haben, ist, dass
int[] data = ...
eine neue Variable deklariert und das Feld ausgeblendet wirddata
Es ist jedoch zu beachten, dass der Inhalt des Arrays bereits auf 0 initialisiert ist (der Standardwert von
int
).quelle
In Ihrem Konstruktor erstellen Sie ein weiteres int-Array:
Versuche dies:
HINWEIS: Übrigens müssen Sie Ihre Array-Elemente NICHT initialisieren, wenn sie als Instanzvariable deklariert sind. Instanzvariablen erhalten automatisch ihre Standardwerte. Bei einem ganzzahligen Array sind die Standardwerte alle Nullen.
Wenn Sie ein Array lokal deklariert hätten, müssten Sie jedes Element initialisieren.
quelle
Der beste Weg ist, keine initialisierenden Anweisungen zu schreiben. Dies liegt daran , wenn Sie schreiben ,
int a[]=new int[3]
dann standardmäßig in Java alle Werte des Arrays , dha[0]
,a[1]
unda[2]
zu initialisiert werden0
! In Bezug auf die lokale Variable, die ein Feld verbirgt, veröffentlichen Sie Ihren gesamten Code, damit wir zum Schluss kommen.quelle