Frage zu new



  • Hi !

    Sorry, hab mich auch noch vertippt 🙄

    Richtig sollte die Zeile so lauten (jetzt mal nicht aus dem Kontext rausgerissen...)

    public void p (X[] x)
    {
    //blabla, wir arbeiten mit x
    
    x = new X [x.length]; //<-- so, was macht das ?
    }
    

    Danke schonmal im voraus für eure Bemühungen 🙂



  • Das ist total unschön. Er erzeugt ein neues Array vom Typ X mit der selben Größe des übergebenen Arrays (X[] x).



  • Hab ich doch recht gehabt !!! Heute morgen ham wir darüber diskutiert...

    Und jedesmal wird der Constructor nochmal aufgerufen, richtig ?



  • Nein, es wird lediglich das Array angelegt. Jedes Array-Element muss dann explizit den Konstruktor via new aufrufen. Also

    x[0] = new X;
    

    [ Dieser Beitrag wurde am 16.01.2003 um 16:02 Uhr von CengizS editiert. ]



  • Mh.
    Aber das neu angelegte Array ist noch mit den alten Werten "gefüllt" ? Ich kann damit direkt weiterarbeiten, oder ?



  • Hmmm das sollte nicht sein. Du holst Dir ja im Prinzip eine neue Startadresse.


  • Mod

    Original erstellt von Headhunter:
    **
    Aber das neu angelegte Array ist noch mit den alten Werten "gefüllt" ? Ich kann damit direkt weiterarbeiten, oder ?**

    Ein neues Array wird erstmal automatisch von vorne bis hinten mit "null" gefüllt. ...bzw. 0, wenn die Elemente primitive Datentypen sind.



  • Also hab ich ein Objekt der Klasse, *ohne* ihren Konstruktor aufgerufen zu haben ??

    Das ist mir aber suspekt 🙄



  • Nein, du hast nur ein Array das Objekte vom Typ X halten kann. Mehr nicht...



  • Danke, jetzt hab ichs verstanden 🙂



  • Ein Beispiel (anlehnend an Deinen Entwurf)
    [java]public class X
    {
    public X(String name) {
    System.out.println("X() called with Name '"+name+"'");
    }

    public void p (X[] x)
    {
    x = new X [x.length]; //<-- so, was macht das ?
    for (int i=0; i<x.length; ++i) {
    System.out.println(x[i]);
    }
    }
    }[/code] Das ist also die Klasse mit der ominösen Methode p(X[] x) und nun das Startprogramm ... [java]public class Y
    {
    public static void main (String args[]) {
    X myX = new X("Main-Object");
    X[] xArray = new X[5];
    xArray[0] = new X("temp_1");
    xArray[1] = new X("temp_2");
    xArray[2] = new X("temp_3");
    xArray[3] = new X("temp_4");
    xArray[4] = new X("temp_5");
    myX.p(xArray);
    }
    }[/code]Wenn Du es ausführen lässt wirst Du folgenden Output bekommen:

    X() called with Name 'Main-Object'
    X() called with Name 'temp_1'
    X() called with Name 'temp_2'
    X() called with Name 'temp_3'
    X() called with Name 'temp_4'
    X() called with Name 'temp_5'
    null
    null
    null
    null
    null
    

    [ Dieser Beitrag wurde am 16.01.2003 um 17:05 Uhr von CengizS editiert. ]



  • jo, soll beides ein grosses X sein!!:)


Anmelden zum Antworten