Java - Metode


Šta su metode?

U matematici bismo možda proučavali funkcije. Na primjer, f (x) = x2 je funkcija koja vraća kvadratnu vrijednost x.

If x = 2, then f(2) = 4
If x = 3, f(3) = 9
i tako dalje.

Slično tome, u programiranju, funkcija je blok koda koji izvršava određeni zadatak. U objektno orijentiranom programiranju metoda je žargon koji se koristi za funkciju. Metode su vezane za klasu i definišu ponašanje klase. Prije nego što naučimo o metodama, pobrinite se da znate o Java klasama i objektima.



Vrste Java metoda

Zavisno o tome da li je metod definisao korisnik ili je dostupan u standardnoj biblioteci, postoje dvije vrste metoda u Javi:

  • Standardne bibliotičke metode
  • Korisnički definisane metode


Standardne bibliotičke metode

Standardne metode biblioteke su ugrađene metode u Javi koje su lako dostupne za upotrebu. Ove standardne biblioteke dolaze zajedno s Java Class Library (JCL) u datoteci Java arhive (* .jar) s JVM i JRE. Na primjer:

  • print() je metoda java.io.PrintSteam. Metoda print("...") ispisuje string unutar navodnika.
  • sqrt() je metoda matematičke klase. Vraća kvadratni korijen broja.

Pogledajmo primjer kako biste shvatili kako funkcioniše:

public class Main {
    public static void main(String[] args) {
    
        // koristimo sqrt() metodu
        System.out.print("Kvadratni korijen iz 4 je: " + Math.sqrt(4));
    }
}


Korisnički definisana metoda

Možemo stvoriti i metode po vlastitom izboru za izvršavanje nekog zadatka. Takve metode nazivaju se korisnički definisanim metodama.



Kako stvoriti korisnički definisanu metodu?


Evo kako možemo stvoriti metodu u Javi:

public static void myMethod() {
    System.out.println("Moja funkcija je pozvana");
}

Ovdje smo kreirali metodu koja se zove myMethod(). Vidimo da smo prije naziva metode koristili public, static i void.

  • public (javna)- modifikator javnog pristupa. To znači da se metodi može pristupiti s bilo kojeg mjesta. Da biste saznali više, posjetite lekciju Java modifikator pristupa
  • static (statička) - To znači da se metodi može pristupiti bez ikakvih objekata.
  • void - To znači da metoda ne vraća nikakvu vrijednost. O tome ćemo saznati kasnije u ovoj lekciji.

Ovo je jednostavan primjer kako možemo stvoriti metodu. Međutim, kompletna sintaksa definicije metode u Javi je:

modifier static returnType nameOfMethod (parameters) {
    // tijelo metode
}

Ovdje je:

  • modifier (modifikator) - Definiše vrste pristupa bilo da je metoda javna, privatna i tako dalje.

  • static - Ako koristimo static ključnu riječ, može joj se pristupiti bez stvaranja objekata.
  • Na primjer, metoda sqrt() standardne matematičke klase je statična. Zbog toga možemo direktno pozvati Math.sqrt() bez stvaranja instance klase Math.

  • returnType - Određuje koji tip vrijednosti metoda vraća. Na primjer, ako metoda ima int return tip, tada vraća cijelu vrijednost.

  • Metoda može vratiti nativne tipove podataka (int, float, double, itd.), nativne objekte (String, Map, List, itd.) ili bilo koje druge ugrađene i korisnički definisane objekte. Ako metoda ne vrati vrijednost, nje je tip vraćanja nevažeći.

  • nameOfMethod - To je identifikator koji se koristi za upućivanje na određenu metodu u programu.
  • Metodi možemo dati bilo koje ime. Međutim, uobičajenije je imenovati ga prema zadacima koje obavlja. Na primjer, calculateArea(), display() itd.

  • parameters (argumenti) - To su vrijednosti koje se prosljeđuju metodi. Metodi možemo proslijediti bilo koji broj argumenata.

  • method body (tijelo metode) - Uključuje programske izjave koje se koriste za izvršavanje nekih zadataka. Tijelo metode zatvoreno je unutar vitičastih zagrada {}.


Kako pozvati metodu u Javi?

Sad kad znamo kako definisati metode, moramo ih naučiti koristiti. Za to moramo pozvati metodu. Evo kako:

addNumbers();

Ova izjava poziva metodu addNumbers() koja je ranije deklarisana.



Primjer: Java metoda

Pogledajmo kako možemo koristiti metode u Java programu.

class Main {

    public static void main(String[] args) {
        System.out.println("O susretu sa metodom.");

        // pozivanje metode
        myMethod();

        System.out.println("Metoda je uspješno izvršena!");
    }

    // definicija metode
    private static void myMethod(){
        System.out.println("Ispisivanje iz myMethod()!");
    }
}

U gornjem programu imamo metodu nazvanu addNumbers(). Metoda ne prihvata nikakve argumente. Takođe tip povrata metode je void (znači da ne vraća nikakvu vrijednost). Ovdje je metoda statična (static). Zato smo pozvali metodu bez stvaranja objekta klase. Pogledajmo još jedan primjer:

class Main {

    public static void main(String[] args) {

        // kreira objekt klase Output
        Output obj = new Output();
        System.out.println("O susretu sa metodom.");

        // pozivanje myMethod() od Output klase
        obj.myMethod();

        System.out.println("Metoda je uspješno izvršena!");
    }
}

class Output {
  
    // public: ova metoda se može pozvati izvan klase
    public void myMethod() {
        System.out.println("Ispisivanje metode iz myMethod().");
    }
}

U gornjem primjeru stvorili smo metodu myMethod(). Metoda je unutar klase koja se zove Output. Budući da metoda nije statična, poziva se pomoću objekta obj klase.

obj.myMethod();


Argumenti metode i povratna vrijednost

Kao što je ranije spomenuto, Java metoda može imati nula ili više parametara. Takođe može vratiti neku vrijednost.



Primjer: Vraćanje vrijednosti iz metode

Uzmimo primjer metode koja vraća vrijednost.

class SquareMain {
    public static void main(String[] args) {
        int result;

        // pozvati metodu i pohraniti vraćenu vrijednost
        result = square(); 
        System.out.println("Vrijednost kvadrata 10 je: " + result);
    }

    public static int square() {
        // vrati izjavu
        return 10 * 10;
    }
}

U gore navedenom programu stvorili smo metodu koja se zove square(). Ova metoda ne prihvata nikakve argumente i vraća vrijednost 10 * 10. Ovdje smo spomenuli tip povrane metode kao int. Zbog toga bi metoda uvijek trebala vratiti cijelu vrijednost.



Kao što vidimo, opseg ove metode je ograničen, jer uvijek vraća istu vrijednost. Sada, izmijenimo gornji isječak koda, tako da umjesto da uvijek vrati kvadratnu vrijednost 10, on vrati kvadratnu vrijednost bilo kojeg cjelobrojnog broja prosljeđenog metodi.


Primjer: Metoda prihvata argumenate i vraćanja vrijednosti

public class Main {
   
    public static void main(String[] args) {
        int result, n;
        
        n = 3;
        result = square(n);
        System.out.println("Kvadrat od 3 je: " + result);
        
        n = 4;
        result = square(n); 
        System.out.println("Kvadrat od 4 je: " + result);
    }

    // metoda
    static int square(int i) {
        return i * i;
    }
}

Ovdje metoda square() prihvaza argument i i vraća kvadrat i. Vraćena vrijednost pohranjuje se u varijablu rezultat.



Ako dodamo bilo koji drugi tip podataka umjesto int, kompajler će izbaciti grešku. To je zato što je Java jako otkucan jezik. Argument n prosljeđen metodi getSquare() tokom poziva metode naziva se stvarnim argumentom.

result = getSquare(n);

Argument koji samo prihvatili u definiciji metode poznat je kao formalni argument. Tip formalnog argumenta mora biti eksplicitno upisan.

public static int square(int i) {...}

Takođe možemo prosljediti više od jednog argumenta Java metodi pomoću zareza. Na primjer:

public class Main {

    // definisanje metode
    public static int getIntegerSum (int i, int j) {
        return i + j;
    }

    // definisanje metode
    public static int multiplyInteger (int x, int y) {
        return x * y;
    }

    public static void main(String[] args) {

        // pozivanje metode
        System.out.println("10 + 20 = " + getIntegerSum(10, 20));
        System.out.println("20 x 40 = " + multiplyInteger(20, 40));
    }
}


Koje su prednosti upotrebe metoda?


Glavna prednost je ponovna upotreba koda. Metodu možemo napisati jednom i koristiti je više puta. Ne moramo svaki put prepisivati cijeli kod. Shvatite to kao: "napiši jednom, koristi više puta". Na primjer:

public class Main {

    // definisana metode
    private static int getSquare(int x){
        return x * x;
    }

    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {

            // pozivanje metode
            int result = getSquare(i);
            System.out.println("Kvadrat od " + i + " is: " + result);
        }
    }
}

U gore navedenom programu stvorili smo metodu getSquare() za izračunavanje kvadrata broja. Ovdje se ista metoda koristi za izračunavanje kvadrata brojeva manjih od 6. Zato koristimo istu metodu iznova i iznova. Metode čine kod čitljivijim i lakšim za uklanjanje grešaka. Na primjer, metoda getSquare() je toliko čitljiva da možemo znati da će ova metoda izračunavati kvadrat broja.