Permalänk
Medlem

Java vad är en "this."???

Tjena, kom nyss över ordet this.något och hade ingen aning om vad det var. Har sökt runt på det men inte fattat någonting, så jag undrar om det finns någon här som kan förklara det lite enklare?

Visa signatur

Världen bästa och högljudaste dator FTW!
Sapphire 7970 Vapor X - MSI Z77 G45 - Cooler Master GX 650W - Intel i5 3570k - 1 TB HDD - Cooler Master Storm Scout II -
2x8 GB Corsair Vengeance - Cooler Master 212 EVO

Permalänk
Medlem

public class XXX {

private int id;

public void DoSomething(int id){
this.id = id;
}
}

Simpelt uttryckt så hänvisar this till klassen du är i. Du ser att metoden DoSomething tar emot en variabel som heter det samma som en privat variabel som redan finns i klassen. För att då hänvisa till klassens variabel id och inte till variabeln id som tas emot i metoden, så skriver man this framför variabeln.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av ZyAnidE:

Tjena, kom nyss över ordet this.något och hade ingen aning om vad det var. Har sökt runt på det men inte fattat någonting, så jag undrar om det finns någon här som kan förklara det lite enklare?

Skrivet av IceDread:

public class XXX {

private int id;

public void DoSomething(int id){
this.id = id;
}
}

Simpelt uttryckt så hänvisar this till klassen du är i. Du ser att metoden DoSomething tar emot en variabel som heter det samma som en privat variabel som redan finns i klassen. För att då hänvisa till klassens variabel id och inte till variabeln id som tas emot i metoden, så skriver man this framför variabeln.

This.någonvariabel innebär att du menar variabeln i instansen av klassen du är i (som jag förstått det) dvs om du har säg 1 person klass med stringen "namn" och så skapar du flera instanser av personer.. så sätts namnet på varje enskild person genom this.namn = "blablabla";

Visa signatur

Citera mig för svar :D
- Årets Citat: Vattenulf -
"Pumpen snurrar inte den står stilla i botten på chassit. Om den hade snurrat skulle slangarna blivit vridna så det vill man ju inte."

Permalänk
Keeper of Traditions
Skrivet av IceDread:

public class XXX {

private int id;

public void DoSomething(int id){
this.id = id;
}
}

Simpelt uttryckt så hänvisar this till klassen du är i. Du ser att metoden DoSomething tar emot en variabel som heter det samma som en privat variabel som redan finns i klassen. För att då hänvisa till klassens variabel id och inte till variabeln id som tas emot i metoden, så skriver man this framför variabeln.

Det blir nog tydligare om man säger objektet, då det inte är klassen generellt man menar?

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem
Skrivet av Dunder:

Det blir nog tydligare om man säger objektet, då det inte är klassen generellt man menar?

Det håller jag absolut med om. Objekt, instans, tomato tomato.

Vad ni än kallar det så är this en referens till en privat medlem i den klassen, mer specifikt till objektets egna instans av den medlemen. (variablen).

T.ex.

public class Foo{ private int bar; public Foo(int b){ this.bar = b; // sätter värdet på bar-variablen för objektet som skapas till värdet som tas in i konstruktorn, b. }

Hoppas det hjälpte

Permalänk
Medlem
Skrivet av Dunder:

Det blir nog tydligare om man säger objektet, då det inte är klassen generellt man menar?

Beror på var i inlärningskurvan op är i eftersom om jag skriver objekt och om man ser till frågan så skulle det i så fall också vara i sin ordning att förklara skillnaden och jag tänkte en sak i taget är ofta bäst. Men givetvis så är en instans av klassen ett objekt.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare
Citat:

I think the lack of reusability comes in object-oriented languages, not functional languages. Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

If you have referentially transparent code, if you have pure functions — all the data comes in its input arguments and everything goes out and leave no state behind — it’s incredibly reusable.

/ Joe Armstrong, creator of Erlang

this är en implicit variabel som alltid finns i alla metoder som anropas via en objekt instans. I texten ovan, när man anropar

banana.pick();

så kommer this att vara en pekare till banana.

Gorillan och resten av djungeln får man sedan typiskt tag i via metoder eller via variabel på banan-instansen.

Vidare så läggs this till implicit till alla referenser till variabler definierade för klassen och alla instans-metoder (icke-statiska metoder).
Så detta är ekvivalent

class Banana { Gorilla heldBy; bool pick() { return heldBy.getJungle().tryDetachBanana() && heldBy.persuade(RELEASE_BANANA)); } }

class Banana { Gorilla heldBy; bool pick() { return this.heldBy.getJungle().tryDetachBanana() && this.heldBy.persuade(RELEASE_BANANA)) } }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

this är en implicit variabel som alltid finns i alla metoder som anropas via en objekt instans. I texten ovan, när man anropar

banana.pick();

så kommer this att vara en pekare till banana.

Gorillan och resten av djungeln får man sedan typiskt tag i via metoder eller via variabel på banan-instansen.

Vidare så läggs this till implicit till alla referenser till variabler definierade för klassen och alla instans-metoder (icke-statiska metoder).
Så detta är ekvivalent

class Banana { Gorilla heldBy; bool pick() { return heldBy.getJungle().tryDetachBanana() && heldBy.persuade(RELEASE_BANANA)); } }

class Banana { Gorilla heldBy; bool pick() { return this.heldBy.getJungle().tryDetachBanana() && this.heldBy.persuade(RELEASE_BANANA)) } }

Det finns väl ingen vettig människa som skulle binda typen Banan till Gorilla? Kan ju finnas massa andra grejer som en Banan kan vilja bli hållen av, t ex Chimpans, Bananlåda eller Joggare. Nej, så här gör vi:

interface BananaHållare { JungleOrChimpansOrLådaOrJoggare getJungle() throws NotActuallyAJungleException; boolean persuade(String suggestion); } interface JungleOrChimpansOrLådaOrJoggare { boolean isJungleOrInJungleOrFromTheJungle(); boolean tryDetachBanana() throws TooMuchGlueException; } class Banana { BananaHållare heldBy; boolean pick() { return this.heldBy.getJungle().tryDetachBanana() && this.heldBy.persuade(RELEASE_BANANA)) } }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av IceDread:

public class XXX {

private int id;

public void DoSomething(int id){
this.id = id;
}
}

Simpelt uttryckt så hänvisar this till klassen du är i. Du ser att metoden DoSomething tar emot en variabel som heter det samma som en privat variabel som redan finns i klassen. För att då hänvisa till klassens variabel id och inte till variabeln id som tas emot i metoden, så skriver man this framför variabeln.

Ok, tror det jag har fattat det mesta nu, tack så jättemycket!

Visa signatur

Världen bästa och högljudaste dator FTW!
Sapphire 7970 Vapor X - MSI Z77 G45 - Cooler Master GX 650W - Intel i5 3570k - 1 TB HDD - Cooler Master Storm Scout II -
2x8 GB Corsair Vengeance - Cooler Master 212 EVO