Java metode: razlika i primena instancnih, statičkih i apstraktnih metoda
U ovoj sekciji ćemo se upoznati sa metodama u Javi — šta je metoda? Kako se metoda deklariše? Koje vrste metoda postoje? Šta je instancna metoda? Šta je statička metoda? Šta je apstraktna metoda? Šta je lokalna metoda?
01. Šta je metoda u Javi?
Metode služe za postizanje ponovne iskoristivosti koda — metodu napišemo jednom i koristimo je više puta. Dodavanjem ili uklanjanjem dela koda unutar metode može se poboljšati čitljivost celokupnog koda.
Metoda se izvršava tek kada bude pozvana. Najpoznatija metoda u Javi je main(), ulaz u program.
02. Kako deklarisati metodu?
Deklaracija metode odražava neke podatke o njoj, na primer vidljivost, povratni tip, ime metode i argumente. Kao na slici ispod.

Pravo pristupa: ono određuje vidljivost metode. Java nudi četiri modifikatora prava pristupa:
- public: metoda može da joj pristupaju sve klase.
- private: metodi se može pristupiti samo iz klase u kojoj je definisana.
- protected: metodi mogu da pristupaju klase iz istog paketa, ili potklase iz drugih paketa.
- default: ako metoda ne koristi nijedan modifikator prava pristupa, onda je package-private, što znači da je metoda vidljiva samo klasama u istom paketu.
Povratni tip: tip podataka koji metoda vraća, može biti primitivni tip, objekat ili kolekcija; ako ne treba da vraća podatke, koristi se ključna reč void.
Ime metode: ime metode najbolje da odražava funkciju metode. Na primer, ako želimo da napravimo metodu koja oduzima dva broja, najbolje je da se zove subtract.
Ime metode najbolje da bude glagol i da počinje malim slovom. Ako ime metode sadrži dve ili više reči, prva reč najbolje da bude glagol, zatim pridev ili imenica, i ime treba pisati u camelCase notaciji. Na primer:
- ime metode od jedne reči:
sum() - ime metode od više reči:
stringComparision()
Metoda može imati isto ime kao druga metoda u istoj klasi — to se naziva preopterećenje metode (method overloading).
Argumenti: argumenti se nalaze unutar okruglih zagrada; ako ih ima više, mogu se razdvojiti zarezom. Argument se sastoji iz dva dela — tipa argumenta i imena argumenta. Ako metoda nema argumenata, zagrade su prazne.
Potpis metode: svaka metoda ima potpis, koji čine ime metode i argumenti.
Telo metode: telo metode se nalazi unutar vitičastih zagrada i obuhvata deo koda kojim se izvršava određeni zadatak.
03. Koje vrste metoda postoje?
Metode se mogu podeliti u dve vrste: metode standardne biblioteke i korisnički definisane metode.
1) Unapred definisane metode
Java obezbeđuje veliki broj unapred definisanih metoda koje možemo pozivati, poznatih i kao metode standardne biblioteke ili ugrađene metode. Na primer, metode length(), equals(), compare() klase String, kao i metoda println() koju u početnoj fazi učenja Jave najčešće koristimo za štampanje poruka u konzoli.
/**
* @author WeChat pretraga "Chenmo Wang Er", odgovorite ključnu reč PDF
*/
public class PredefinedMethodDemo {
public static void main(String[] args) {
System.out.println("Chenmo Wang Er, jedan zanimljiv programer");
}
}U gornjem kodu koristimo dve unapred definisane metode — main() je ulaz u izvršavanje programa, a println() je metoda klase PrintStream. Ove metode su već unapred definisane, pa ih možemo neposredno koristiti.
Preko razvojnog okruženja možemo videti potpis unapred definisane metode — kada miša zadržimo iznad metode println(), prikazaće se sadržaj sa sledeće slike:

Modifikator prava pristupa metode println() jeste public, povratni tip je void, ime metode je println, argument je String x, i postoji Javadoc (čemu metoda služi).
Unapred definisane metode su pojednostavile programiranje — kada treba da ostvarimo neku funkcionalnost, dovoljno je da pozovemo te metode, bez potrebe da ih ponovo pišemo.
Velika prednost Jave jeste što nam dizajneri (razvojni tim) JDK-a obezbeđuju ogroman broj metoda standardne biblioteke, što je početnicima u programiranju izuzetno prijateljski nastrojeno; osim toga, na GitHub-u i Gitee-ju postoji mnogo biblioteka trećih strana koje se mogu neposredno koristiti u produkciji, na primer hutool, Apache paketi, biblioteke koje doprinose vodeće kompanije ili vrhunski programeri, poput Druid, Gson i slično.
Ali ako želite od običnog programera (tzv. onog koji samo poziva tuđe biblioteke) da postanete odličan Java inženjer, treba da detaljno proučite taj izvorni kod, da ga savladate, a najbolje da ga sami napišete, ili bar da prilagodite deo koda za sopstvene potrebe.
2) Korisnički definisane metode
Kada unapred definisane metode ne mogu da zadovolje naše potrebe, moramo sami da definišemo neke metode. Na primer, definišimo metodu koja proverava da li je broj paran ili neparan.
public static void findEvenOdd(int num) {
if (num % 2 == 0) {
System.out.println(num + " je paran");
} else {
System.out.println(num + " je neparan");
}
}Metoda se zove findEvenOdd, modifikator prava pristupa joj je public, statična je (static), povratni tip joj je void, i ima jedan argument tipa int — num. U telu metode nalazi se if-else iskaz: ako je num deljiv sa 2, štampa se da je broj paran, inače se štampa da je neparan.
Kada je metoda definisana, kako se poziva?
/**
* @author WeChat pretraga "Chenmo Wang Er", odgovorite ključnu reč PDF
*/
public class EvenOddDemo {
public static void main(String[] args) {
findEvenOdd(10);
findEvenOdd(11);
}
public static void findEvenOdd(int num) {
if (num % 2 == 0) {
System.out.println(num + " je paran");
} else {
System.out.println(num + " je neparan");
}
}
}Metoda main() jeste ulaz u program i statična je, pa se može neposredno pozvati i statična metoda findEvenOdd().
Kada je metoda modifikovana ključnom reči static, ona je statička metoda. Drugim rečima, statička metoda pripada klasi, a ne instanci klase (ne mora se pozivati preko objekta kreiranog ključnom reči new, već se može pozvati neposredno preko imena klase).
04. Šta je instancna metoda?
Metoda koja nije modifikovana ključnom reči static, ali je deklarisana u klasi, naziva se instancnom metodom. Pre nego što se instancna metoda pozove, mora se kreirati objekat klase.
/**
* @author WeChat pretraga "Chenmo Wang Er", odgovorite ključnu reč PDF
*/
public class InstanceMethodExample {
public static void main(String[] args) {
InstanceMethodExample instanceMethodExample = new InstanceMethodExample();
System.out.println(instanceMethodExample.add(1, 2));
}
public int add(int a, int b) {
return a + b;
}
}Metoda add() jeste instancna metoda i zahteva kreiranje objekta klase InstanceMethodExample da bi joj se pristupilo.
Instancne metode imaju dva posebna oblika:
- getter metoda
- setter metoda
Getter metoda služi za dobijanje vrednosti privatnih promenljivih (polja modifikovanih sa private), a setter metoda za postavljanje vrednosti privatnih promenljivih.
/**
* @author Chenmo Wang Er, jedan zanimljiv programer
*/
public class Person {
private String name;
private int age;
private int sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}Getter metoda počinje sa get, a setter metoda sa set.
05. Šta je statička metoda?
Slično tome, metoda modifikovana ključnom reči static zove se statička metoda.
/**
* WeChat pretraga "Chenmo Wang Er", odgovorite Java
*
* @author Chenmo Wang Er
* @date 8/9/22
*/
public class StaticMethodExample {
public static void main(String[] args) {
System.out.println(add(1,2));
}
public static int add(int a, int b) {
return a + b;
}
}U klasi StaticMethodExample i metoda main i metoda add su statičke; razlika je što je metoda main ulaz u program. Kada pozivamo statičku metodu, ne moramo da kreiramo objekat klase sa new, već možemo neposredno pozvati statičku metodu. Metode u alatnim klasama (utility) su statičke, na primer u alatnoj biblioteci hutool postoji veliki broj statičkih metoda koje se mogu neposredno pozivati.
Cilj alata Hutool jeste da jedna metoda zameni kompleksan kod, čime se u najvećoj meri izbegava problem „kopiraj-nalepi“ koda i potpuno menja način na koji pišemo kod.
Na primer, za izračunavanje MD5:
- Starije doba: otvorite pretraživač -> tražite „Java MD5 enkripcija“ -> otvorite neki blog -> kopirate i nalepite -> malo doterate da radi
- Novije doba: uključite Hutool -> SecureUtil.md5()
Hutool postoji upravo da smanji trošak pretrage koda i izbegne bugove koji nastaju zbog nejednakog kvaliteta koda na internetu.
06. Šta je apstraktna metoda?
Metoda bez tela naziva se apstraktnom metodom i uvek se deklariše u apstraktnoj klasi. To znači da, ako klasa ima apstraktnu metodu, ta klasa mora biti apstraktna. Ključna reč abstract može se koristiti za kreiranje apstraktne metode i apstraktne klase.
/**
* @author WeChat pretraga "Chenmo Wang Er", odgovorite ključnu reč PDF
*/
abstract class AbstractDemo {
abstract void display();
}Kada klasa nasledi apstraktnu klasu, mora prepisati apstraktnu metodu:
/**
* @author WeChat pretraga "Chenmo Wang Er", odgovorite ključnu reč PDF
*/
public class MyAbstractDemo extends AbstractDemo {
@Override
void display() {
System.out.println("Prepisana apstraktna metoda");
}
public static void main(String[] args) {
MyAbstractDemo myAbstractDemo = new MyAbstractDemo();
myAbstractDemo.display();
}
}Izlaz je sledeći:
Prepisana apstraktna metoda„To bi bilo sve o metodama. Kada savladaš klase, promenljive i metode, u suštini možeš da postaneš programer Jave na početničkom nivou“, nastavio sam sa osmehom. „Samo napred!“
„Važi, hvala ti, Erge, na pažljivom objašnjenju.“
