Bedeutung this operator

eRaaaa

Top Contributor
Wieso machst du dazu noch ein Thema auf? Kannst auch einfach noch einen Beitrag zu deinem Anderen verfassen...
Aber zum Anhang: ist nicht korrekt. Hast du dir mal die Links durchgelesen die man dir im anderen Thread ans Herz gelegt hat?

Mach dir doch mal Gedanken (oder am bestne du probierst es selbst mal aus) was passiert, wenn du eben NICHT this benutzt und dann eben so etwas wie
gradmass = gradmass;
schreibst....
 

ert009

Mitglied
Ok,ich habe eingesehen,dass ich erst das nötige Hintergrundwissen brauche.Nach den Ergebnissen
meiner Recherche hat this jetzt folgende Funktion:
Wenn man eine lokale Variable benutzen will ,die die gleichen Attribute besitzen soll ,wie eine bereits erstellte Objektvariable dann kann man this benutzten.
Und das geht dann so

public class figur {
private int arm;
}
puclic void Körperteile(int arm ){
this.arm=arm

Und dadurch werden dann die Attribute der Objektvariablen auf die lokale Variable "überschrieben"

Entschuldigung wegen meinen gewöhnungsbedürftigen Sprachstil
 

Final_Striker

Top Contributor
Nicht wirklich. In deinem Beispiel wird in der Methode Körperteile der Wert der globalen Variable arm mit dem per Parameter übergeben Wert arm überschrieben.

Java:
public class Figur {

   private int anzahlArme;

   public void setAnzahlArme1(int anzahlArme){
      this.anzahlArme = anzahlArme;
   }

   public void setAnzahlArme2(int arme ){
      this.anzahlArme = arme;
   }

   public void setAnzahlArme3(int arme ){
      anzahlArme = arme;
   }

   public Figur wasGebeIchZurück()
   {
      return this;      
   }

}

Was ist der Unterschied zwischen setAnzahlArme1, setAnzahlArme2 und setAnzahlArme3?
Was macht die Methode wasGebeIchZurück?

Edit:

Ach ja. Du brauchst nicht die gleiche Antwort in allen deinen Themen zu posten. Dadurch bekommst du auch nicht mehr oder schneller Hilfe. ;-)
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Paar Sätze vorher steht`s beschrieben
http://openbook.galileocomputing.de/javainsel8/javainsel_06_001.htm#mja678e97685429a7375ffc8b205153136 hat gesagt.:
Die this-Referenz löst das Problem, wenn lokale Variablen Objektvariablen verdecken.
[...]
Trägt eine lokale Variable den gleichen Namen wie eine Objektvariable, so verdeckt sie diese
[...]
Somit bezieht sich in der Methode jeder Zugriff auf name auf die Parametervariable und nicht auf die Objektvariable.
[...]
Das heißt aber nicht, dass auf die äußere Variable nicht mehr zugegriffen werden kann. Die this-Referenz zeigt auf das aktuelle Objekt, und damit ist auch ein Zugriff auf Objekteigenschaften jederzeit möglich.
 

ert009

Mitglied
Ja OK,dass hab ich soweit verstnden ich versteh nur nicht genau was mit verdecken von Variablen gemeint sit und ich find irgendiwe auch keine Antwort,die ich versteh.
 

eRaaaa

Top Contributor
Java:
class Figur {

    private int arme = 2;

    void printArme(int arme) {
	// hier verdeckt die lokale variable arme, die objektvariable arme!
	System.out.println(arme); // die ausgabe hätte hier den wert welcher übergeben wird
	
	// wie kann man nun also dennoch auf arme des objektes zugreifen?
	// die antwort ist this!
	System.out.println(this.arme); // ausgabe = 2
    }
}
 

L-ectron-X

Gesperrter Benutzer
Wenn du in einer Klasse Instanzvariablen hast...
Java:
public class MeineKlasse {
   private int x = 2;
   private int y = 5;
   private int z;

   ...
}

dann werden die von Variablen, die in Methoden initialisiert werden oder über Parameterlisten in die Methode gelangen verdeckt.
Java:
public void setValue(int x, int y) {
   int z = x + y; //z ist nicht die Summe aus 2 und 5
   this.z = z + 20; //die Instanzvariable z erhält die Summe aus der lokalen Variable z und 20
}
 

ert009

Mitglied
Ja gut ,aber warum benutzt man lokale Variabeln ,dei genauso heißen wie Objektvariabeln oder ist das nur um dei Zusammengehörigkeit darzustellen
 

ert009

Mitglied
Also ist es so
-Wenn eine lokale Variable den gleichen Namen hat wie, die zuvor deklarierte Instanzvariable verdeckt sie diese
- Das bedeutet, dass sich jeder weitere Zugriff nicht auf die Instanzvariable nicht mehr zugegriffen werden kann ,da sich jeder Zugriff auf die lokale Variabel bezieht
-Durch die This Referenz wird der Zugriff auf die Instanzvariable wieder möglich
 

L-ectron-X

Gesperrter Benutzer
Das stimmt nur so lange du dich innerhalb der Methode befindest. Danach sind die lokalen Variablen ungültig. Das heißt, so lange du innerhalb einer Methode mit gleichnamigen Variablen handtierst, überdecken diese die Instanzvariablen.
 

mariashka

Neues Mitglied
Sorry, dass ich jetzt dieses uralt Thema wieder hoch hol...Ehm, mir gehts wie ert. Ich versteh denn sinn absolut nicht. Wozu brauch ich denn überhaupt die Instanzvariable - da liegt dann ein "int arm" auf dem Stack rum...und was macht der dort die ganze Zeit?, also wieso fang ich denn nicht gleich mit der objektvariablen an.. wozu brauche ich denn überhaupt zwei Arten von Variablen, die irgendwie das gleiche darstellen, aber irgendwie auch nicht? Ist hier jemand gut darin, sowas in anschaulicher Baby-Mathesprache zu erklären?

--> (Ich bin in einer Einführungsveranstaltung für Nicht-Informatiker. Unser Prof erklärt Code-Auszüge so: "Und hier geht der Frame zum Button und sagt "Hey, Button, sag mir, wenn du gedrückt wurdest!"")

...Könnte man jetzt auch, wenn man schon ein anderes objekt der Klasse Figur hat... zB. figurVonLinda auch figurVonLinda.arm schreiben und was wäre dann die Beziehung zwischen arm und figurVonLinda.arm?

Sorry, mir gehts so als müsste ich wieder zum ersten Mal verstehen, wie man mit Variablen überhaupt umgeht, wie in der 6. Klasse. (Da kann jede Zahl rein? Wie, wirklich jede? Aber sie ist immer gleich? Aber es ist doch jede Zahl? Häääääää?)).

Vielen Lieben Dank :) :D
 

Joose

Top Contributor
Ich versteh denn sinn absolut nicht.
Den "this" Operator braucht man um zwischen einer Instanzvariable und einer lokalen Variabeln mit denselben Namen zu unterscheiden

Beispiel:
Java:
public class Person {
   private String name;
   
   public void setName(String name) {
       this.name = name;
   }
}
In der Methode setName willst du das Instanzattribut name auf einen bestimmten Wert setzen. Dazu bekommt die Methode einen Parameter übergeben, welcher den zu setzen Wert enthält.

Der Parameter hat denselben Namen wie das Instanzattribut. Wenn du nun einfach name = name schreibst passiert nichts anderes als dass du den Wert des Parameter mit dem Wert des Parameter überschreibst.
Damit du nun auf das Instanzattribut name zugreifen kannst brauchst du den "this"-Operator.

this.name = name

Wozu brauch ich denn überhaupt die Instanzvariable ..... denn nicht gleich mit der objektvariablen an.. wozu brauche ich denn überhaupt zwei Arten von Variablen, die irgendwie das gleiche darstellen
Was ist für dich der Unterschied zwischen "Instanzvariable" und "Objektvariable"? Welche zwei Arten von Variablen meinst du?
 

Neue Themen


Oben