this - wann verwende ich das?

Status
Nicht offen für weitere Antworten.

CoronaLemon

Mitglied
Hallo,

ich arbeite gerade ein Java Buch durch und bin dabei auf folgendes Beispiel gestoßen:

Java:
public class Fraction {

	int n=0;
	int d=0;
	
	void add (Fraction f)
	{
		this.n = this.n * f.d + f.n * this.d;
		this.d = this.d * f.d;
		System.out.println(this.n + " " + this.d);
	}
	
	public static void main (String arg[])
	{
		Fraction bruch = new Fraction();
		bruch.n = 3;
		bruch.d = 4;
		bruch.add(bruch);
	}
}

Ist nicht gerade ein komplexes Programm, aber im Moment fehlt mir dafür ein bisschen der Durchblick.

Im Hauptprogramm erzeuge ich einen bruch vom Typ "Fraction". bruch zeigt also auf ein Fraction-Objekt n, in dem noch kein Wert steht - richtig?

Nun wird bruch.n der Wert 3 und bruch.d der Wert 4 hinzugefügt.
Wie ich der Ausgabe entnehmen kann, werden zuerst Zähler und Nenner multipliziert bzw. anschließend addiert. Also in diesem Beispiel wäre der neue Zähler 3*3+4*4 ... aber warum? Zeigen this.n und f.n auf das gleiche Fraction-Objekt n?

Mir ist noch nicht ganz klar, wann ich dieses this verwenden kann / muss.

Danke im Voraus und schönes WE,

Philipp
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
hi, also ich versuchs dir mal zu erklären, this, heißt ja dies/das
this wird verwendet um auf die eigene Klasse innerhalb der Klasse zu zeigen.

Zum beispiel in deinem code

this.n

es gibt ja einen Wert, namens "n" in deiner klasse,
und das this, soll heißen:
seht mal alle her, das n aus dieser klasse, dieses n meine ich!

this kann für vieles verwendet werden, auch wenn man erbt, ich weiß nicht ob du schon so weit bist, noch mal kurz zusammengefasst:
Wenn man in Klasse A ist, und auf Klasse A verweisen will, dann schreibt man this
um auf die Klasse selbst innerhalb der klasse zu zeigen

oder um werte aus der klasse zu meinen,

die werden mit this und einem punkt und dann dem wert angegeben wie hier:

this.n

OK?
Ichhoffe du hast das einigermaßen verstanden wie ich das erklärt habe:)
 

Developer_X

Top Contributor
du kannst es;:
immer verwenden

du musst es verwenden:
wenn du z.B. im Constructor der Klasse, einen Wert m hast, und ganz oben auch den wert m, wenn du jetzt m schreibst, weiß java nicht ob du das obere m meinst, oder das im Constructor, das im constructor heißt ganz einfach m, aber das ganz oben würde im constructor dann this.m heißen

Java:
public class Test
{
//wert der klasse
int m;
//construcotr
public Test()
{
//wert im constructor
int m;
//java denkt jetzt, wenn ich m schreibe, welches m? ich habe in der klasse 2 ms
//dann wenn man m schreibt
m = 1;
//wird der wert im construcor zu eins,
//wenn man this.m schreibt
this.m = 1;
//wird der wert ganz oben zu eins
//das wars

}
}
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
in der main kann man ganz schön sehen, wie man werte von anderen klassen meinen kann, nämlich in dem man
ganz einfach den klassennamen, dann denk punkt und dann den wert schreibt
 
Zuletzt bearbeitet:

CoronaLemon

Mitglied
Das ging ja schnell ... :)

Aaah, das macht die Sache schon verständlicher.

Also wenn ich die Methode (in diesem Fall add) von dem Objekt bruch aufrufen, dann wird bei this.n, immer der Wert von bruch verwendet. Mit dem "normalen" Parameter Fraction f kann ich dann festlegen, mit was addiert wird?!

z.B.

Fraction alpha = new Fraction();
Fraction beta = new Fraction();
alpha.n = 1;
alpha.d = 2;
beta.n = 1;
beta.d = 2;
alpha.add(beta);

Dann würde in der Methode das this.n den Wert 1 und this.d den Wert 2 haben, richtig?

EDIT// Das Konstruktor Beispiel ist prima, danke!
 
Zuletzt bearbeitet:

Developer_X

Top Contributor
genau, du hast es erfasst,;)
wenn du weitere fragen hast, zöger nie zu fragen

obwohl welche methode meinst du, das verstehe ich nicht ganz,

PS: dein Code ist ziemlich komplex, kennst du die Java Rechenoperationen schon? das sieht nicht einfach aus für einen anfänger,

+ = plus ja klar
- = minus auch klar
/ = geteilt
*= mal

ich weiß net ob du die schon kennst
 
Zuletzt bearbeitet:

Schandro

Top Contributor
this ist nicht nur dazu da um zwischen Membervariablen und lokalen Variablen zu unterscheiden wenn sie den selben Namen haben. Der wichtigere Aspekt ist, dass man mit "this" tatsächlich eine Referenz auf sich selber weitergeben kann:
Java:
public class A{
	
	public static void main(String[] args) {
		new A().doSomething();
	}
	
	public A(){
	}
	
	public void doSomething(){
		B myB = new B(this); // Der Konstruktor von B erwartet eine Referenz auf ein A-Object als Parameter. this ist eine Referenz auf sich selber, ALSO auf ein A-Object da wir uns gerade in der Klasse A und nicht in einen statichen Kontext befinden.
		myB.doSomethingToo();			
	}
	
	public void print(){
		System.out.println("A says: Hello");
	}
}

class B{
	private A myA;
	
	public B(A myA){
		this.myA = myA; // hier nochmal die Verwendung von this um zwischen Lokaler und Membervariable syntaktisch zu unterscheiden
	}
	
	public void doSomethingToo(){
		myA.print(); // myA zeigt auf ein A-Object. (Zuffäligerweise genau das Object was DIESES B-Object hier erst erschaffen hat, aber das ist egal)
		System.out.println("B says: Hello");
	}
}
A gibt beim erschaffen des B-Objectes eine Referenz AUF SICH SELBER mit. B benutzt diese Referenz auf das A-Object um eine Methode des A-Objectes aufzurufen.
 
Zuletzt bearbeitet:

CoronaLemon

Mitglied
Oha, jetzt wird's interessant.

Also in diesem Fall wird durch
Java:
B myB = new B(this);
einfach ein leeres (nennt man das so?) A Objekt mitgegeben, damit B auf A verweisen kann?

Interessantes Beispiel, danke!
 

Der Müde Joe

Top Contributor
>einfach ein leeres (nennt man das so?) A Objekt mitgegeben

Nein, kein leeres. Dieses Objekt. Das aktuelle auf dem gerade gearbeitet wird.

EDIT:
Java:
A a = new A(); //das A Objekt
a.doSomething() // ruft nun die Methode auf im Objekt a, 
//welche wiederum new B(this) aufruft, wobei this dann das a ist. 
//Das Objekt auf dem doSomethong aufgerufen wird
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
Bernasconi Programmierstil / Wann eine neue Datei? Java Basics - Anfänger-Themen 5
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
S Wie verwende ich ne aus einer Schleife nach der Schleife? Java Basics - Anfänger-Themen 9
T Wie verwende ich Listen Java Basics - Anfänger-Themen 25
G Datei aus eigener JAR-Datei verwende Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben