Konstruktor in Konstruktor

Robert23

Mitglied
Hallo Leute,

habe folgenden Code

Java:
public Board() {

        addKeyListener(new TAdapter());
        setFocusable(true);
        setBackground(Color.BLACK);
        setDoubleBuffered(true);
        ingame = true;

        setSize(400, 300);

        craft = new Craft();

        initAliens();

        timer = new Timer(5, this);
        timer.start();
    }

Weiter oben ist die Referenzvariable timer so deklariert:
Java:
 private Timer timer;
. Ok, damit ist die Variable vom Typ Timer. In dem Konstruktor Board weiß Java jetzt also, Variable timer ist von dem Typ Timer, sodass ich nicht Timer dahinter schreiben muss.
Aber den Sinn versteh ich nicht ganz. Warum nicht außerhalb des Konstruktors "einfach"
Java:
Timer timer1 = new Timer(7,this);
schreiben.
Ich denke, dass hat dann mit der Methode von Timer zu tun. Denn wenn ich außerhalb des Konst. auch
Java:
  timer1.start();
schreibe, gibt mir Java ein Fehler:
Syntax error on token "start", Identifier expected after this token
Ich tapp da gerade ziemlich im Dunkel, über eine Erleuchtung wäre ich dankbar ;)
 

HimBromBeere

Top Contributor
Aber den Sinn versteh ich nicht ganz. Warum nicht außerhalb des Konstruktors "einfach"
Java:
Timer timer1 = new Timer(7,this);
schreiben.
Weil zu dieser Zeit ja noch keine Instanz der Klasse vorhanden ist. Das, was du da oben mit Timer timer machst, ist ja nur, dass du sagst, es gibt diese Varaiable, die folgenden Speicherplatz benötigt. Also lieber Compiler, mach mir mal bitte so viel Platz frei, den werd ich dann später noch brauchen. Alles, was über dem Konstruktor steht, sind nur Definitionen, dort kannst du nicht auf aktuelle Werte (z.B. this) zurückgreifen...
 

Michael...

Top Contributor
Code:
private Timer timer
steht im Deklarationsbereich der Klasse, da gibt es kein Objekt und somit auch kein this.
 

Robert23

Mitglied
Danke für die schnellen Antworten.


Wieso kann ich nicht
Java:
 timer.start()
außerhalb des Konstruktors ausführen?

Java:
 timer = new Timer(5, this);
Timer hält ja jetzt die Referenz auf Timer, also müsste ich doch die Methode start(); ausführen können?:bahnhof:
 

diggaa1984

Top Contributor
du kannst das schon ausserhalb des Konstruktors ausführen, aber nur INNERHALB von Metoden. Sollte timer zu dem Zeitpunkt nicht belegt sein, gibts eine entsprechende Fehlermeldung.
 

hdi

Top Contributor
Ausserhalb von Konstruktoren oder Methoden kann kein Code ausgeführt werden. Hier kann nur deklariert und ggf. initialisiert werden.

du kannst das schon ausserhalb des Konstruktors ausführen, aber nur INNERHALB von Metoden.

Stimmt so ja nicht ganz, da es ja auch noch sowas wie Init-Blöcke gibt:

Java:
class Board{

   private Timer timer;

   // Init-Block:
   {
         timer = new Timer();
         System.out.println("Timer instantiated");
   }
}

Wichtig: Init-Blöcke werden zusammen mit der Instanz-Variablen-Initialisierung ausgeführt. Du musst also aufpassen wo genau solch ein Block sich befindet. In diesem Bsp wär's egal, aber das hier ginge zB nicht:

Java:
class Board{

   // Init-Block:
   {
         System.out.println(timer.toString()); // Compile Error: timer nicht initialisiert (ist nicht null, sondern NIX)
   }

   private Timer timer = new Timer();

}
 
Zuletzt bearbeitet:

HimBromBeere

Top Contributor
Wichtig: Init-Blöcke werden zusammen mit der Instanz-Variablen-Initialisierung ausgeführt. Du musst also aufpassen wo genau solch ein Block sich befindet. In diesem Bsp wär's egal, aber das hier ginge zB nicht:

Aber das mit der Referenz auf this funktioniert auch dann nicht...
 

hdi

Top Contributor
Ach, jetzt les ich erst was ihr hier alles geschrieben habt...

Weil zu dieser Zeit ja noch keine Instanz der Klasse vorhanden ist. Das, was du da oben mit Timer timer machst, ist ja nur, dass du sagst, es gibt diese Varaiable, die folgenden Speicherplatz benötigt. Also lieber Compiler, mach mir mal bitte so viel Platz frei, den werd ich dann später noch brauchen. Alles, was über dem Konstruktor steht, sind nur Definitionen, dort kannst du nicht auf aktuelle Werte (z.B. this) zurückgreifen..
Das ist Unsinn..

Aber das mit der Referenz auf this funktioniert auch dann nicht...
Entsprechend ist das auch Unsinn.

private Timer timer steht im Deklarationsbereich der Klasse, da gibt es kein Objekt und somit auch kein this.
Unsinn, as well :)

Ihr wisst scheinbar nicht, wie die Instanz-Initialisierung abläuft: Im ersten Schritt (naja, eigentlich dem zweiten, aber ich lass die Vererbungshierarchie jetzt mal aus dem Spiel) wird das Objekt ("this") zusammengebaut. Das bedeutet dass alle Instanz-Variablen erzeugt werden. (Erstmal ohne Wert - womit ich nicht meine mit "null", sondern OHNE IRGENDEINEN WERT). Nach diesem Schritt existiert "this" bereits. Im zweiten Schritt werden nun die Instanz-Variablen initialisiert. Entweder mit dem Default-Wert, wenn es keine explizite Zuweisung gibt, oder mit dem Wert, der explizit zugewiesen wird. Jetzt kann es natürlich zu Laufzeitfehlern kommen, zB NullPointerException, wenn man da nicht nachdenkt:

Java:
   private String s;
   private String s2 = s + "(2)";

Aber "this" gibt's immer. Also folgendes geht durchaus:

Java:
class MyClass implements ActionListener{

   private Timer timer;
 
   {
        timer = new Timer(5, this);
   }

   // ...
}

Und diese Zuweisung funktioniert übrigens genauso auch im Konstruktor.
 

hdi

Top Contributor
:D Ich hab dir ja gesagt das ist ein Ding der Unmöglichkeit. Wer nichts falschen schreiben würde wäre ja der vollständig ausgelernte Java-Entwickler, und sowas gibt es nicht.
 

hdi

Top Contributor
PS: Geh mal auf meine Website, im Player kannst du rechts die Playlist aufklappen, und dort wählst du das letzte Video aus der Playlist an (Instanz-Initialisierung). Dort wird ganz genau erklärt wie das funktionert.

(Der dort erwähnte erste verschwiegene Schritt ist der implizite super()-Aufruf. Vererbung kommt da erst viel später)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C OOP Parameter vom Konstruktor Java Basics - Anfänger-Themen 1
R Konstruktor mit Datum Java Basics - Anfänger-Themen 17
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben