Java 81 klassen erzeugen

plusnoir

Cadet 3rd Year
Registriert
Apr. 2009
Beiträge
36
Hallo zusammen. Ich sag gleich das ist keine Hausaufgabe von mir. Weil hier wohl ne kleine HA-Phobie herrscht ;D

Ich bastel grad an was rum und habe folgende Frage.

Angenommen ich habe eine klasse "koords":


Code:
class koords {

	public koords(int x) {

		int z = x;
		boolean befüllt = false;

	}
}


in einer anderen klasse möchte ich auf folgende Weise 81 Objekte dieser Klasse erzeugen wobei immer ein anderes Parameter übergeben wird. Undzwar so:

Code:
int i;
		for(i=1;i<=81;i++){
			
			koords kasten = new koords(i);
		}

also wie ist das denn? Wenn ich später eins dieser Objekte aufrufen will? mit welchem namen mach ich das? Es gibt ja dann 81 davon? Kann ich noch innerhalb der "for"-Schleife 81 unterschiedliche Objektnamen erzeugen?

Danke im voraus, noir
 
Du überschreibst 81 mal dein Objekt, das ist glaube ich nicht Sinn der Sache... Du musst deine Objekte irgendwo ablegen wenn du das so machen willst, am besten in einer Collection. Seh ich das richtig dass es beabsichtigt ist, dass du deinen Index i bei jedem Objekt im Konstruktor speicherst?

Zu den Objektnamen: Klar!
deklarier eine Variable am Anfang der Klasse als final und schreib mit dem StringBuffer beispielsweise eine Nummer dahinter, oder nimm einfach den Index den du dahinter setzt wenn du eine Schleife benutzt..
 
Du musst halt entweder ein statisches Array erzeugen und darin speichern oder eine Collection wie z.B. die ArrayList:
Code:
int i;
koords[] kasten = new koords[81];
for(i=1;i<=81;i++){
	koords[i-1] = new koords(i);
}
Code:
int i;
// 81 ist hier nur ein Hinweis (!) für die Startgröße und stellt weder die tatsächliche Größe noch eine absolute Begrenzung dar!
ArrayList<koords> kasten = new ArrayList<koords>(81);
for(i=1;i<=81;i++){
	kasten.add(new koords(i));
}
 
Überschreiben ist in dem Fall denke ich nicht ganz richtig oder? Es werden schon 81 Objekte erzeugt. Das Problem ist, deine Variable "kasten" zeigt immer nur auf das zuletzt erzeugte Objekt. Ich denke die anderen Objekte existieren auch tatsächlich eine Weile im Speicher, bis der Garbage Collector durchläuft und alle nicht referenzierten Objekte löscht. (Was in dem Fall dann 80 der erzeugten Objekte sind, eins wird ja noch durch "kasten" referenziert.)

(wie du das Problem löst wurde ja schon gesagt.. ^^)
 
Es wird gar nicht mal zwingend überschrieben, da er die Variable ja überhaupt erst innerhalb der Schleife deklariert. Somit ist sie außerhalb der Schleife bzw. auch zu Beginn jedes Iterationsschritts gar nicht mehr gültig!
 
Naja mit überschrieben meint man ja auch nicht das Objekt an sich sondern die Referenz darauf...
 
Was passiert dann eigentlich unter Java? Unter C++ käme es drauf an ob ich die Objekte auf dem Heap oder Stack ablegt werden. Auf dem Heap wie oben würden sie versauern bis der Arzt kommt, auf dem Stack wären sie einfach beim Rücksprung aus der Schleife wieder weg.

Da Objekte in Java eh nur auf dem Heap angelegt werden, nehme ich an sie werden einfach beim nächsten GC-Run aufgrund fehlender Referenzen eliminiert?

MfG Hanussen
 
Zurück
Oben