Warum kein this in Methode

Iago

Mitglied
Hallo,
ich frage mich , wann ich in einer Methode oder dem Konstruktor this verwende und wann nicht?? Hier ein Beispiel aus einem
Buch.
Java:
public class Punkt
{
   public int x;
   public int y;

   public Punkt()   {}
   public Punkt(int n, int m) {x = n; y = m; }

   public void verschieben(int dx, int dy)
   {
       x += dx;
       y += dy;
   }
}

Was für einen Unterschied macht es, wenn ich z.B. im Kontruktor schreibe:
public Punkt(int n, int m) {this.x = n; this.y =m}

oder analog in der verschiebe-Methode.
Vielen Danke,
Iago
 

XHelp

Top Contributor
Hier macht es nicht wirklich einen Unterschied. Der grobe Sinn wird klarer, wenn du die Konstruktor-Parameter genau so wie die Instanz-Variablen nennst:
Java:
class Test {
  private int x;
  private int y;
  Test(int x, int y) {
    x = x; //sieht zwar komisch aus, macht dafür aber kein Sinn
    this.x = x; //"this.x" ist die instanz-variable, "x" die Methoden-Variable
    this.y = y;
  }
}
 

Blindxantos

Aktives Mitglied
Hallo,
ich frage mich , wann ich in einer Methode oder dem Konstruktor this verwende und wann nicht?? Hier ein Beispiel aus einem
Buch.
Java:
public class Punkt
{
   public int x;
   public int y;

   public Punkt()   {}
   public Punkt(int n, int m) {x = n; y = m; }

   public void verschieben(int dx, int dy)
   {
       x += dx;
       y += dy;
   }
}

Was für einen Unterschied macht es, wenn ich z.B. im Kontruktor schreibe:
public Punkt(int n, int m) {this.x = n; this.y =m}

oder analog in der verschiebe-Methode.
Vielen Danke,
Iago

"üblicherweiße" sieht der Konstruktor so aus:
Java:
public Punkt(int x, int y) {this.x = x; this.y =y}
dann macht das this auch sinn, in deinem fall spielt es eigentlich keine rolle..
 

pausch

Aktives Mitglied
Das this zeigt einfach an, dass es sich bei dem folgenden Aufruf um das aktuelle Objekt handelt. Man kann ja bekanntlich auf alle aktuell zugreifbaren Objekte über Objektname.methode() bzw. Objektname.variable (wenn public) zugreifen. Das this ist halt ein Platzhalter für das aktuelle Objekt, sodass über this.methode() auch alle geerbten methoden etc. aufgerufen werden können, natürlich auch diejenigen, die du neu geschrieben hast. Das this funktioniert allerdings bei Statischen Objekten nicht. Kleines Beispiel
Java:
public class Testklasse{
   public static int testInteger=0;

   public void gebeIntegerzahlaus(){
      System.out.println(this.testInteger);
   }
}

Das ganze wird nicht funktionieren, da die variable testInteger eine Klassenvariable ist, und dementsprechend nicht zu dem aktuellen Objekt "this" gehört sondern über den Klassennamen aufzurufen ist. Möglich wäre in diesem Fall
Java:
System.out.println(Testklasse.testInteger);
Wobei auch in diesem Fall theoretisch das this vernachlässigt werden kann...
 

Empire Phoenix

Top Contributor
Tatsächlic wrid das sehr wohl funktionieren, jedoch wird es inner ide wohl ne warnung gebenw eil man this benutzt um auf static krams zuzugreifen.

Anderer fall von this

class Formular extends JFrame(){
public Formular(){
JButton closebutton = new JButton("Close");
closebutton.addActionListener(new ActionListener({
//unterschiedliche sachen mit this:
public void actionEvent(){
this.close();
close(),
Formular.this.close();
}
});
}
}


(achtung syntax nur grob korrect und methodenamen etwas anders evtl)

Das erste versucht im ActionLisener die Methode close aufzurufen, (welche hier nicht existiert)
Das zweite ruft close auf, dies kann etnweder im Formular sein, oder im Actionlistener.
Das dritte ruft close im Formular auf.

-> Mit dem this hier kann man zb eindeutig angeben das die aufzurufende Methode im ACtionlistener sein soll und nicht im Formular.
 

pausch

Aktives Mitglied
Sorry, wenn ich da Falsch lag, aber ich glaube ich hatte da mal einen Fehler, aber kann auch was anderes gewesen sein. Trotzdem ist die Variante unschön. Wobei das denke ich Definitionssache ist ;)
 

Andi_CH

Top Contributor
Java:
System.out.println(Testklasse.testInteger);
... wobei man "Testklasse." (genau so wie "this." in den anderen Fällen) weglassen kann, wenn der Bezeichner im entsprechenden Namespace eindeutig ist (Was IMO so sein sollte, aber das ist glaub schon bekannt :) )

@Empire Phoenix : Was steht da in grossen, roten Buchstaben oben dran? -> Java-Tags benutzen bitte.
 
Zuletzt bearbeitet:
S

Spellsleeper

Gast
"this" bringt eigentlich nur etwas wenn du auf Instanzvariablen zugreifen willst,diese aber durch lokale Variablen überschrieben wurden!
Java:
public class Example{
int x=3;
public static void main (String[]args){
int x=4;
System.out.println(x);//4
System.out.println(this.x);//3
}
}
Anmerkung:"this" kann ansonsten genutzt werden um auf deine Klasse(Objekt) direkt zuzugreifen.
 
Zuletzt bearbeitet von einem Moderator:

2AndAHalfBit

Aktives Mitglied
Wie oben schon beschrieben, kannst du mit this lokal verborgene Klassenattribute sichtbar machen. Das machst du z.B. wenn die Parameter deines Konstruktors genauso heissen, wie die zugehörigen Attribute deiner Klasse. This ist jedoch zu vermeiden, da es recht Laufzeitintensiv ist.

This hat aber noch eine andere Bewandnis. This ist einfach die Instanz auf sich selbst. Du kannst also mit this das aktuelle Objekt an andere Objekte übergeben. Ein Beispiel für ein solches Szenario wäre ein Observer. Nehmen wir an, deine Klasse will über Zustandsänderungen notifiziert werden. Dann muss deine Klasse sich registrieren, und dabei seine Referenz mitgeben. Dies kannst du dann einfach machen, indem du die this-Referenz verwendest.

Grüße
 

2AndAHalfBit

Aktives Mitglied
Hi Gregor,

ich kann die aussage leider theoretisch nicht belegen. Meine Aussage gründet auf rein praxisorientierten Erfahrungen. Soweit ich weiss, ist die Auflösung der This-Referenz ein Vorgang, bei der Refexion verwendet wird (ich weiss es aber nicht genau).

Grüße
 

Landei

Top Contributor
Sorry, das ist Quatsch. Auf welche Variable zugegriffen wird (ob nun mit oder ohne this) wird schon vom Compiler festgestellt, der ja auch meckert, wenn selbige nicht vorhanden ist. Deshalb muss zur Laufzeit dort überhaupt nichts dynamisch aufgelöst werden (es sei denn, man verwendet selbst Reflection).

Und wenn du dir bei solchen Sachen nicht wirklich sicher bist, solltest du keine Neulinge mit Schauermärchen erschrecken.
 
Zuletzt bearbeitet:

Gregorrr

Bekanntes Mitglied
Sorry, das ist Quatsch. Auf welche Variable zugegriffen wird (ob nun mit oder ohne this) wird schon vom Compiler festgestellt, der ja auch meckert, wenn selbige nicht vorhanden ist. Deshalb muss zur Laufzeit dort überhaupt nichts dynamisch aufgelöst werden (es sei denn, man verwendet selbst Reflection).

Und wenn du dir bei solchen Sachen nicht wirklich sicher bist, solltest du keine Neulinge mit Schauermärchen erschrecken.

+1
 

2AndAHalfBit

Aktives Mitglied
Das meckern schliesst ja ein Laufzeitverhalten nicht aus. Ich habe nur gesagt, man sollte es, falls notwendig vermeiden. Zur Laufzeit muss schon etwas geschehen, sonst würde der ganze this-Mechanismus ja nicht greifen. Woher soll ein Objekt zur Kompilierzeit seine Referenz denn feststellen? Die exsitiert ja noch gar nicht. Kann sein, das meine Begründung quatsch ist, deshalb habe ich sie auch entsprechend notiert. Aber deine ist mal mindestens genauso ein Quark.

Mir ists aber auch egal, man bewerte die Aussage die ich ursprünglich getätigt habe. Da ging es eigentlich um was anderes. Deswegen ist mir die Haarspalterei auch egal.

Gruß
 

Gregorrr

Bekanntes Mitglied
Das meckern schliesst ja ein Laufzeitverhalten nicht aus. Ich habe nur gesagt, man sollte es, falls notwendig vermeiden. Zur Laufzeit muss schon etwas geschehen, sonst würde der ganze this-Mechanismus ja nicht greifen. Woher soll ein Objekt zur Kompilierzeit seine Referenz denn feststellen? Die exsitiert ja noch gar nicht. Kann sein, das meine Begründung quatsch ist, deshalb habe ich sie auch entsprechend notiert. Aber deine ist mal mindestens genauso ein Quark.

Mir ists aber auch egal, man bewerte die Aussage die ich ursprünglich getätigt habe. Da ging es eigentlich um was anderes. Deswegen ist mir die Haarspalterei auch egal.

Gruß

Fühl dich doch nicht gleich angemacht. Das schlimmste, was passieren kann, ist doch dass du was lernst. Programmierung ist so komplex, da kann keiner alles wissen. Richtig gute Programmierer sind für sowas immer dankbar.

Programmierkonstrukte, wie Packages, Gültigkeitsbereiche, also Sichtbarkeiten, Klassen, etc. sind alles nur für den Programmierer gedacht, dass er sein Programm besser strukturieren kann. Der JIT-Compiler für die JVM, bzw. in C/C++ der Compiler, der das dann in Maschinencode übersetzt, optimiert den Code ja so, dass die Zugriffe minimiert werden, sowas wie Sichtbarkeiten sind für den vollkommen irrelevant, wenn sie vorher syntaktisch geprüft wurden. Klassen sind dann einfach Speicheradressen, usw. Eine this-Referenz-Variable wird dann einfach direkt durch die Speicheradresse repräsentiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
T Compiler-Fehler Methode ist Abstrakt obwohl kein Schlüsselwort gesetzt wurde Java Basics - Anfänger-Themen 5
alderwaran closed source jar, kein javadoc. was macht methode x eigentlich? ( oracle forms pjc beans ) Java Basics - Anfänger-Themen 2
I Kein Zugriff auf erstelltes Objekt aus anderer Methode Java Basics - Anfänger-Themen 6
G GUI von wiederholender Methode füttern; kein Programmende Java Basics - Anfänger-Themen 2
V paint()-methode manuell aufrufen? kein autostart erwuenscht Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
M Kein Shortcut? Java Basics - Anfänger-Themen 7
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
GermanPie Fehler in Putty (kein Hauptmanifestattribut, in jar) Java Basics - Anfänger-Themen 4
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
D kein hauptmanifestattribut in dateiname.jar Java Basics - Anfänger-Themen 14
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
T In C:\java\bin wird kein javac angezeigt. Java Basics - Anfänger-Themen 1
B Wieso gibt das Programm in der Console kein Ergebnis aus? Java Basics - Anfänger-Themen 2
N kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 1
I Shutdown wenn kein Strom verfügbar Java Basics - Anfänger-Themen 4
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
T Objektorientierte Programmierung - Kein Plan wieso das nicht funktioniert! Java Basics - Anfänger-Themen 6
B Compiler-Fehler 86:11: error: ';' expected obwohl kein ";" hingehört! Java Basics - Anfänger-Themen 10
V Kann kein Java Projekt mehr mit Eclipse erstellen Java Basics - Anfänger-Themen 5
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
J Warum kein new ? Java Basics - Anfänger-Themen 10
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
C Klassen Wieso kein infiniter Regress? Java Basics - Anfänger-Themen 4
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
X Fehler beim Öffnen von Jar Datei: "kein Hauptmanifestattribut" Java Basics - Anfänger-Themen 5
D Classpath Kein Zugriff Java Basics - Anfänger-Themen 9
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
J ResultSet.getStrin - doch kein String? oder wo liegt das Problem? Java Basics - Anfänger-Themen 3
Kenan89 JScrollPane, aber kein Scrollbalken Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
E Kein Rechtzeitiger Abbruch bei Rekursiverfunktion Java Basics - Anfänger-Themen 8
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
V Kein neuer Thread trotz Runnable Java Basics - Anfänger-Themen 4
H Erste Schritte Kein Zugriff auf einen button der ein Ereignis ausgelöst hat Java Basics - Anfänger-Themen 2
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
K SWT Fehler obwohl kein SWT benutzt wird Java Basics - Anfänger-Themen 4
L String: Objekt und doch kein Objekt? Java Basics - Anfänger-Themen 5
J Warum kein return wert? Java Basics - Anfänger-Themen 10
S kein sound? Java Basics - Anfänger-Themen 3
T JTextPane - setText kein kein neuladen der Bilder? Java Basics - Anfänger-Themen 8
L Kein System.out Java Basics - Anfänger-Themen 14
T Warum öffnet sich kein Fenster? Java Basics - Anfänger-Themen 3
c_sidi90 jTextarea kein Zeilenumbruch erlauben Java Basics - Anfänger-Themen 4
M Kein Sound in der .jar, davor schon Java Basics - Anfänger-Themen 6
K Arrays - Komma zu viel, kein Problem? Java Basics - Anfänger-Themen 3
G erweiterte for schleife kein new? Java Basics - Anfänger-Themen 4
C warum liefert equals kein TRUE Java Basics - Anfänger-Themen 12
T meinThread.wait(); wirft immer Exeption & hat kein Effekt Java Basics - Anfänger-Themen 15
Houly kein bild im JFrame bei Mp3 Wiedergabe Java Basics - Anfänger-Themen 5
T Jar-Archive kein System.out.println()?? Java Basics - Anfänger-Themen 5
W "Kein korrekter Schleifendurchlauf" Java Basics - Anfänger-Themen 3
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
radiac Wieso bekomme ich kein Bild drauf??? Java Basics - Anfänger-Themen 13
W peinliches Problem - Kein Konstruktor? Java Basics - Anfänger-Themen 10
Spot84 kein interface iEditorInput Java Basics - Anfänger-Themen 2
Kasoki Compilen von Java Scripts (Nein kein JavaScript xD) Java Basics - Anfänger-Themen 13
G Logger mag kein Linux Java Basics - Anfänger-Themen 3
M erzugt kein objekt Java Basics - Anfänger-Themen 18
L Kein Zugriff auf Listen in einem Array Java Basics - Anfänger-Themen 2
K kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 2
P Eclipse startet kein Applet Java Basics - Anfänger-Themen 6
G Kein EJB-Package vorhanden Java Basics - Anfänger-Themen 2
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
F Seltsame Zeichen und kein Zeichenumbruch mit Filewriter Java Basics - Anfänger-Themen 4
S Kein Zugriff auf Files in Jar-Datei Java Basics - Anfänger-Themen 4
C Kann kein Java Programm starten Java Basics - Anfänger-Themen 8
G Auf Bildschirm (kein Fenster) schreiben Java Basics - Anfänger-Themen 2
G kein Zugriff auf eine Klasse in einem Unterordner Java Basics - Anfänger-Themen 11
M Prüfen, ob Tag im Jahr kein Samstag/Sonntag ist Java Basics - Anfänger-Themen 7
G kein text im dialogfeld Java Basics - Anfänger-Themen 3
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
M SystemTray zeigt kein Icon an Java Basics - Anfänger-Themen 11
L Warum öffnet sich aus einer .jar-Datei kein Dosfenster? Java Basics - Anfänger-Themen 5
G Listen, über Listen. und doch kein Überblick Java Basics - Anfänger-Themen 8
I translate.java - kein sichtbarer fehler im quelltext Java Basics - Anfänger-Themen 18
S Kein wirklicher Ansatz Java Basics - Anfänger-Themen 6
F Kann kein Programm über die Konsole ausführen Java Basics - Anfänger-Themen 5
G Habe bei String kein split()? Java Basics - Anfänger-Themen 7
G Kein Runden Java Basics - Anfänger-Themen 3
G readln, aber kein writeln :( Java Basics - Anfänger-Themen 12
G Kein main Type? Java Basics - Anfänger-Themen 3
R Klasse nicht sichtbar(kein private-Fehler) Java Basics - Anfänger-Themen 2
H kein lösungs ansatz mit java Java Basics - Anfänger-Themen 4
S Layout Probleme (Kein Adden möglich) Java Basics - Anfänger-Themen 18
M JSP: Cookies setzen ist kein Problem, aber wieder ändern ??? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben