1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
3968
3968
EMPFEHLEN
-
Nehmen wir mal an ich hab eine Klasse Auto. Dann gibt es die Klasse Autobus und Amphibienfahrzeug.
Jetzt definiere ich ein Array Auto[] autos = new Auto[100];
Java reserviert sich ja für Array[] fix einen Speicher. Nur was macht Java wenn ich dem Array autos jetzt autos[12] = new Autobus(parm1,parm2...); hinzufüge?
Würd mich interssieren
-
Hallo,
ist doch logisch, der Autobus kriegt mächtig Schrammen, weil er zu groß ist
für den Auto-Parkplatz !
Nein mal im ernst !
Ein Java-Array arbeitet auf basis von Objekt-Referenzen da braucht man keine
sorgen haben das ein Objekt welches mehr Speicher benötigt nicht ins Array
passt oder gar etwas anderes überschreibt oder ähnliches !
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
-
Wieso will das Java Array dann wissen wieviele Einträge es hat?
Aber danke ma
-
Hallo nochmal,
das Array ist halt der Größe nach ein sehr statisches Gebilde !
Für den Fall dass es irgendwelche Objekte speichern soll, muß es eben wissen
für wieviele Objektreferenzen Speicher zur verfühgung stehen muß !
Die Objekte selbst werden natürlich ganz wo anders im Speicher abgelegt,
die Einträge des Arrays verweisen lediglich auf diese Objekte !
(Man könnte den bösen Begriff "Pointer" nennen, aber den mögen wir
Java-nesen ja gar nicht !)
Als Beispiel kann man ein Array vom Typ Object nehmen :
Code :1
Object[] objekte = new Object[100];
und alles reinpacken ausser ungewrapte native Datentypen.
Code :1 2 3
objekte[0] = new Point(10,5); objekte[1] = new Frame("Sehr sinnvoll !"); objekte[2] = new Integer(12345);
das herausklauben ist dann natürlich ein anderes Problem
! (instanceof und casting)
Noch fragen
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
-
ah verstehe, ja wenn wir schon dabei sind, wie würdest du die Klassen dann herausklauben? Mit einem switch über objekte[i].getClass() ? Danke
-
Im Array steht also nur die Speicheradresse des Objektes und nicht das Objekt selbst. Die Größe einer Speicheradresse ist bekannt und somit wird das Array mit n mal dieser Größer angelegt.
Objekte wieder rauskriegen geht so:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Object[] objekte = new Object[100]; objekte[0] = new Point(10,5); objekte[1] = new Frame("Sehr sinnvoll !"); objekte[2] = new Integer(12345); for(int i = 0; i < objekte.length; i++){ Object objekt = objekte[i]; if(objekt instanceof Point){ Point p = (Point) objekt; } else if(objekt instanceof Frame){ Frame f = (Frame) objekt; } ... usw. else { System.out.println("Unknown Object at position "+ i +": " + objekt.getClass().getName()); } }
Geändert von zeja (16.02.08 um 09:04 Uhr)
-
Hallo nochmal,
Zeja hat es ja schon sehr schön beschrieben wie es geht ! !
Die Idee mit dem switch-case ist zwar toll, aber geht so garnicht !
Java lässt nur primitive Datentypen zur Fallunterscheidung zu !
Die möglichkeit über objekte[i].getClass() ist zwar möglich,
ich sehe dort aber keinen Vorteil gegenüber der instanceof-Technik !
Evtl. könnte man einen interessanten Sonderfall konstruieren bei dem es
Sinn macht objekte[i].getClass().getName() zu benutzen, um dann die Klasse
über den String zu identifizieren ! Ob's Sinn macht ?
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
Ähnliche Themen
-
Array Index zb:(0, 10, 22...) Speicherverbrauch!?
Von Crav3X im Forum PHPAntworten: 2Letzter Beitrag: 07.09.09, 11:37 -
Frage zu Speicherverbrauch von Java-Applikation
Von Angiii im Forum JavaAntworten: 12Letzter Beitrag: 14.08.09, 09:13 -
Speicherverbrauch einer Java Klasse
Von DarthShader im Forum JavaAntworten: 2Letzter Beitrag: 21.03.07, 18:42 -
Java - Speicherverbrauch
Von flashray im Forum JavaAntworten: 2Letzter Beitrag: 12.10.05, 22:32 -
Speicherverbrauch von Java Objekten
Von Thomas Darimont im Forum JavaAntworten: 2Letzter Beitrag: 23.01.05, 20:52





Zitieren

Login





