Ich habe hier 2 Beispiele, einmal in einer Klasse die keine Main Methode enthält und einmal innerhalb einer Main Methode
Beispiel 1: Eine beliebige Klasse
Als 1 Zeiler wo die Attribute einer Klasse stehen
Java:
privateArrayList<String> liste2 =newArrayList<String>();// funktioniert warum auch immer
Als 2 Zeiler
Java:
privateList<String> geräte;// Dort wo die Attribute der Klasse stehen
geräte =newArrayList<String>();// Muss im Konstrutor stehen sonst Fehlermeldung. Warum funktioniert das obere obwohl es nicht im Konstruktor steht und dieses hier nicht ?
In der Main Methode geht es ganz normal ... beides funktioniert
List<String> liste2;// funktioniert auch
liste2 =newArrayList<String>();
Warum ich sowas spezielles frage ... weil das die Fehler sind wo ich eine Fehlermeldung bekomme die mir persönlich nichts sagt, ich stundenlange davor sitze ... unendlich probiere und obwohl ich raus gefunden habe noch immer nicht verstehe ...
... weil das die Fehler sind wo ich eine Fehlermeldung bekomme die mir persönlich nichts sagt, ich stundenlange davor sitze ... unendlich probiere und obwohl ich raus gefunden habe noch immer nicht verstehe ...
Die Fehlermeldung sollteste vielleicht mal posten^^
Zu deinem Problem: Du deklarierst ja ausserhalb des Konstruktors oder anderer Methoden deine Variable (gilt natürlich nur für Member/Attribute), diese wird dann von JAVA vorerst im speicher angelegt aber noch nicht befüllt(initialisiert). Im "zweiten" Durchlauf, wird dann entweder der von dir angegebene Initialisierungswert (hier new ArrayList<String>()) oder der DefaultWert (Bei String und Objects = null, bei primitiven 0 usw.) vergeben.
Der Grund, warum du erst wieder im Konstruktor oder in einer Methode auf deine ArrayList variable zugreifen kannst ist der, dass sonst die Instanz deiner Klasse fehlt, mit deren MemberVariable du arbeiten möchtest.
Ich hoffe ich konnte das irgendwie verständlich rüberbringen.:autsch:
sollte es gehen.
Der Fehler ist simpel: Auf Variablen in einem Objektscope kann aus einem statischem Kontext (z.B. der "main"-Methode) nicht zugegriffen werden. Deswegen macht man solche Variablen entweder statisch oder besser, man referenziert die Objektvariable ("new MyObject().myVariable").
Ja mich wunderte es nur das ich deklarieren und initialisieren in einem machen durfte außerhalb einer Methode. Wenn ich aber deklariere und in der nächsten Zeile initialisiere dann Fehlermeldung. Habe mir schon gedacht das " ausführbarer " Code in Konstruktur stehen sollte. So wie es auch anscheinend sein soll, nur hat anscheinend Deklarieren + initialisieren eine Sonderstellung.
Umlaute im Source sind eher nicht so gut.
Das hat zwar mit dem eigentlichen Thema Deiner Frage nichts zu tun, ich wollte es nur gesagt habe.
Wenn man einen Namen mit einem Umlaut verwenden will dann "geraet" anstelle von gerät schreiben.