Initialisierung von Arrays - Instanz vs. lokal?

flashray

Erfahrenes Mitglied
Hallo,

Aufgabe:
Gegeben sei eine Klasse Test, die eine Instanzvariable namens Scores als Feld von ints deklariert:
Code:
int Scores[];
Welches der nachfolgenden Codefragmente würde, wenn es im Konstruktor der Klasse Test stünde,
die Instanzvariable Scores korrekt als ein Feld mit vier ints des Werts 0 initialisieren?
Begründen Sie für jede Antwortoption kurz, warum sie zutrifft oder nicht. (Mehrere Antworten
können richtig sein.)
Code:
a) int Scores[] = {0,0,0,0};
b) Scores = new int[4];
c) Scores = new int[4]; for (int i = 0; i < 4; i++) Scores[i] = 0;
d) Scores = {0,0,0,0};

Musterlösung:
Antworten b) und c) sind korrekt. Der Code in b) funktioniert, da Felder eingebauter Datentypen,
die als Instanzvariablen deklariert werden, automatisch bei der Konstruktion mit Null initialisiert
werden. (Dies gilt nicht für lokale Variablen innerhalb von Methoden!) Der Code in c) funktioniert,
aber die Schleife ist überflüssig – sie würde nur Sinn machen, wenn ein anderer Wert als Null zur
Initialisierung gefordert gewesen wäre. ...

Beispielcode:
Java:
public class Example {

	int Scores[];

	public Example () {
		Scores = new int[4];
	}

	public void printScoresLocal() {
		int ScoresLocal[] = new int[4];
		for (int i = 0; i < ScoresLocal.length; i++) {
			System.out.println(ScoresLocal[i]);
		}
	}

	public static void main(String[] args) {
		Example s = new Example();
		for (int i = 0; i < s.Scores.length; i++) {
			System.out.println(s.Scores[i]);
		}
		System.out.println();
		s.printScoresLocal();
	}
}

Ausgabe:
Code:
0000
0000

Meine Frage:
In der Musterlösung heißt es, das Arrays als Instanz-Variablen automatisch mit 0 initialisiert werden, hingegen würde das aber bei lokalen Variablen nicht der Fall sein. Habe um dies zu testen das obige Beispiel erstellt und festgestellt das dem nicht so ist.

Ist der Hinweis zur Initialisierung lokaler Arrays falsch oder ist er anders zu verstehen?


Vg Erdal
 
Hallo!

du hast da etwas mißverstanden...
Java:
/**
 * 
 */
package de.tutorials;

/**
 * @author Thomas.Darimont
 * 
 */
public class AttributInitializationExample {

    int i; // Implizit 0 (primitve Instanz Variable)

    String s; // Implizit null (Referenztyp Instanz Variable)

    /**
     * @param args
     */
    public static void main(String[] args) {
        int j; // Lokale Variablen werden (im Gegensatz zu Instanzvariablen) bei der Deklaration NICHT Implizit mit dem entsprechenden default Wert initialisiert
        //j=0;
        j++; // compile time error -> local variable j may not have been initialized...
        System.out.println(new AttributInitializationExample());
    }

    public String toString() {
        return "i=" + i + " s=" + s;
    }

}

Gruß Tom
 
Hallo Tom,

stimmt Instanzvariablen werden im Gegensatz zu lokalen Variablen implizit initialisiert - bei Arrays nur die Variable aber nicht die Feldelemente (da weder die Länge bekannt ist, noch ein Array erzeugt ist, können die Feldelemente ja auch nicht initialisiert werden).

Danke.


Übrigens: Auf deinem neuen Bild siehst du viel jünger und besser aus :) !


Vg Erdal
 
Zurück