# Bedeutung this operator



## ert009 (21. Mrz 2010)

Im Anhang hab ich was formuliert und ich bin mir nicht sicher ob daas richtig ist.


----------



## eRaaaa (21. Mrz 2010)

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....


----------



## Final_Striker (21. Mrz 2010)

"Bedeutung: Um eine Variabel nicht doppelt zu benutzen,wird this benutzt.Dadurch wird aus der globalen Variabel während der Methode eine lokale Methode."

Der Satz sagt, dass du die Bedeutung vom "this" nicht verstanden hast.

lesen:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6 Eigene Klassen schreiben


----------



## ert009 (21. Mrz 2010)

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 (21. Mrz 2010)

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.


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


----------



## ert009 (21. Mrz 2010)

1.In Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6 Eigene Klassen schreiben steht das die das die Variable this.name auf die Objektvariable direkt zugreift , sodass die Zuweisung this.name = name; die Objektvariable mit dem Argument initialisiert.
Aber ich kapier irgendiwe nicht was die dmait sagen wollen


----------



## ert009 (21. Mrz 2010)

also ich mein damit die 2.Methode


----------



## eRaaaa (21. Mrz 2010)

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
> [...]
> ...


----------



## ert009 (21. Mrz 2010)

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 (21. Mrz 2010)

```
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 (21. Mrz 2010)

Wenn du in einer Klasse Instanzvariablen hast...

```
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.

```
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 (21. Mrz 2010)

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


----------



## Atze (21. Mrz 2010)

genau  dabei müssen sie nicht so heißen, ist aber die gängige vorgehensweise


----------



## ert009 (21. Mrz 2010)

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


----------



## ert009 (21. Mrz 2010)

Dasmüsste doch jetzt stimmen.


----------



## L-ectron-X (21. Mrz 2010)

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 (11. Jan 2017)

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


----------



## Viktim (13. Jan 2017)

@mariashka was genau möchtest du wissen?


----------



## Joose (13. Jan 2017)

mariashka hat gesagt.:


> 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:

```
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`



mariashka hat gesagt.:


> 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?


----------

