OBJEKTINIS PROGRAMAVIMAS
Java this raktažodis
Raktažodis this nurodo dabartinį objektą – tą egzempliorių, kuriam šiuo metu vykdomas konstruktorius arba metodas.
Ką reiškia this?
Kiekvienas egzemplioriaus metodas ir konstruktorius vykdomas konkrečiam objektui. Jo viduje this yra nuoroda į tą objektą. Todėl per this galima pasiekti jo atributus ir metodus.
this negalima naudoti statiniame kontekste.static metodas priklauso klasei, o ne konkrečiam objektui, todėl jame dabartinio objekto nėra.
Atributas ir tokio pat pavadinimo parametras
Konstruktoriaus arba metodo parametras gali turėti tokį pat pavadinimą kaip klasės atributas. Tokiu atveju this.atributas aiškiai nurodo objekto lauką:
public class Knyga {
String pavadinimas;
int puslapiuSkaicius;
Knyga(String pavadinimas, int puslapiuSkaicius) {
this.pavadinimas = pavadinimas;
this.puslapiuSkaicius = puslapiuSkaicius;
}
public static void main(String[] args) {
Knyga knyga = new Knyga("Mažasis princas", 96);
System.out.println(knyga.pavadinimas);
System.out.println(knyga.puslapiuSkaicius);
}
}Mažasis princas
96
- Kuriant objektą konstruktoriui perduodamas pavadinimas ir puslapių skaičius.
- Parametro
pavadinimasvardas sutampa su objekto atributo vardu. this.pavadinimasaiškiai reiškia kuriamo objekto atributą.- Dešinėje esantis paprastas
pavadinimasreiškia konstruktoriaus parametrą. - Taip argumento reikšmės išsaugomos objekte ir vėliau parodomos konsolėje.
this.pavadinimas = pavadinimas reiškia: „šio objekto pavadinimui priskirk parametro pavadinimas reikšmę“.
Kas nutinka praleidus this?
public class Knyga {
int puslapiuSkaicius;
Knyga(int puslapiuSkaicius) {
puslapiuSkaicius = puslapiuSkaicius;
}
public static void main(String[] args) {
Knyga knyga = new Knyga(96);
System.out.println(knyga.puslapiuSkaicius);
}
}0
- Konstruktoriui perduodamas argumentas
96. - Parametras
puslapiuSkaiciuspaslepia tokio pat pavadinimo objekto atributą. - Eilutė
puslapiuSkaicius = puslapiuSkaiciusparametrą priskiria jam pačiam. - Objekto atributas nė karto nepasiekiamas ir negauna reikšmės
96. intatributo numatytoji reikšmė yra0, todėl konsolėje matome nulį.
this.puslapiuSkaicius = puslapiuSkaicius;this leistų Java suprasti, kad kairėje turime pakeisti objekto atributą.
Kito konstruktoriaus iškvietimas su this()
Forma this(...) iškviečia kitą tos pačios klasės konstruktorių. Taip galima suteikti numatytąsias reikšmes ir nekartoti inicializavimo kodo:
public class Knyga {
String pavadinimas;
int puslapiuSkaicius;
boolean perskaityta;
Knyga(String pavadinimas) {
this(pavadinimas, 0, false);
}
Knyga(String pavadinimas, int puslapiuSkaicius, boolean perskaityta) {
this.pavadinimas = pavadinimas;
this.puslapiuSkaicius = puslapiuSkaicius;
this.perskaityta = perskaityta;
}
public static void main(String[] args) {
Knyga knyga = new Knyga("Užrašų knygelė");
System.out.println(knyga.pavadinimas);
System.out.println(knyga.puslapiuSkaicius);
System.out.println(knyga.perskaityta);
}
}Užrašų knygelė
0
false
- Objektas kuriamas perduodant tik pavadinimą Užrašų knygelė.
- Pirmasis konstruktorius iškviečia antrą konstruktorių su
this(pavadinimas, 0, false). - Taip trūkstamoms reikšmėms suteikiamos numatytosios reikšmės:
0puslapių irfalse. - Antrasis konstruktorius visas tris reikšmes įrašo į dabartinio objekto atributus.
- Rezultate matome pilnai paruoštą objektą, nors iš pradžių perdavėme tik vieną argumentą.
this(...) turi būti pirmoji konstruktoriaus instrukcija.To reikalauja Java, kad prieš kitus veiksmus objektas būtų tinkamai inicializuotas.
Dabartinio objekto metodo iškvietimas
Per this galima iškviesti ir kitą dabartinio objekto metodą:
public class Knyga {
String pavadinimas = "Mažasis princas";
void rodytiPavadinima() {
System.out.println(this.pavadinimas);
}
void rodytiInformacija() {
this.rodytiPavadinima();
System.out.println("Knyga paruošta skaityti");
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.rodytiInformacija();
}
}Mažasis princas
Knyga paruošta skaityti
- Metodas
rodytiInformacija()vykdomas konkrečiamknygaobjektui. - Jo viduje
this.rodytiPavadinima()iškviečia kitą to paties objekto metodą. - Šis metodas per
this.pavadinimasparodo dabartinio objekto pavadinimą. - Programa grįžta į
rodytiInformacija()ir parodo antrą tekstą. - Šiuo atveju
thisnėra privalomas, bet aiškiai parodo, kad naudojamas dabartinis objektas.
Dabartinio objekto perdavimas
this yra objekto nuoroda, todėl ją galima perduoti kitam metodui kaip argumentą:
public class Knyga {
String pavadinimas = "Mažasis princas";
void pridetiIBiblioteka() {
Biblioteka.prideti(this);
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.pridetiIBiblioteka();
}
}
class Biblioteka {
static void prideti(Knyga knyga) {
System.out.println("Pridėta knyga: " + knyga.pavadinimas);
}
}Pridėta knyga: Mažasis princas
- Sukuriamas konkretus
Knygaobjektas su pavadinimu Mažasis princas. - Per šį objektą iškviečiamas metodas
pridetiIBiblioteka(). - Metodo viduje
thisreiškia būtent tą knygos objektą. - Objektas perduodamas kaip argumentas statiniam metodui
Biblioteka.prideti(). - Bibliotekos metodas gauna knygą, perskaito jos pavadinimą ir parodo jį konsolėje.
Dažniausios this formos
| Forma | Paskirtis |
|---|---|
this.atributas | Pasiekti dabartinio objekto atributą |
this.metodas() | Iškviesti dabartinio objekto metodą |
this(...) | Iškviesti kitą tos pačios klasės konstruktorių |
kitasMetodas(this) | Perduoti dabartinį objektą kaip argumentą |

