Ich habe ein Programm, das mitzählt, wie viele Objekte einer Klasse instanziiert werden. Die Zählervariable habe ich als static definiert, weil es zur Klasse und weniger zu den einzelnen Objekten gehört. "Static" habe ich so verstanden, dass damit Variablen und Methoden bezeichnet werden, die nur die Klasse benutzen darf, die aber bei den Objekten dieser Klasse nicht mit-instanziiert werden.
Das Programm läuft so wie ich mir das vorstelle.
Zum Testen habe ich geschaut, was geschieht, wenn ich die static Variable mit einem Objekt verknüpfe:
object.staticVariable
Nach meiner Überlegung sollte das nicht möglich sein, da "object" gar keine eigene "staticVariable" besitz. Die "staticVariable" ist ja nur in der Klasse vorhanden.
Habe ich da eine misconception?
Das Einige, was ich mir vorstellen kann: Der Kompiler sagt sich quasi "oh, object hat gar kein staticVariable. Na dann ist sicher das staticVariable der Klasse gemeint. Ich geb' mal das aus".
Das ist zwar halbwegs logisch, aber mE dennoch unsinnig, weil ja dann alle Objekte die gleiche staticVariable "besitzen". Object1.staticVariable = Object2.staticVariable =Objectn.staticVariable
Wo liegt mein Denkfehler?
Danke& Gruss,
MarkusFromBerne
Das Programm läuft so wie ich mir das vorstelle.
Zum Testen habe ich geschaut, was geschieht, wenn ich die static Variable mit einem Objekt verknüpfe:
object.staticVariable
Nach meiner Überlegung sollte das nicht möglich sein, da "object" gar keine eigene "staticVariable" besitz. Die "staticVariable" ist ja nur in der Klasse vorhanden.
Habe ich da eine misconception?
Das Einige, was ich mir vorstellen kann: Der Kompiler sagt sich quasi "oh, object hat gar kein staticVariable. Na dann ist sicher das staticVariable der Klasse gemeint. Ich geb' mal das aus".
Das ist zwar halbwegs logisch, aber mE dennoch unsinnig, weil ja dann alle Objekte die gleiche staticVariable "besitzen". Object1.staticVariable = Object2.staticVariable =Objectn.staticVariable
Wo liegt mein Denkfehler?
Danke& Gruss,
MarkusFromBerne
Java:
public class test{
public static void main( String[] args ){
//Hier werden 3 Objekte instanziiert und anschliessend auf der Kommandozeile zusammengefasst.
objecttest a1 = new objecttest("Stuhl", 20);
a1.informUserAboutCreation();
objecttest a2 = new objecttest("Tisch", 33);
a2.informUserAboutCreation();
objecttest a3 = new objecttest("Flasche", 1);
a3.informUserAboutCreation();
//Hier ist das statement, bei dem mir unklar ist, warum es erlaubt ist.
System.out.println(a1.counterOfNumberOfInstances);
}
}
class objecttest {
//Hier die statische Variable
static int counterOfNumberOfInstances;
String name;
int value;
public objecttest(String name, int value) {
this.name = name;
this.value = value;
//Bei jedem Konstruktor-Aufruf wird der counter um 1 raufgesetzt.
counterOfNumberOfInstances++;
}
public void informUserAboutCreation (){
System.out.println("Ein neues Objekt wurde geschaffen:\nEs heisst "+name+ " und hat den Wert "+value+ ". \nEs ist das "+counterOfNumberOfInstances+". Objekt dieser Klasse.\n");
}
}