tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
419
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kranik Kranik ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    4
    Hallo zusammen,
    ich hab eine Frage warum bei ableitenden Klassen die Initialisierungsreihenfolge anders ist als bei "normalen" Klassen (ja ich weiss diese haben ja auch wiederum Object als Superklasse.. aber sie leiten halt nicht von selbst erzeugten Klassen ab).
    Wenn ich eine neue Instanz einer Klasse erstelle die wie folgt aussieht:

    public class SuperClass {
    String string = new String("global");
    /**
    * Constructor
    */
    public SuperClasse() {
    init();
    }
    public void init() {
    System.out.println(string);
    string = "ich bin da!";
    System.out.println(string);
    }
    }
    wird folgendes ausgegeben:
    1)global
    2)lokal
    3) nach dem erstellen des Objekts hat die variable -string- den wert "lokal"

    erstelle ich jetzt eine Ableitung der Klasse wie folgt und erzeuge eine Instanz davon:

    public class Ableitung extends SuperClass {
    String string2 = new String("global");

    /**
    * Constructor
    */
    public Ableitung() {
    super();
    }

    /**
    * {@inheritDoc}
    */
    @Override
    public void init() {
    System.out.println(string2);
    string2 = "lokal";
    System.out.println(string2);
    }
    }
    lautet die Reihenfolge:
    1)null
    2)lokal
    3) nach dem erstellen hat die Variable -string2- den wert "global"
    Ich hätte jetzt erwartet, dass die JVM erst die Variablen erzeugt und die Zuweisungen macht und dann den Constructor aufruft! Warum ist dem nicht so?

    Ich hoffe mir kann da wer weiterhelfen! danke schonmal im Vorraus!
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi Kranik und herzlich Willkommen bei Tutorials,
    also zu deiner Frage. Der Konstruktor wird deshalb zuerst aufgerufen, da über diesen die Superklasse geladen wird. Sprich wenn die Superklasse Parameter zum Aufrufen braucht, müssen diese schließlich über den Konstruktor via super(Parameter1, Parameter2) übergeben werden.
    Ich habe mir angewöhnt die Variablen über dem Konstruktor zu definieren sprich:
    Code java:
    1
    
    private int variable;
    und im Konstruktor initialisiere ich sie dann:
    Code java:
    1
    2
    3
    4
    
    public DeinKlassenName() {
       // super(); <-- steht in jedem Konstruktor (nicht immer sichtbar) zum Aufruf der Superklasse
       this.variable = 4;
    }

    ps.: Benutze bitte das nächste mal bei Posts von Code die Code-Tags (java), Danke

    Gruß

    Fabio
    Geändert von Fabio Hellmann (24.08.11 um 16:11 Uhr)
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Kranik Kranik ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    4
    Hallo Fabio,

    Danke für das Herzliche willkommen! und natürlich auch für die super schnelle Antwort.
    Macht ja auch irgendwie Sinn, dass erst der Typ der SuperKlasse erstellt wird.

    ok werd ich dran denken die Code-Tags zu werwenden

    gruß Kranik

    p.s. kann geschlossen werden, hmm oder geht das bei euch über den Button "Erledigt" hmm testen
    Geändert von Kranik (25.08.11 um 08:02 Uhr)
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    ps.: Um das Thema zu schließen, musst du einfach oben neben den Aufruf- und Antwortenzähler, auf: Erledigt "NEIN" klicken. Dann wird das zu einem "JA" und das Thema wird als erledigt markiert.
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

Ähnliche Themen

  1. Ablauf automatisieren
    Von Merlin732 im Forum Creative Lounge
    Antworten: 4
    Letzter Beitrag: 05.05.06, 15:14
  2. intuitive Objekterstellung
    Von NEONINGER im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 10.02.06, 12:53
  3. ssl logischer ablauf
    Von bspainkf36 im Forum Hosting & Webserver
    Antworten: 5
    Letzter Beitrag: 27.01.06, 03:47
  4. Ein Ablauf
    Von peter333 im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 04.05.05, 21:29
  5. Hilfsleiste mit Objekterstellung einblenden aber wie ?
    Von -[4]L!F3- im Forum 3D Studio Max
    Antworten: 2
    Letzter Beitrag: 17.01.02, 17:19

Stichworte