OBJEKTINIS PROGRAMAVIMAS
Java klasės metodai
Klasės metodai aprašo objektų veiksmus ir elgseną. Jie gali skaityti arba keisti objekto atributus, priimti parametrus ir grąžinti apskaičiuotas reikšmes.
Kas yra klasės metodas?
Metodas deklaruojamas klasės viduje ir turi pavadinimą, parametrų skliaustus, grąžinamąjį tipą bei kodo bloką. Šis metodas aprašo paprastą knygos atvertimo veiksmą:
public class Knyga {
void atversti() {
System.out.println("Knyga atversta");
}
}Metodas atversti() tik aprašytas, bet niekur neiškviestas. Vien metodo deklaracija jo kodo nepaleidžia.
- Metodas deklaruotas klasės
Knygaviduje. voidreiškia, kad metodas neatiduoda apskaičiuotos reikšmės.atverstiyra veiksmažodžiu prasidedantis metodo pavadinimas.- Tušti skliaustai
()rodo, kad metodui nereikia parametrų. - Kodas tarp riestinių skliaustų bus vykdomas tik tada, kai metodą iškviesime.
Metodo iškvietimas per objektą
Egzemplioriaus metodui iškviesti pirmiausia sukuriamas objektas, o tada naudojamas taško operatorius:
public class Knyga {
void atversti() {
System.out.println("Knyga atversta");
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.atversti();
}
}Knyga atversta
- Su
new Knyga()sukuriamas konkretus knygos objektas. - Kintamasis
knygasaugo nuorodą į tą objektą. - Taško operatorius išraiškoje
knyga.atversti()pasirenka šio objekto metodą. - Metodas įvykdo savo
println()eilutę, todėl konsolėje matome Knyga atversta.
Metodai valdo objekto būseną
Egzemplioriaus metodas tiesiogiai pasiekia to paties objekto atributus:
public class Knyga {
int perskaitytaPuslapiu = 0;
boolean baigta = false;
void perskaitytiDesimtPuslapiu() {
perskaitytaPuslapiu += 10;
if (perskaitytaPuslapiu >= 10) {
baigta = true;
}
}
void rodytiBusena() {
System.out.println("Perskaityta: " + perskaitytaPuslapiu);
System.out.println("Baigta: " + baigta);
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.perskaitytiDesimtPuslapiu();
knyga.rodytiBusena();
}
}Perskaityta: 10
Baigta: true
- Naujo objekto atributai pradžioje yra
0perskaitytų puslapių irfalse. - Metodas
perskaitytiDesimtPuslapiu()prie atributo prideda10. - Sąlyga patikrina naują reikšmę. Kadangi ji pasiekė
10, atributasbaigtapakeičiamas įtrue. - Metodas
rodytiBusena()perskaito jau pakeistus to paties objekto atributus. - Todėl konsolėje matome
10irtrue.
Klasės metodai su parametrais
Parametrai leidžia tam pačiam objekto metodui atlikti veiksmą su skirtingais duomenimis:
public class Knyga {
int perskaitytaPuslapiu = 0;
void skaityti(int puslapiai) {
perskaitytaPuslapiu += puslapiai;
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.skaityti(25);
knyga.skaityti(15);
System.out.println(knyga.perskaitytaPuslapiu);
}
}40
- Metodas
skaityti()turi parametrąpuslapiai. - Pirmas iškvietimas perduoda
25, todėl objekto atributas padidėja nuo0iki25. - Antras iškvietimas perduoda
15ir prie esamos reikšmės prideda dar 15. - Abu iškvietimai keičia tą patį
knygaobjektą, todėl gauname25 + 15 = 40.
Klasės metodai su grąžinamąja reikšme
Vietoje void galima nurodyti rezultato tipą ir grąžinti reikšmę su return:
public class Knyga {
int perskaitytaPuslapiu = 96;
int puslapiuSkaicius = 96;
boolean arBaigta() {
return perskaitytaPuslapiu >= puslapiuSkaicius;
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
System.out.println(knyga.arBaigta());
}
}true
- Objektas turi
96perskaitytus puslapius ir iš viso96puslapius. - Metodas
arBaigta()palygina šias dvi atributo reikšmes. - Sąlyga
96 >= 96yra teisinga. returngrąžina loginę reikšmętrue.println()parodo metodo grąžintą rezultatą konsolėje.
Tas pats metodas, skirtingi objektai
Kiekvienas objektas metodą vykdo su savo atributų reikšmėmis:
public class Knyga {
int perskaitytaPuslapiu = 0;
void skaityti(int puslapiai) {
perskaitytaPuslapiu += puslapiai;
}
public static void main(String[] args) {
Knyga pirma = new Knyga();
Knyga antra = new Knyga();
pirma.skaityti(20);
System.out.println("Pirma: " + pirma.perskaitytaPuslapiu);
System.out.println("Antra: " + antra.perskaitytaPuslapiu);
}
}Pirma: 20
Antra: 0
- Sukuriami du nepriklausomi
Knygaobjektai. - Abiejų pradinis perskaitytų puslapių skaičius yra
0. - Metodas
skaityti(20)iškviečiamas tik per pirmą objektą. - Todėl pirmo objekto atributas tampa
20, o antro objekto atributas lieka0. - Metodas keičia tik tą objektą, per kurį buvo iškviestas.
Pirmos knygos perskaitytų puslapių skaičius padidėja, o antros knygos būsena lieka nepakitusi.
Egzemplioriaus ir static metodai
public class Knyga {
String pavadinimas = "Mažasis princas";
void rodytiPavadinima() {
System.out.println(pavadinimas);
}
static void rodytiBiblioteka() {
System.out.println("Miesto biblioteka");
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.rodytiPavadinima();
Knyga.rodytiBiblioteka();
}
}Mažasis princas
Miesto biblioteka
rodytiPavadinima()yra egzemplioriaus metodas, nes naudoja konkretaus objekto atributąpavadinimas.- Todėl jis iškviečiamas per objektą:
knyga.rodytiPavadinima(). rodytiBiblioteka()pažymėtasstaticir nepriklauso vienai konkrečiai knygai.- Jis iškviečiamas per klasės pavadinimą:
Knyga.rodytiBiblioteka(). - Konsolėje pirmiausia matome konkrečios knygos pavadinimą, o tada bendrą bibliotekos pavadinimą.
| Metodo rūšis | Priklauso | Įprastas iškvietimas |
|---|---|---|
| Egzemplioriaus | Konkrečiam objektui | knyga.rodytiPavadinima() |
static | Pačiai klasei | Knyga.rodytiBiblioteka() |
static metodas tiesiogiai nepasiekia konkretaus objekto egzemplioriaus atributų, nes nėra susietas su vienu objektu.
Aiškių metodų kūrimas
- Suteik metodui veiksmą nusakantį camelCase pavadinimą.
- Vienas metodas turėtų turėti vieną aiškią atsakomybę.
- Objekto būseną keisk tik tada, kai tai atitinka metodo paskirtį.
- Sudėtingą metodą suskaidyk į mažesnius pagalbinius metodus.
- Parametrams ir grąžinamoms reikšmėms rinkis tikslius tipus.

