JavaRush /Java Blogu /Random-AZ /Java-da üsullar
articles
Səviyyə

Java-da üsullar

Qrupda dərc edilmişdir
Java-da üsullar - 1Java-da proqram siniflərdən ibarətdir. Siniflər də öz növbəsində dəyişənlərdən ibarətdir. Onlar sinifin davranışına cavabdeh olan məlumatların və metodların saxlanmasına cavabdehdirlər: başqa sözlə, onun təmin edə biləcəyi məntiq (məsələn, bəzi məlumatların işlənməsi, digər metodların çağırılması və s.). Dəyişənlər kimi komponentlər haqqında uzun müddət danışa bilərik, lakin bu gün toplaşmağımızın səbəbi bu deyil. Bir metod kimi sinfin belə bir komponenti haqqında daha yaxşı danışaq. Java-da üsullar - 2Metod sinif daxilində elan edilmiş kod blokudur. O, təkrar istifadə oluna bilən ayrı bir problemin həllinə yönəlmiş müəyyən bir tam hərəkət ardıcıllığını (təlimatlarını) ehtiva edir. Başqa sözlə, metod bir funksiyadır: sinifinizin edə biləcəyi bir şey. Digər dillərin də funksiyaları var. Yalnız Java-da onlar siniflərin üzvləridir və OOP terminologiyasına görə metodlar adlanır. Ancaq davam etməzdən əvvəl kiçik bir nümunəyə baxaq:
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
Burada mürəkkəb bir şey yoxdur: vəzifəsi ona ötürülən adla salamlama sətri yaratmaq olan Java metodu. Məsələn, kimi - Hello world! My name is Bobby Metod bəyannaməsində hər bir açar sözə baxaraq (soldan sağa) metodun qurulmasını düzgün başa düşək. İlk açar sözümüz public, və o, giriş dəyişdiricisini ifadə edir:

Modifikatorlara giriş

Onlar sinif üzvləri üçün icazə verilən görmə sahəsini, yəni dəyişənin və ya metodun istifadəsinə icazə verilən yerlərin məhdudlaşdırılmasını göstərir. Java-da üsullar - 3Java-da aşağıdakı giriş modifikatorlarından istifadə olunur:
  • ictimai : ictimai. Bu dəyişdirici ilə metodlar və ya sahələr açıqdır, digər siniflər (daha doğrusu, onların metodları və sahələri) cari paketdən və xarici paketlərdən görünür. Bu, məlum olan ən geniş giriş səviyyəsidir;

  • protected : bu dəyişdirici ilə metod və ya dəyişənlərə cari sinif və ya paketin istənilən yerindən və ya bunu miras qoyan siniflərdən, eləcə də digər paketlərdə olsalar belə, metod və ya sahələrdən daxil olmaq olar.

    protected String constructHelloSentence(String name) {...}
  • Defolt dəyişdirici. Sinif sahəsi və ya metodunun dəyişdiricisi yoxdursa, defolt dəyişdirici tətbiq edilir. Bu halda, sahələr və ya üsullar cari paketdəki bütün siniflərə görünür (məsələn, qorunan kimi , lakin miras alındıqda görünmür).

    String constructHelloSentence(String name) {...}
  • özəl : ictimai dəyişdiricinin əksi . Belə dəyişdiricisi olan metod və ya dəyişən yalnız elan olunduğu sinifdə mövcuddur.

    private String constructHelloSentence(String name) {...}
StringSonra metodun imzasında (xassələrini təsvir edən metodun birinci sətri) var .

Dəyəri qaytarın

Qaytarma dəyəri zəngdən sonra yerinə gələn verilənlərdir (metodun icrasının bəzi nəticəsi). Hər bir metodun qaytarma dəyəri var. Yoxsa yox?

Qaytarma Dəyəri Metodları

Bu dəyər istənilən növ məlumat ola bilər: sadə tipli dəyişən və ya istinad tipi. StringBu misalda metodun , xatırladığımız kimi, sətri təsvir edən sinif olan tipli obyekti qaytarmalı olduğunu göstəririk . Burada ikinci məqam sözdür return. Onun qaytarılan dəyərlə birbaşa əlaqəsi var: ondan sonrakı dəyər metodun çağırıldığı yerə geri göndəriləcək və metodun özü bağlanacaq return. Bu söz adətən metodun son sətirində görünür ( if, else... kimi müxtəlif qollu üsullar istisna olmaqla). Əgər kodu aşağıdakı sətirdən sonra yazsanız return:
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
onda biz kompilyatordan lənətlər alacağıq, bu çox yaxşı deyil (tərtibçi cəfəngiyyatı tövsiyə etməyəcək). Siz həmçinin yadda saxlamalısınız ki, sonrakı məlumat növü сmetod imzasında elan edilənə uyğun olmalıdır. Haqqında daha çox returnoxuyun .

boş

Java-da nə üçün istifadə olunur void? Bütün metodların qaytarılma dəyəri yoxdur. Bəzilərinin ya heç nəyi yoxdur, ya da heç nəyi geri qaytarmağa ehtiyac yoxdur. Onda nə etməli? Sonra metodda imza yazırıq void. Qaytarma dəyəri olmadan metodumuz necə görünəcək?
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
Yəqin fikir vermisiniz ki, qaytarılan dəyərlə yanaşı, returnSo it is sözü də itib, çünki bizim metodumuz heç nə qaytarmamalıdır. Bununla belə, bura yerləşdirilə bilər, lakin heç bir mənası olmadan, yalnız return; son sətirdə. Bu ümumiyyətlə faydasızdır, ona görə də voidmetodlarda isteğe bağlıdır. voidBununla belə, metoddan dərhal çıxmaq istədiyiniz budaqlar və ya döngələr kimi üsullarda faydalı şəkildə istifadə edilə bilər . Sonrakı üsul bəyannaməsi bizdə idi constructHelloSentence.

Metod adları

constructHelloSentence - metodun adı, bu və ya digər metodu ayırd edə biləcəyimiz fərqli xüsusiyyət. Və müvafiq olaraq, bu və ya digər metodu çağırın. Java-da üsullar - 4Metod adları kiçik hərflə başlamalıdır, həm də dəvə qutusundan istifadə etməlidir (CamelCase, camel case): i.e. Addakı hər növbəti söz əvvəlki ilə bitişikdir və böyük hərflə yazılır. Metod adları metodu təsvir etməlidir (ən yaxşı şərh düzgün adlandırmadır). Bunun üçün fellərdən və ya fellərlə birləşmələrdən istifadə edin: getCat, delete, createCar, və s. Bir sinif daxilində metod adları unikal olmalıdır (bir az sonra danışacağımız metodun həddən artıq yüklənməsi nəzərə alınmır). Gəlin təhlil etdiyimiz metoda daha çox nəzər salaq və görək ( String name)

Metod parametrləri

Metodlar kənardan, yəni metodun çağırıldığı yerdən gələcək müəyyən məlumatlara malik ola bilər (ya da olmaya bilər). Bizim vəziyyətimizdə Stringadı olan tip obyektinin gəldiyini görürük namevə daha sonra metodumuzda bu dəyişəndən istifadə edirik. Metodda qeyri-məhdud sayda parametrlərdən istifadə edə bilərsiniz, lakin 7-dən çoxu tövsiyə edilmir. Elementlərin dəqiq sayını bilmədikdə, lakin bütün bu elementlər eyni məqsəd üçün lazım olduqda və eyni tipdə olacaqsa (məsələn, String), ellipsis istifadə olunur:
public void constructHelloSentence(String...name) {
 ...
}
Hər bir elementə müraciət belə olacaq: name[0] Bu sizə nəyisə xatırladırmı? Düzdü, serial! Yazsaq, heç nə dəyişməyəcək:
protected void constructHelloSentence(String[] name) {
 ...
}
Elementlərə giriş də aşağıdakı formada olacaq: name[1] Və daha bir şey. Metod arqumentləri yekun ola bilər :
public String constructHelloSentence(final String name) {
  ...
}
Bu o deməkdir ki, ad istinadı konkret obyektə bağlıdır Stringvə onu ləğv etmək olmaz. İstinad dəyişənləri ilə işləmək və onların qorunan sözlərlə qarşılıqlı əlaqəsi haqqında “ Java-da istinad məlumat növlərifinal ” materialında oxuya bilərsiniz .

Zəng üsulları

Beləliklə, biz üsulların yaradılmasını sıraladıq, indi onlardan istifadə haqqında danışaq. Java-da metodu necə çağırmaq olar? Java-da üsullar - 5Java-da hər bir metod bir sinifdədir. Java-da çağırış metodlarının necə işlədiyini başa düşmək üçün gəlin bir sinfə keçək:
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Metodumuz statik olmadığından (bu, bugünkü məqalənin əhatə dairəsindən kənara çıxan ayrı bir müzakirə mövzusudur), onu çağırmaq üçün əvvəlcə obyekt yaratmalı və sonra onun üzərində metodu çağırmalısınız:
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
Metodumuzun arqumentlərində ekranda görünən nəticədə görmək istədiyimiz sətri (ad) keçdik:

Hello world! My name is Den
Həm də yadda saxlamaq lazımdır ki, üsullar ehtiyac duyduğumuz qədər təkrar istifadə edilə bilər - heç bir məhdudiyyət yoxdur.

bu

thisAçar sözü tez-tez tənzimləyicilərdə olduğu kimi kodda görə bilərsiniz :
public void setValue(Long value) {
   this.value = value;
}
Və bu nə deməkdir? thisJava-da bu, bu sinfin cari obyektinə istinaddır. Məsələn, bir obyekt yaratsaq:
StringConstructor stringConstructor = new StringConstructor();
sonra thisobyektin daxilində stringConstructoreyni obyektə keçid olacaq. thishəm obyekt dəyişəninə istinad etmək üçün (yuxarıdakı təyinedicidə olduğu kimi), həm də hansısa metodu çağırmaq üçün istifadə olunur. Sinifimizi bir az yenidən yaza bilərik:
public class StringConstructor {

  public String constructHelloSentence(String name) {
     String resultSentence = this.getSentence()  + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  private String getSentence() {
     return "Hello world! My name is ";
  }
}
Vasitəsilə thisbiz tələb olunan sətiri götürmək üçün bu obyektin metodunu çağırırıq. Ancaq yenə də, bir qayda olaraq, bu üsullar üçün demək olar ki, istifadə edilmir, çünki onsuz da müəyyən bir obyektin metoduna istinad var; o, əsasən obyekt dəyişəni üçün istifadə olunur.

Metodun həddindən artıq yüklənməsi

Tutaq ki, bizə mahiyyətcə eyni məntiqi yerinə yetirən metod lazım idi, lakin Hello world! əvəzinə worldbiz öz sözümüzü (simli) daxil etmək istəyirik. Amma artıq bir üsulumuz var constructHelloSentence. Beləliklə, mahiyyətcə eyni funksionallığı yerinə yetirən bir metod üçün yeni bir ad tapmalıyıq? Necə olursa olsun: bu anda metodun həddindən artıq yüklənməsi köməyimizə gəlir. Java-da üsullar - 7Metodun həddən artıq yüklənməsi, eyni metod adının bir sinifdə elan edilərkən bir neçə dəfə istifadə edilməsidir. Dil sintaksisi baxımından bəzi lokal məkanda iki eyni ad ola bilməz. Ancaq eyni adlarla, lakin fərqli arqumentlərlə üsulları elan etmək də mümkündür. Başqa sözlə, eyni adlara malik iki və ya daha çox metod, lakin fərqli giriş məlumatları olduqda sinif həddindən artıq yüklənmələri ehtiva edir:
public class Constructor {

  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }

  protected String constructHelloSentence(String firstName, String secondName) {
     String resultSentence = "Hello " + firstName + "! My name is " + secondName;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Burada görürük ki, metodlarda eyni giriş modifikatoru (həmçinin qaytarma növü) olmamalıdır. Həddindən artıq yüklənmiş metod çağırılırsa, onda bir neçə elan edilmiş metoddan kompilyator avtomatik olaraq zəng zamanı göstərilən parametrlərə əsasən tələb olunanı müəyyən edir.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION