Forum: PC-Programmierung Java Code verständnis Problem


von Sawyer M. (sawyer_ma)


Lesenswert?

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

von Dussel (Gast)


Lesenswert?

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…

von Oliver S. (oliverso)


Lesenswert?

Die beiden Fragen hängen direkt zusammen...

Auch Konstruktoren dürfen Parameter haben.

Oliver

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Oliver S. schrieb:
> Auch Konstruktoren dürfen Parameter haben.

Wenn es sich nicht um parameterlose Konstruktoren handelt ;)

von Sawyer M. (sawyer_ma)


Angehängte Dateien:

Lesenswert?

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
von Dussel (Gast)


Lesenswert?

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.

von kalterkaffee (Gast)


Lesenswert?

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 ?

von Dussel (Gast)


Lesenswert?

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.

von kalterkaffee (Gast)


Lesenswert?

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 ;-)

von Marc (Gast)


Lesenswert?

kalterkaffee schrieb:
> Warum habe ich wohl "Klasse" genannt ?

Weil du keine Ahnung hast, mutmaßlich.

von kalterkaffee (Gast)


Lesenswert?

Marc schrieb:
> kalterkaffee schrieb:
>> Warum habe ich wohl "Klasse" genannt ?
>
> Weil du keine Ahnung hast, mutmaßlich.

<°>>>>>>>>><

von Dussel (Gast)


Lesenswert?

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.

von kalterkaffee (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.