Datentypen Felder: Deklaration und Initialisierung

DrPCox

Mitglied
Hallöchen,

ich stehe gerade mächtig auf dem Schlauch. Ich behaupte mal mich in den Grundlagen in Java sehr gut auszukennen, aber irgendwie bin ich gerade ziemlich ratlos.

Es geht einfach nur um Felder. Ich möchte gerne eine Feld deklarieren und später initialisieren bzw. erstmal eine Länge zuweisen:

Java:
public class Arrays {
	
	static String[] test;
	test = new String[3];
		
	public static void main(String[] args) {
		

	}

}

Eclipse zeit mit aber in der ersten Zeile (static STring....) einen Fehler an. Genau genommen sagt mir Eclipse:

Syntax error on token ";",,expected

Packe ich nun beides in eine Zeile, ist alles wieder gut

Java:
public class Arrays {
	
	static String[] test  = new String[3];
		
	public static void main(String[] args) {
		

	}

}

Wenn ich mich aber nun an einer Wertzuweisung versuche wird es richtig bunt:

Java:
public class Arrays {
	
	static String[] test = new String[3];
	test[0] = "Test";
	
		
	public static void main(String[] args) {
		

	}

}

Fehler in der Zeile "static String[]..." :

Multiple markers at this line
- Watchpoint:Arrays [access and
modification] - test
- Syntax error on token ";", { expected after
this token


Fehler im Kopf der Mainmethode (Die runden Klammern werden angestrichen):

Multiple markers at this line
- Syntax error on token ")", ;
expected
- Syntax error on token "(", ;
expected


Und zum Schluss wird noch an der schließenden Klammer der Klasse rumgemeckert:

Syntax error, insert "}" to complete ClassBody

Nun aber zum richtig kuriosen Teil der Geschichte. Wenn ich das ganze Gesummse in die Mainmethode packe, dann ist alles wieder Tutti:

Java:
public class Arrays {
			
	public static void main(String[] args) {
		
		String[] test;
		test = new String[3];
		test[0] = "Test";

	}

}

Es sei dazu gesagt, dass das hier natürlich nur ein Test-Projekt ist und mir der Fehler im Rahmen eines anderen begegnet ist. Auch entschuldige ich mich für die vielen Quellcode-Zitate. Ich wusste nicht, wie ich es besser beschreiben sollte.

Ich bin für jede Hilfe dankbar!
 
Java hat so die Eigenart, dass man Code nicht einfach so hinschreiben darf, sondern bestimme Konventionen beachten muss

Fall1: Der Code steht außerhalb einer Methode und nicht in der Dekl. einer Variablen
Fall3: Siehe Fall 1

Fall4: Siehe Eingangssatz
 
2 kleine Anmerkungen von meiner Seite:

wenn du Klassen definierst, sollten sie nicht den gleichen Namen haben wie Klassen aus der Standardbibliothek!
Java:
public class TestArray {
	static String[] test;

	public static void main(String[] args) {
		test = new String[3];
	}
}
ohne Compilefehler, den Compilefehler schreibt er erst dann...wenn du direkt nach der deklarierung eines static-Feldes, die Initialisierung schreibst!

auch folgendes wird ohne Fehler compiliert:

Java:
public class TestArray  {

	static String[] test = new String[3];

	public static void main(String[] args) {
		test[0] = "Test";
	}
}
 
Wie gesagt....die Klasse hieß nur "Array" um das mal eben so zu testen.^^

Heißt also, dass ich einem Array außerhalb einer Methode keine Länge zuweisen kann? Bzw. die Schritte "Deklaration" und "Zuweisung einer Länge" (new String[3]) nicht trennen darf und ihm auch keine Werte zuweisen darf, es sei denn ich mache das direkt bei der Deklaration? Denn zumindest kann ich es direkt mit Werten initialisieren. Ganz ohne Probleme:

Java:
public class Arrays {
	
	static String[] test = {"hallo", "test"};

				
	public static void main(String[] args) {
	
	}

}

Tut mir Leid, dass ich mich so anstelle, aber ich verstehe das System dahinter gerade einfach nicht.
 
"Ich behaupte mal mich in den Grundlagen in Java sehr gut auszukennen,"
hmmmmm

"Heißt also, dass ich einem Array außerhalb einer Methode keine Länge zuweisen kann?"
ja (Ausnahme Dekl.), wozu sollte das anders sein?
 
Instanzvariablen sollte man im Constructor initialisieren.

Fuer Klassenvariablen kann man den static initializer Block verwenden:

Java:
    static String[] test = new String[3];
    static {
        test[0] = "Test";
    }
 

Neue Themen


Zurück
Oben