Programmeerimiskeel Java/Meetodid

Allikas: Vikiõpikud

Meetodi Definitioon[muuda]

Meetod on objekti operatsioon. Objekt on üks eksemplar klassist. Kui me defineerime klassi, siis defineerime klassi liikmes muutujad ja meetodid. Igale meetodile tuleb anda nimi, defineerida tema sisendparameetrid ja määrata mis tüüpi väärtus ta tagastama hakkab. Tuleb ka määrata meetodi juurdepääsu aste, tuntud ka kui meetodi nähtavuse all(en:visibility), Javas on neid kolm: private, package või public.

Tüüpiline meetodi lausestus oleks:

/** Kirjeldus klassist, mis tehakse, milleks meetodit kasutatakse */
 class MinuKlass{
     /** Kirjeldus meetodist, mis tehakse, milleks meetodit kasutatakse
      * @param p1: Esimene parameeteri kirjeldus
      * @param p2: Teine parameeteri kirjeldus
      * @returns : Kirjeldus mida meetod tagastab
      * TT       : Tagastatav tüüp
      * PT1      : Parameetri tüüp 1
      * PT2      : Parameetri tüüp 2
      */
     public TT MeetodiNimi( PT1 p1, PT2 p2 ) throws ErandjuhtumiNimetus
     {
       TT TagastatavMuutuja;
       /*
         Tegevus, mille käigus TagastatavMuutuja omandab väärtuse
       */
       return TagastatavMuutuja;
     }
     //teised meetodid, alamklassid ja loetelud
}

Saab deklareerida,et meetod ei tagasta väärtus. Selleks kasutatakse Javas void võtmesõna. Näide:

/** Kirjeldus meetodist, mis tehakse, milleks meetodit kasutatakse */
private void MeetodiNimi( String param1, String param2 ){
  /* Tegevus */
  return;
}

Kui meetod ei tagasta parameetreid, ei pea lõppu lisama tühja return'i, kuid teda saab kasutada antud meetodist väljumiseks tegevuse kestel. Antud juhul võite meetodi eest leida juurdepääsu astme private, selle juurdepääsu astme annaks kompilaator automaatselt, kui see oleks jäänud märkimata.

Mis vahe on klassi elemendi meetoditel ja klassi meetoditel (st. mida tähendab static)[muuda]

Klassi meetodid on meetodid mis on deklareeritud static võtmesõnaga. Nende meetodite kasutamiseks, ei lähe vaja deklareerida klassi elementi. Klassi meetodid saavad vaid opereerida vaid oma klassi liimetega(mis on ka deklareeritud static võtmesõnaga) ja ei ole teadlikud oms klassi elementide liimetest ja nende väärtustest. Sama klassi elemendi meetodeid ei saa kutsuda välja klassi meetodist, kui see on võimalik, kui see kutsutakse klassi meetodi seest klassi elemendi poolt.

Klassi elemendi meetodid vajavad, et klassi element eksisteeriks enne, kui neid kutsutakse. Selle saab luua new võtmesõnaga. Elemendi meetodid opereerivad kindlatel klassi elementidel(ja elemendid võivad omada erinevaid väärtuseid). Elemendi meetodeid ei deklareerita static võtmesõnaga.

Meetodi parameetrite ületäidetavus[muuda]

Me võime samas klassis defineerida kaks või enam meetodit, mis omavad sama nime. Samas klassis defineeritud sama nime jagavad meetodid peavad erinema üksteisest, kas parameetrite arvukuse ja/või -tüübidega. Java terminoloogias kutsutakse seda meetodi parameetrite ületäidetavuseks(en:method overloading). Java ei nõua eraldi võtmesõna meetoditele mis jagavad sama nime samas klassis.

Uut klassi elementi ehitav meetod[muuda]

On olemas spetsiaalne klassi ehitav meetod, mis täidetakse, kui element sellele klassi luuakse. Tähelepanu, et elemendi saab luua Javas võtmesõnaga new. Kui klassi elementi või selle elemendi meetodeid ja muutujaid on vaja kasutada pikemal perioodil, kui hetk, millal elemnt loodi, tuleb ta väärtus anda muutujale. Muutuja tüüp peab olema klassi tüüp või tüüp millest klassi tüüp on pärinenud. Uut klassi elementi ehitav meetod omab parameetritega ületäidetavuse võimalust. Uut klassi elementi ehitav meetod omab sama nimetust, mis klass.

Juba muutujat deklareerides on tihti võimalik uus objekt algväärtustada, mitte lihttüüpide puhul tähendab see, et elementi ehitavale meetodile antakse parameetreid, mille põhjal objekt omandab staatuse muutuse ja on väärtustatud. Uut klassi elementi ehitav meetod aga ei pea tingimata saama parameetreid, ta võib seada objektili kindla staatuse või ise pärida endale endmed staatuse omandamiseks.

public class MinuKlass
{
  private String liikmesMuutuja;
  /**
   * Uut MinuKlass elementi ehitav meetod, talle ei ole antud parameetreid  
   */
  public MinuKlass()
  {
     liikmesMuutuja = "Tere Inimene";
  }
  /**
   * Uut MinuKlass elementi ehitav meetod, talle antakse 1 parameeter
   */
  public MinuKlass( String param1 )
  {
     liikmesMuutuja = "Tere " + param1;
  }
  public String Väljund()
  {
     return liikmesMuutuja;
  }
}

Antud juhul, on 2 MinuKlass'i klassi elementi ehitavat meetodit, millest vaid üks leiab kasutust, ning see sõltub kas talle antakse argumentidks sõne või ei anta midagi.

{ 
   ...
   /* Muutuja obj1 deklaratsioon tüübina MinuKlass, 
    * ning algväärtustamine uue MinuKlass tüüpi elemendiga.
    *
    * Antud juhul ei anta parameetreid ja "new MinuKlass()"
    * käivitatakse uut MinuKlass elementi ehitav meetod,
    * mis ei nõudund parameetreid, st. privaatmuutuja
    * liikmesMuutuja saab väärtuseks "Tere Inimene";   
    */ 
   MinuKlass obj1 = new MinuKlass();
   /* Muutuja obj2 deklaratsioon tüübina MinuKlass, 
    * ning algväärtustamine uue MinuKlass tüüpi elemendiga.
    *
    * Antud juhul ei antakse parameeter ja "new MinuKlass()"
    * käivitatakse uut MinuKlass elementi ehitav meetod,
    * mis soovis sõne argumenti, st. privaatmuutuja
    * liikmesMuutuja saab väärtuseks "Tere Loom";   
    */               
   MinuKlass obj2 = new MinuKlass("Loom");  
   ...
}