Hallo alle zusammen, ich übe gerade auf eine Klausur und muss aus dem unten gegeben Java Code ein Sequenzdiagram zeichnen. Jedoch habe ich ein Verständnis Problem mit der Zeile 4 und 14. Problem Zeile 4: theThread = new DrawThread(this); ich verstehe nicht für was das this hier in Klammern steht. Allgemein ist mir diese Schreibweise bekannt Datentyp Objektname = new Klassenname() Wie ist diese Zeile genau zu verstehen? Problem Zeile 14: Warum hat dieser Konstruktor in der Parameterliste View theView drin?? public DrawThread(View theView) 1 public class View { 2 private DrawThread theThread; 3 public void startPlay(){ 4 theThread = new DrawThread(this); 5 theThread.start(); 6 } 7 public void nextPoint() { 8 // Code für die Klausuraufgabe weggelassen 9 }} 10 public class DrawThread extends Thread { 11 private View theView; 12 private volatile boolean play = true; 13 private volatile int speedfactor = 1; 14 public DrawThread(View theView) { 15 this.theView = theView; 16 } 17 public void run() { 18 while (play) { 19 theView.nextPoint(); 20 try { 21 sleep(speedfactor*10); 22 } catch (InterruptedException e) { 23 // Code für die Klausuraufgabe weggelassen 24 }}} 25 public void setSpeedfactor(int speedfactor) { 26 this.speedfactor = speedfactor; 27 }} Vielen Dank für euere Hilfe und Unterstützung im Voraus. Grüße
Sawyer M. schrieb: > Problem Zeile 14: > > Warum hat dieser Konstruktor in der Parameterliste View theView drin?? > public DrawThread(View theView) Die Klasse braucht ein View-Objekt in Run(), um zu arbeiten. Dieses Objekt wird im Konstruktur übergeben. Falls du dich über die Syntax wunderst, das ist genauso wie public DrawThread(int x), also ein einfacher Parameter einer Funktion. Sawyer M. schrieb: > Problem Zeile 4: > > theThread = new DrawThread(this); > > ich verstehe nicht für was das this hier in Klammern steht. Allgemein > ist mir diese Schreibweise bekannt > Datentyp Objektname = new Klassenname() > > Wie ist diese Zeile genau zu verstehen? Aus der Definition folgt, dass der Konstruktor ein View-Objekt benötigt. Das wird hiermit übergeben. this ist ein Zeiger auf das ausführende Objekt. Du könntest zum Beispiel eine neue Instanz erstellen mit
1 | View neu=new View(); |
Dann rufst du startPlay() dieses Objekts mit
1 | neu.startPlay(); |
auf. In der Funktion wird DrawThread aufgerufen und neu als Parameter übergeben. Ich hoffe, du verstehst, was ich meine…
Die beiden Fragen hängen direkt zusammen... Auch Konstruktoren dürfen Parameter haben. Oliver
:
Bearbeitet durch User
Oliver S. schrieb: > Auch Konstruktoren dürfen Parameter haben. Wenn es sich nicht um parameterlose Konstruktoren handelt ;)
Dussel schrieb: > Sawyer M. schrieb: >> Problem Zeile 4: >> >> theThread = new DrawThread(this); >> >> ich verstehe nicht für was das this hier in Klammern steht. Allgemein >> ist mir diese Schreibweise bekannt >> Datentyp Objektname = new Klassenname() >> >> Wie ist diese Zeile genau zu verstehen? > Aus der Definition folgt, dass der Konstruktor ein View-Objekt benötigt. > Das wird hiermit übergeben. this ist ein Zeiger auf das ausführende > Objekt. > Du könntest zum Beispiel eine neue Instanz erstellen mitView neu=new > View(); > Dann rufst du startPlay() dieses Objekts mitneu.startPlay(); > auf. > In der Funktion wird DrawThread aufgerufen und neu als Parameter > übergeben. > Ich hoffe, du verstehst, was ich meine… Vielen Dank für eure schnellen Antworten, jedoch verstehe ich deinen letzten Punkt glaube ich nicht ganz richtig. mit: theThread = new DrawThread(this); wird doch ein DrawThread Objekt erzeugt, aus der Klasse View heraus?! Was meinst du dann mit diesem Satz: >Aus der Definition folgt, dass der Konstruktor ein View-Objekt benötigt.
:
Bearbeitet durch User
Sawyer M. schrieb: > mit: theThread = new DrawThread(this); > > wird doch ein DrawThread Objekt erzeugt, in der Klasse View?! In einer Funktion der Klasse wird das neue Objekt erzeugt. Sawyer M. schrieb: > Was meinst > du dann mit diesem Satz: > >>Aus der Definition folgt, dass der Konstruktor ein View-Objekt benötigt. Der Konstruktor von DrawThread ist so definiert, dass man ihm ein View-Objekt übergeben kann (nicht muss, glaube ich). Ein Konstruktor ist (zumindest syntaktisch) erstmal nur eine Funktion. Genau wie man jeder anderen Funktion Argumente übergeben kann, kann man auch den Konstruktor so definieren, dass man ihm Argumente übergeben kann. Hier ist das Argument ein View-Objekt und zwar das, das den Konstruktor aufruft.
Steht doch in Deinem Code drin. "this" ist die interne Referenz auf die eigene Klasse. Dann gibt es noch "super" als Referenz auf die geerbte Klasse. Das sind also Pointer auf sich selber. Habt Ihr keine Tutorial bekommen oder ist google kaputt oder hat ORACLE JAVA eingestellt ?
kalterkaffee schrieb: > "this" ist die interne Referenz auf die eigene Klasse. Auf die eigene Instanz, also ein Objekt. Das ist keine Spitzfindigkeit, sondern ein deutlicher Unterschied, den Anfänger nicht unbedingt kennen.
Dussel schrieb: > kalterkaffee schrieb: >> "this" ist die interne Referenz auf die eigene Klasse. > Auf die eigene Instanz, also ein Objekt. Das ist keine Spitzfindigkeit, > sondern ein deutlicher Unterschied, den Anfänger nicht unbedingt kennen. Warum habe ich wohl "Klasse" genannt ? Das es mehrere Instanzen von Objekten geben kann und jede einen eigenen Pointer auf sich selber hat kommt dann in der nächsten Frage ;-)
kalterkaffee schrieb: > Warum habe ich wohl "Klasse" genannt ? Weil du keine Ahnung hast, mutmaßlich.
Marc schrieb: > kalterkaffee schrieb: >> Warum habe ich wohl "Klasse" genannt ? > > Weil du keine Ahnung hast, mutmaßlich. <°>>>>>>>>><
kalterkaffee schrieb: > Dussel schrieb: >> kalterkaffee schrieb: >>> "this" ist die interne Referenz auf die eigene Klasse. >> Auf die eigene Instanz, also ein Objekt. Das ist keine Spitzfindigkeit, >> sondern ein deutlicher Unterschied, den Anfänger nicht unbedingt kennen. > > Warum habe ich wohl "Klasse" genannt ? > Das es mehrere Instanzen von Objekten geben kann und jede einen eigenen > Pointer auf sich selber hat kommt dann in der nächsten Frage ;-) Ich weiß nicht, was die nächste Frage ist, aber 'this' ist eben keine Referenz auf eine Klasse, sondern auf ein Objekt, eine Instanz einer Klasse.
Dussel schrieb: > kalterkaffee schrieb: >> Dussel schrieb: >>> kalterkaffee schrieb: >>>> "this" ist die interne Referenz auf die eigene Klasse. >>> Auf die eigene Instanz, also ein Objekt. Das ist keine Spitzfindigkeit, >>> sondern ein deutlicher Unterschied, den Anfänger nicht unbedingt kennen. >> >> Warum habe ich wohl "Klasse" genannt ? >> Das es mehrere Instanzen von Objekten geben kann und jede einen eigenen >> Pointer auf sich selber hat kommt dann in der nächsten Frage ;-) > Ich weiß nicht, was die nächste Frage ist, aber 'this' ist eben keine > Referenz auf eine Klasse, sondern auf ein Objekt, eine Instanz einer > Klasse. Wer lesen kann ist klar im Vorteil, Fisch wurde ja schon veteilt. AUA Jetzt gönn ich mir halt selber einen ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.