Klassenelemente?

flashray

Erfahrenes Mitglied
Hallo,

wie ist der Begriff "Klassenelement" in Java definiert?

Dachte bisher das Objektvariablen, -methoden und Konstruktoren Instanzelemente und die static Deklarierten Klasselemente sind. Bin aber in einer Javaunterlage auf das hier gestoßen:
"Dummerweise sind Klassenelemente gerade nicht die static Elemente, was wohl einigen Leuten hier den Punkt gekostet hat. Eine unglückliche Nomenklatur (eine Klassenvariable ist kein Klassenelement!), aber was kann man machen?"

Da bin ich jetzt ein wenig verwirrt, wie ich Klassenelement nun einordnen soll!


Vg Erdal
 
Hallo!

http://www-ekp.physik.uni-karlsruhe.de/~skiba/public_doc/books/PC_und_IT_Lexikon/lexikon/l_1260.htm
Die Methoden, Klassenvariablen und Konstanten in Java werden als Klassenelemente (englisch: class member) bezeichnet.

Na ja... also class member sind für wirklich statische Attribute / Methoden / Typen -> nur an die Klasse gebunden.

Instance member sind dann die Attribute / Methoden / Typen die an eine konkrete Instanz gebunden sind.
http://java.sun.com/docs/books/tutorial/java/javaOO/classvars.html

Gruß Tom
 
Hallo Tom,

so hatte ich mir das bisher auch vorgestellt.

Kannst du dir bitte mal hier die Musterlösung zur Aufgabe 2c) auf Seite 12 anschauen:
http://www.qalem.de/java/ooe1_0506.pdf

Da wird behauptet die Klassenelemente seien nicht die static-Elemente. Und Klassenvariablen seien auch keine Klassenelemente.

Das widerspricht irgendwie unserer Unterscheidung in Klassen- und Instanzelemente. Ist das hier dann falsch?


Vg Erdal
 
Hallo!

Bei sowas sollte man sich allgemein nach dem richten, was in der Java Language Spec (JLS) steht:
http://java.sun.com/docs/books/tutorial/java/javaOO/classvars.html

.. dummerweise steht da genau das was auch in der Antwort steht...

statische Methoden nennt man class methods und statische Attribute nennt man class variable. statische Typen innerhalb eines anderen Typs nennt man static member type.
Da wird behauptet die Klassenelemente seien nicht die static-Elemente. Und Klassenvariablen seien auch keine Klassenelemente.
Nach der JLS stimmt das so.

Das widerspricht irgendwie unserer Unterscheidung in Klassen- und Instanzelemente. Ist das hier dann falsch?
Eigentlich schon, das Problem ist hier, wie schon in der Antwort geschrieben eine etwas ungünstige Nomenklatur. Außerdem finden sich im Internet und in der Literatur recht wiedersprüchliche Angaben zu dem Thema. Wie gesagt wenn man bei sowas mit der JLS argumentiert liegt man (meistens" richtig ;-)


Gruß Tom
 
Hallo Tom,

Fields that have the static modifier in their declaration are called static fields or class variables.
Class Methods
Static methods, which have the static modifier in their declarations, ...

Hieraus ergibt sich static-Variablen sind Klassenvariablen und static-Methoden sind Klassenmethoden. Aber es wird nirgendswo erwähnt das diese keine Klassenelemente (class member) sind wie in der Musterlösung behauptet.

Ich werd wohl den Dozenten zu dieser Klausur aufsuchen und ihn mal in der Vorlesungfreien Zeit stören :) .


Vg Erdal
 
Hallo Thomas,

in Kapitel 8.1.6 steht folgendes:
A class body may contain declarations of members of the class, that is, fields (§8.3), classes (§8.5), interfaces (§8.5) and methods (§8.4). A class body may also contain instance initializers (§8.6), static initializers (§8.7), and declarations of constructors (§8.8) for the class.

Damit sind Variablen, Klassen, Interfaces und Methoden welche im Klassenrumpf deklariert sind alle Klassenelemente, nicht jedoch instanz bzw. statische Initialisierblöcke. Hier wird auch nicht in static oder nicht static unterschieden. Demnach stimmt die Aussage: "Eine Klassenvariable ist kein Klassenelement." nicht :confused: .


Vg Erdal
 
Zurück