Dobrý den,
chtěl by sem se zeptat,k čemu slouží klíčové slovo "this".Hledal jsem na googlu,pátral jsem v knížkách,všude je něco napsáno,ale nikde to není česky,ani to není (teda aspoň pro mě) dobře vysvětleno.Prosil bych o srozumitelné
vysvětlení s příkladem (s nějakým jednoduchým a pochopitelným).Děkuji z Vaše odpovědi...
Fórum › Java
This
![](img/forum_vlakno_help_vyreseno.png)
Hm, nojo, ono se to popisuje slovně špatně, protože je to tak jednoduché... this je aktuální objekt. Příklad bude lepší:
class X {
private int cislo;
public void metoda() {
cislo = 2;
this.cislo = 2; // tento radek ma uplne stejny vyznam jako predchozi
}
};
Neboli když máš nějakou instanci třídy X a zavoláš metodu 'metoda', potom 'this' je právě ta instance třídy X. Proto jsou ty dva řádky ekvivalentní, protože když před proměnnou neuvedeš nic, bere se aktuální instance, což je to samé jako this.
Kľúčové slovo this slúži sa na odvolávanie sa na objekt a jeho vlastností.
+ this ako funkcia slpži na zavolanie "vhodného "konštruktora -> zavolá taký konštruktor, ktorému odpovedajú jeho parametre.
Napr.
public class Auto {
private string farba;
private string znacka;
public Auto(string farba, string znacka){
this.farba=farba;
this.znacka=znacka;
}
public Auto(){
this("neznama","neznama");
}
Auto nastavFarbu(string color){
this.farba=color;
return this;
}
Auto nastavZnacku(string zn){
this.znacka=zn;
return this;
}
}
//Edit: neskoro :)
No počkat,takže to dělá ze zamčených (private) "objektů" "neuzamčené",a zároveň jim dává hodnotu?Takže, jestli jsem tomu správně rozuměl,tak tohle plati:
Máme dvě třídy,třeba A & B.V první máme deklarovanou private int i=1;.Druhou prázdnou (s metodou main,a aby jsme se nepletly mají stejný název balíčku).Ve trídě B zavloláme (ve třídě main):
System.out.println(this.i);
.A to by mělo zavolat dat. typ i z třídy A.Nakonec by to mělo vypsat toto: 1
Byl bych rád,kdyby jste mě opravily.
Nevím, jestli tady jsou nějaké holky, které by tě opravily, ale pokud ti to bude stačit od nás...
Zbytečně to komplikuješ. This nic neodemyká, nezpřístupňuje. This je prostě aktuální instance třídy (té třídy, do které patří metoda, která se zrovna vykonává). Je to vlastně zájméno "já" - this.x = 4; znamená "moje x nastav na 4".
Například když budeš mít třídu GUI pro nějaké grafické rozhraní tvého programu, kde bude textové pole a tlačítko pro započetí práce a potom třídu Worker, která provádí potřebnou práci, mohlo by to vypadat třeba takto. Worker chce říct tomu GUI, že je hotovo a proto potřebuje mít na instanci třídy GUI odkaz. A ten získá tak, že mu ten odkaz na sebe instance třídy GUI dá před započetím práce. A kde třída GUI vezme odkaz na sebe? No přece pomocí klíčového slova this.
class GUI {
public void done() {
message.setText("Prace je hotova!");
}
public void startBtnClicked() {
Worker w = new Worker();
w.setGui(this);
w.doWork();
}
}
class Worker {
private GUI owner;
void setGui(GUI x) {
owner = x;
}
void doWork() {
// delame moc prace
// na konci rekneme majiteli, ze je hotovo
owner.done();
}
}
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Moderátoři diskuze