tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von zeja
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
3968
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Katzehuhn
    Katzehuhn Katzehuhn ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    213
    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
     

  2. #2
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    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ß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  3. #3
    Avatar von Katzehuhn
    Katzehuhn Katzehuhn ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    213
    Wieso will das Java Array dann wissen wieviele Einträge es hat? Aber danke ma
     

  4. #4
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    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ß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  5. #5
    Avatar von Katzehuhn
    Katzehuhn Katzehuhn ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    213
    ah verstehe, ja wenn wir schon dabei sind, wie würdest du die Klassen dann herausklauben? Mit einem switch über objekte[i].getClass() ? Danke
     

  6. #6
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.962
    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)
    BananaML bedankt sich. 

  7. #7
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    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ß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 07.09.09, 11:37
  2. Antworten: 12
    Letzter Beitrag: 14.08.09, 09:13
  3. Speicherverbrauch einer Java Klasse
    Von DarthShader im Forum Java
    Antworten: 2
    Letzter Beitrag: 21.03.07, 18:42
  4. Java - Speicherverbrauch
    Von flashray im Forum Java
    Antworten: 2
    Letzter Beitrag: 12.10.05, 22:32
  5. Speicherverbrauch von Java Objekten
    Von Thomas Darimont im Forum Java
    Antworten: 2
    Letzter Beitrag: 23.01.05, 20:52