Bin Javaneuling. Eclipse sagt mir: "Cannot make a static reference to the non-static field x". Sind Fields also eine Art Klassenvariablen? Wieso heisst das "Field" und nicht einfach variable oder class variable?
Ist die "Referenz" so eine Art Verweis auf eine x-beliebige Variable? Und was bedeutet static und non-static in diesem Zusammenhang.
Field ist die englische Bezeichnung für Variable. Und dein Fehler ist, dass du in einer statischen Methode versuchst auf eine Instanzvariable zuzugreifen.
class variable ist übrgens Pseudo-Englisch, entweder du sagst es Deutsch: Klassenvariable oder richtig: static Field
Wenn du kein Englisch kannst bzw. nicht mit Englischen Fachwörten um dich schleudern kannst, wäre es hilfreich Eclipse auf Deutsch umzustellen.
Ok, danke dir schon mal. Dann ist eine Instanzvariable also ohne "static"? Wenn man in Java also von Field redet, meint man einfach die Instanzvariablen?
Sind jetzt Instanzvariablen und Klassenvariablen sowas wie Gegensätze?
Wieso Gegensätze? Das eine gehört halt zur Klasse dazu, das andere zu einer konkreten Instanz derselben. Statische Variablen können von allen Instanzen der Klasse gemeinsam genutzt werden (und für den Fall public auch von allen anderen Klassen und Instanzen, die in deinem Programm so rumlungern), nicht-statische nur von der Instanz, zu der sie gehören.
man kann nicht einfach sagen Variable heißt field im Englischen, variable ist auch ein guter Begriff,
es wird da zwischen eben den Arten unterschieden, die jetzt kaum ohne deutsche Namen erklärt werden können
statische Variable, statisches Attribut -> static field, class variable (*)
Instanzvariable, Instanzattribut -> field (?), instance variable (*)
lokale Variable -> local variable
für lokale Variablen ist das deutsche Attribut bzw. das englische field nun wirklich ungeeignet
Sorry, erschien für mich nicht eindeutig. Das ganze english und deutsch und dann sieht man manchmal gemischte Formen etc. verwirrt ganz schön.
Nochmals von mir zusammengefasst:
Field = english für Variable im allgemeinen Sinn
Static Field = english für Klassenvariable. Alle Instanzen können hierbei zugreifen und verändern.
Non-Static Field = english für Instanzvariable die nur von der entsprechenden Instanz der Klasse verwendet werden kann.
Lokale Variablen in {...} werden also weiterhin "local" oder "local variable" genannt, zu deutsch: Lokale Variable.
Ok, interessant diese Feinheiten. Wenn jetzt schon neben der Instanzvariable auch der Begriff des Attributs fällt, dann frage ich mich, wieso reden manche ständig von Eigenschaften und andere von Attributen? (Auch wieder so eine Sache die einfach nur verwirrend ist)
Für mich als Einstieger ist das irgendwie das selbe. Ein Attribut = Eigenschaft eines Dings oder einer Sache. Liege ich da formal richtig?
es gibt eben verschiedene Begriffe,
'Attribut = Eigenschaft eines Dings' ist eine gute Erklärung, warum man lokale Variablen eben nicht Attribute nennt
die Attribute, ob statisch oder nicht, sind im Englischen die fields,
für lokale Variablen gelten beide Begriffe nicht und generell kann man alles Variablen nennen,
im Deutschen verbreiteter als im Englischen, wo sich 'class variable' wirklich schlimm anhören müsste
(also für deutsche Ohren die englisch lesen/ hören und teils 'Handy' gut finden)