Schlüsselworte this (nicht this();)

Kel

Aktives Mitglied
Soweit ich das verstanden habe, benötigt man die this-Referenz für 2 Sachen:

1: Man übergibt in einer Methode (und/oder Konstruktor) Parameter (lokale Variablen), die gleich heissen wie eine Instanzvariable
Java:
public class Foo {
    privat int x;
}

public class Bar extends Foo {
  public Foo(int x) {
      this.x = x;
  }
}
Dient nur dazu, dass man die Instanzvariable und die lokalen Variablen unterscheiden kann, da sie gleich heissen.
Code:
this.x
ist Objektvariable.x und
Code:
x
ist die lokale Variable.


2: Man ruft in einem Konstruktor einen überladenen Konstruktor in der gleichen Klasse auf (z.B. um Standardwerte beim Erzeugen eines Objektes festzulegen)
Hier ist Verwendung 1 + 2 zusammen
Java:
public class Foo {
   privat int x;
   privat int y;

   public Foo {
      this(2, 3)
   }

   public Foo (int x, int y) {
     this.x = x;
     this.y = y;
   }
}

Wenn man ein Objekt erzeugt, kriegt es ja alle Instanzvariablen und alle Methoden von der Klasse mitgegeben, also ist jeder Aufruf vom Objekt auf eine Methode auf das Objekt bezogen, wozu braucht man dann noch
Code:
this
innerhalb einer Methode?
Es muss ja einen Grund geben, wieso man dauernd
Code:
this.x = x
schreibt, auch ohne die beiden Fälle.
Wenn jemand ein einfaches Beispiel hätte, wäre ich sehr dankbar, ich bin mir nämlich ziemlich sicher, dass ich was sehr wichtiges bei
Code:
this
übersehen habe :rtfm:.
 
Zuletzt bearbeitet:

thorstenthor

Bekanntes Mitglied
Konstruktoren werden nicht überladen. Das ist von der Begrifflichkeit her falsch.

this referenziert die als Instanz vorhandene umgebende Klasse.

Aus einem Konstruktor müssen manchmal andere Konstruktoren aufgerufen werden, denen z.B. default-Werte übergeben werden. Gleichnamige Variablen hast du auch schon genannt. Manchmal möchte man dadurch auch etwas verdeutlichen (Lesbarkeit). Dann fällt mir noch synchronized auf dem eigenen Objekt zu dem Thema ein. Außerdem Klassen innerhalb von Klassen oder Methoden und Zugriffe auf "höhergelegene Objekte".
 
Zuletzt bearbeitet:

Kel

Aktives Mitglied
Konstruktoren werden nicht überladen. Das ist von der Begrifflichkeit her falsch.
"Java von Kopf bis Fuß", Seite 249
Sie können in einer Klasse mehrere Konstruktoren haben, wenn sich deren Argumentlisetn unterscheiden. Hat man in einer Klasse mehrere Konstruktoern, heißt das, dass man überladene Konstruktoren hat

this referenziert die als Instanz vorhandene umgebende Klasse.
Wie meinst du das genau?

Aus einem Konstruktor müssen manchmal andere Konstruktoren aufgerufen werden, denen z.B. default-Werte übergeben werden. Gleichnamige Variablen hast du auch schon genannt.
Das sind ja die beiden Sachen, die ich oben geschrieben hatte.

Manchmal möchte man dadurch auch etwas verdeutlichen (Lesbarkeit).
Okay.

Dann fällt mir noch synchronized auf dem eigenen Objekt zu dem Thema ein.
Sagt mir noch gar nichts, ist das etwas in Bezug auf Threads?

Außerdem Klassen innerhalb von Klassen oder Methoden und Zugriffe auf "höhergelegene Objekte".
Klassen innerhalb von Klassen?
Methoden und Zugriffe auf "höhergelegene Objekte"? Kann ich mir aktuell nichts drunter vorstellen.
 

thorstenthor

Bekanntes Mitglied
Außerdem auch noch in dem Fall, dass eine Referenz der eigenen Klasse einer Methode übergeben wird.

1. nebenläufige Programmierung und
2. innere Klassen nachgucken :)

---

Früh ist es.
 

Kel

Aktives Mitglied
Okay, die beiden Sachen kann ich morgen nachgucken, relevant sind sie für mein Wissensgebiet aber wohl noch nicht (stecke grade bei Polymorphie/Generalisierung und den Grundlagen der Objektorientierung soweit).

Ein einfaches, kurzes Beispiel auf meinem Wissensstand wäre nett. Etwas, wo ich sehen kann, dass man ohne
Code:
this
dort nicht auskommt und was mir den Sinn von
Code:
this
ausserhalb der beiden oben genannten Möglichkeiten liefert (abgesehen von denen, die du bereits aufgezählt hast, aber soweit bin ich halt noch nicht).

Trotzdem danke für deine Hilfe, ich schau mir deine Sachen mal an wenn ich ausgeschlafen hab :).
 

faetzminator

Gesperrter Benutzer
Ein einfaches, kurzes Beispiel auf meinem Wissensstand wäre nett. Etwas, wo ich sehen kann, dass man ohne
Code:
this
dort nicht auskommt und was mir den Sinn von
Code:
this
ausserhalb der beiden oben genannten Möglichkeiten liefert (abgesehen von denen, die du bereits aufgezählt hast, aber soweit bin ich halt noch nicht).

Na, [c]this[/c] ist einfach unerlässlich. Ein Beispiel zu thorstenthor's Aussage (was nicht nur unbedingt innere Klassen und Nebenläufigkeit betrifft...):
Du würdest gerne Achterbahn fahren. Die [c]Bahn[/c] kennt dazu [c]addMensch(Mensch)[/c]. Jetzt könntest du einen neuen Menschen erzeugen, so z.B. [c]bahn.addMensch(new Mensch("Fritz"))[/c] oder einen bereits existierenden Menschen dadrauf schicken: [c]bahn.addMensch(hans)[/c]. Aber eigentlich willst ja du Achterbahn fahren, und nicht jmd anderes (bzw. wär dir das egal). darum rufst du nun [c]bahn.addMensch(this)[/c] auf.
 

Michael...

Top Contributor
Ein einfaches, kurzes Beispiel auf meinem Wissensstand wäre nett. Etwas, wo ich sehen kann, dass man ohne
Code:
this
dort nicht auskommt und was mir den Sinn von
Code:
this
ausserhalb der beiden oben genannten Möglichkeiten liefert (abgesehen von denen, die du bereits aufgezählt hast, aber soweit bin ich halt noch nicht).
Ob man wirklich nicht ohne
Code:
this
auskommt, kann ich nicht sagen. Es gibt sicherlich viele Möglichkeiten ein
Code:
this
zu vermeiden. Das könnte aber zum einen unschön, zum anderen recht fehleranfällig werden.
In der "Anfängerprogrammierung" spielt
Code:
this
m.M. eine eher untergeordnete Rolle. Hierzu könnte man ein etwas künstliches Beispiel anführen: Eine Klasse möchte sich als MouseListener an sich selbst oder einer selbst erzeugten Komponente registrieren:
Java:
class TestKlasse extends JComponent implements MouseListener {
	public TestKlasse() {
		JPanel panel = new JPanel();
		...
		panel.addMouseListener(this);
		addMouseListener(this);
	}
	...	
}
Anwendung findet
Code:
this
z.B. auch beim Observer Pattern. Da hier der Observer (Beobachter) sein beobachtetes Objekt (Observable) gar nicht kennt. Übergibt das Observable (für den Fall der Fälle) bei einer Änderungsbenachrichtigung eine Referenz auf sich selbst mit.

Ähnlich ist es bei den Model - View Komponenten in Swing (JList, JTree, JComboBox, JTable...) hier registrieren sich die Komponenten als Listenern selbst an deren Models (ähnlich wie Beispiel oben).
 

Kel

Aktives Mitglied
Hilfst du uns noch mit der Kapitelnummer oder dem Titel weiter?
Gerne. Kapitel 9 - Leben und Sterben eines Objektes (S. 235), 14 Seiten nach dem Kapitelanfang ist das besagte Zitat.
"Kurzrückblick: Vier Dinge, die man sich zu Konstruktoren merken sollte", davon das "Ding" mit der Nummer 4.

@faetzminator: Das Beispiel verstehe ich noch nicht ganz, es gibt also eine Superklasse
Code:
Bahn
, welche die Methode
Code:
addMensch(Mensch name)
besitzt (und als Parameter ein Objekt vom Typ Mensch erwartet). Davon erbt die Unterklasse
Code:
Mensch
?
Oder andersrum,
Code:
Bahn
erbt von
Code:
Mensch
?
Weil irgendwo muss ja definiert sein, was ein
Code:
Mensch
-Objekt ist und man muss ja ein Objekt vom Typ
Code:
Mensch
erzeugen können.

@Michael...: Dein Beispiel kapier ich auch nicht, liegt aber daran dass ich mit GUI und Eventlistener noch nichts gemacht habe.
 

Michael...

Top Contributor
@Michael...: Dein Beispiel kapier ich auch nicht, liegt aber daran dass ich mit GUI und Eventlistener noch nichts gemacht habe.
Gerade bei solchen Sachen, bei denen es um Assoziationen zwischen einzelnen Objekten geht, wird das
Code:
this
relevant.
Also weiter Lernen, dann wird Dir die Notwendigkeit von this schon bewusst ;-)
 

thorstenthor

Bekanntes Mitglied
1. Konstruktor aus Konstruktor heraus aufrufen
2. Zugriff auf eigene Attribute, z.B. bei gleichnamigen Variablen
3. Zugriff auf eigene Attribute aus inneren Klassen heraus
4. Übergeben der eigenen Referenz an eine Methode
5. synchronized-Block auf dem eigenen Objekt
6. Lesbarkeit /evtl. Konvention

Das sind doch wenigsten schon mal ein paar Punkte.

Ich erahne schon, wie der Kenntnisstand ungefähr ist, aber die Existenz des this würde ich nicht anzweifeln; es gibt Merkwürdigeres.;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben