OBJEKTINIS PROGRAMAVIMAS
Java konstruktoriai
Konstruktorius yra specialus klasės elementas, kuris automatiškai iškviečiamas kuriant naują objektą. Jis nustato pradines objekto atributų reikšmes ir paruošia objektą naudojimui.
Kas yra konstruktorius?
Konstruktorius panašus į metodą, tačiau turi dvi svarbias taisykles:
- jo pavadinimas turi tiksliai sutapti su klasės pavadinimu;
- prieš jo pavadinimą nerašomas grąžinamasis tipas – net
void.
public class Knyga {
String busena;
Knyga() {
busena = "Neskaityta";
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
System.out.println(knyga.busena);
}
}Neskaityta
- Konstruktoriaus pavadinimas
Knygatiksliai sutampa su klasės pavadinimu. - Prieš konstruktoriaus pavadinimą nėra nei
void, nei kito grąžinamojo tipo. - Išraiška
new Knyga()sukuria naują objektą ir automatiškai paleidžia konstruktorių. - Konstruktorius į objekto atributą
busenaįrašo tekstą Neskaityta. - Po objekto sukūrimo
println()parodo jau nustatytą pradinę būseną.
Konstruktorius su parametrais
Parametrai leidžia kuriant objektą iš karto perduoti jam reikalingas pradines reikšmes:
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
- Konstruktorius laukia dviejų duomenų: knygos pavadinimo ir puslapių skaičiaus.
- Kuriant objektą perduodami argumentai Mažasis princas ir
96. this .pavadinimasreiškia kuriamo objekto atributą, o dešinėje esantispavadinimas– parametrą.- Taip abu perduoti duomenys išsaugomi naujame objekte.
- Po konstruktoriaus darbo konsolėje galima parodyti jau paruošto objekto atributus.
this nurodo kuriamą objektą.this.pavadinimas yra objekto atributas, o dešinėje esantis pavadinimas – konstruktoriaus parametras.
Skirtingi objektai iš vieno konstruktoriaus
Tas pats konstruktorius gali inicializuoti daug objektų skirtingais argumentais:
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 pirma = new Knyga("Mažasis princas", 96);
Knyga antra = new Knyga("Pepė Ilgakojinė", 160);
System.out.println(pirma.pavadinimas + ": " + pirma.puslapiuSkaicius);
System.out.println(antra.pavadinimas + ": " + antra.puslapiuSkaicius);
}
}Mažasis princas: 96
Pepė Ilgakojinė: 160
- Pirmas
new Knyga(...)iškvietimas sukuria objektą su pavadinimu Mažasis princas. - Antras iškvietimas sukuria kitą objektą su pavadinimu Pepė Ilgakojinė.
- Abu kartus vykdomas tas pats konstruktorius, tačiau jam perduodami skirtingi argumentai.
- Kiekvienas objektas išsaugo savo pavadinimą ir puslapių skaičių.
- Todėl konsolėje matome dvi skirtingas knygas.
Keli klasės konstruktoriai
Klasė gali turėti kelis konstruktorius, jei skiriasi jų parametrų skaičius arba tipai. Tai vadinama
public class Knyga {
String pavadinimas;
int puslapiuSkaicius;
Knyga(String pavadinimas) {
this(pavadinimas, 0);
}
Knyga(String pavadinimas, int puslapiuSkaicius) {
this.pavadinimas = pavadinimas;
this.puslapiuSkaicius = puslapiuSkaicius;
}
public static void main(String[] args) {
Knyga bePuslapiu = new Knyga("Užrašų knygelė");
Knyga romanas = new Knyga("Mažasis princas", 96);
System.out.println(bePuslapiu.pavadinimas + ": " + bePuslapiu.puslapiuSkaicius);
System.out.println(romanas.pavadinimas + ": " + romanas.puslapiuSkaicius);
}
}Užrašų knygelė: 0
Mažasis princas: 96
- Pirmasis konstruktorius priima tik knygos pavadinimą.
- Jis su
this(pavadinimas, 0)iškviečia antrą tos pačios klasės konstruktorių ir puslapių skaičiui perduoda numatytąją reikšmę0. - Antrasis konstruktorius priima ir pavadinimą, ir tikrą puslapių skaičių.
- Java pasirenka konstruktorių pagal perduotų argumentų skaičių.
this(...)iškvietimas privalo būti pirmoji konstruktoriaus instrukcija.
Numatytasis konstruktorius
Jei klasėje neparašytas nė vienas konstruktorius, Java kompiliatorius suteikia numatytąjį konstruktorių be parametrų:
public class Knyga {
String pavadinimas;
public static void main(String[] args) {
Knyga knyga = new Knyga();
System.out.println(knyga.pavadinimas);
}
}null
- Klasėje
Knyganeparašytas nė vienas konstruktorius. - Java kompiliatorius automatiškai suteikia tuščią konstruktorių be parametrų.
- Dėl to išraiška
new Knyga()yra leidžiama. - Atributui
pavadinimaspatys reikšmės nesuteikėme, todėl jis gauna numatytąją objektų nuorodų reikšmęnull. println()konsolėje parodo null.
Jei tada vis dar reikia objekto kūrimo be argumentų, tokį konstruktorių reikia deklaruoti patiems.
Konstruktorius ir metodas
| Savybė | Konstruktorius | Metodas |
|---|---|---|
| Pavadinimas | Sutampa su klase | Aprašo atliekamą veiksmą |
| Grąžinamasis tipas | Nerašomas | Privalomas, pavyzdžiui, void ar int |
| Iškvietimas | Automatiškai su new | Kviečiamas pagal pavadinimą |
| Pagrindinė paskirtis | Inicializuoti objektą | Atlikti objekto ar klasės veiksmą |
Konstruktorių naudojimo gairės
- Po konstruktoriaus objektas turėtų būti tinkamos ir nuoseklios būsenos.
- Privalomus duomenis perduok konstruktoriaus parametrais.
- Venk ilgo ar daug išorinių veiksmų atliekančio konstruktoriaus.
- Keliems konstruktoriams bendrą inicializavimą sutelk vienoje vietoje su
this(...).

