JavaRush /Java blogi /Random-UZ /Java tilidagi usullar
articles
Daraja

Java tilidagi usullar

Guruhda nashr etilgan
Java tilidagi usullar - 1Java-da dastur sinflardan iborat. Sinflar, o'z navbatida, o'zgaruvchilardan iborat. Ular sinfning xatti-harakati uchun javobgar bo'lgan ma'lumotlar va usullarni saqlash uchun javobgardir: boshqacha qilib aytganda, u taqdim eta oladigan mantiq (masalan, ba'zi ma'lumotlarni qayta ishlash, boshqa usullarni chaqirish va h.k.). Biz bunday komponentlar haqida o'zgaruvchilar sifatida uzoq vaqt gapirishimiz mumkin, ammo shuning uchun biz bugun to'planganimiz yo'q. Keling, metod sifatida sinfning bunday komponenti haqida gapiraylik. Java tilidagi usullar - 2Usul - bu sinf ichida e'lon qilingan nomli kod blokidir. U alohida muammoni hal qilishga qaratilgan, qayta ishlatilishi mumkin bo'lgan muayyan to'liq harakatlar (ko'rsatmalar) ketma-ketligini o'z ichiga oladi. Boshqacha qilib aytganda, usul - bu funktsiya: sinfingiz qila oladigan narsa. Boshqa tillarda ham funktsiyalar mavjud. Faqat Java-da ular sinflarning a'zolari bo'lib, OOP terminologiyasiga ko'ra, usullar deb ataladi. Ammo davom ettirishdan oldin, keling, kichik bir misolni ko'rib chiqaylik:
public String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
  return resultSentence;
}
Bu erda hech qanday murakkab narsa yo'q: Java usuli, uning vazifasi biz unga o'tadigan nom bilan salomlashish satrini yaratishdir. Misol uchun - Keling, Hello world! My name is Bobby usul deklaratsiyasidagi har bir kalit so'zga qarab (chapdan o'ngga) usulning tuzilishini to'g'ri tushunaylik. Bizning birinchi kalit so'zimiz public, va u kirish modifikatorini bildiradi:

Kirish modifikatorlari

Ular sinf a'zolari uchun ruxsat etilgan ko'rinish doirasini, ya'ni o'zgaruvchi yoki usuldan foydalanishga ruxsat berilgan joylarni cheklashni ko'rsatadi. Java tilidagi usullar - 3Java-da quyidagi kirish modifikatorlaridan foydalaniladi:
  • ommaviy : ommaviy. Ushbu modifikatorga ega usullar yoki maydonlar umumiy bo'lib, boshqa sinflarga (aniqrog'i, ularning usullari va maydonlariga) joriy paketdan va tashqi paketlardan ko'rinadi. Bu ma'lum bo'lgan kirishning eng keng darajasi;

  • himoyalangan : ushbu modifikatorga ega usullar yoki o'zgaruvchilarga joriy sinf yoki paketning istalgan joyidan yoki uni meros qilib olgan sinflardan, shuningdek, boshqa paketlarda bo'lsa ham usullar yoki maydonlardan kirish mumkin

    protected String constructHelloSentence(String name) {...}
  • Birlamchi modifikator. Agar sinf maydoni yoki usulida modifikator bo'lmasa, standart modifikator qo'llaniladi. Bunday holda, maydonlar yoki usullar joriy paketdagi barcha sinflarga ko'rinadi (masalan , protected , lekin meros olishda ko'rinmaydi).

    String constructHelloSentence(String name) {...}
  • xususiy : umumiy o'zgartiruvchining teskarisi . Bunday modifikatorga ega usul yoki o'zgaruvchi faqat u e'lon qilingan sinfda mavjud.

    private String constructHelloSentence(String name) {...}
Keyinchalik biz Stringusul imzosiga egamiz (uning xususiyatlarini tavsiflovchi usulning birinchi qatori).

Qaytish qiymati

Qaytish qiymati - qo'ng'iroqdan keyin o'z o'rniga keladigan ma'lumotlar (usul bajarilishining ba'zi natijalari). Har bir usulning qaytish qiymati bor. Yoki yo'q?

Qaytish qiymati usullari

Bu qiymat har qanday turdagi ma'lumotlar bo'lishi mumkin: oddiy turdagi o'zgaruvchi yoki mos yozuvlar turi. Ushbu misolda biz usul turidagi ob'ektni qaytarishi kerakligini ko'rsatamiz String, biz eslaganimizdek, satrni tavsiflovchi sinfdir. Bu erda ikkinchi nuqta - bu so'z return. Qaytish qiymatiga to'g'ridan-to'g'ri aloqasi bor: undan keyingi qiymat usul chaqirilgan joyga qaytariladi va usulning o'zi yopiladi return. Bu so'z odatda usulning oxirgi qatorida paydo bo'ladi ( if, else... kabi turli tarmoqlarga ega usullardan tashqari). Agar kodni quyidagi qatorga yozsangiz return:
private String constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  return resultSentence;
  System.out.println(resultSentence);
}
keyin biz kompilyatordan la'natlar olamiz, bu unchalik yaxshi emas (tuzuvchi bema'nilikni tavsiya qilmaydi). Shuni ham yodda tutish kerakki, keyin ma'lumotlar turi сusul imzosida e'lon qilinganiga mos kelishi kerak. Bu haqda ko'proq returno'qing .

bekor

Java-da nima uchun ishlatiladi void? Hamma usullarning qaytish qiymati mavjud emas. Ba'zilarida hech narsa yo'q yoki hech narsani qaytarish shart emas. Keyin nima qilish kerak? Keyin usul imzosida biz yozamiz void. Qaytish qiymatisiz usulimiz qanday ko'rinadi?
protected void constructHelloSentence(String name) {
  String resultSentence = "Hello world! My name is " + name;
  System.out.println(resultSentence);
}
Ehtimol, siz qaytarish qiymati bilan bir qatorda returnSo it is so'zi ham yo'qolganini payqadingiz, chunki bizning usulimiz hech narsani qaytarmasligi kerak. Biroq, bu erda joylashtirilishi mumkin, lekin hech qanday ma'nosiz, faqat return; oxirgi qatorda. Bu odatda foydasiz, shuning uchun voidu bilan usullarda ixtiyoriydir. voidBiroq, u usuldan darhol chiqmoqchi bo'lgan filiallar yoki pastadirlar kabi usullarda foydali bo'lishi mumkin . Keyingi usul deklaratsiyasida bizda bor edi constructHelloSentence.

Usul nomlari

constructHelloSentence - usulning nomi, u yoki bu usulni ajratib ko'rsatishimiz mumkin bo'lgan o'ziga xos xususiyat. Va shunga ko'ra, u yoki bu usulni chaqiring. Java tilidagi usullar - 4Usul nomlari kichik harf bilan boshlanishi kerak, lekin tuya sumkasidan ham foydalanish kerak (CamelCase, tuya sumkasi): ya'ni. Ismdagi har bir keyingi so'z oldingisiga qo'shni bo'lib, bosh harf bilan yoziladi. Usul nomlari usulni tavsiflashi kerak (eng yaxshi izoh - bu to'g'ri nomlash). Buning uchun fe'llar yoki fe'llar bilan birikmalardan foydalaning: getCat, delete, createCar, va hokazo. Bir sinf ichida usul nomlari noyob bo'lishi kerak (usulning haddan tashqari yuklanishi hisobga olinmaydi, bu haqda biroz keyinroq gaplashamiz). Keling, biz tahlil qilayotgan usulni batafsil ko'rib chiqamiz va ko'ramiz ( String name)

Usul parametrlari

Usullar tashqaridan, ya'ni usul chaqirilgan joydan keladigan ma'lum ma'lumotlarga ega bo'lishi mumkin (yoki bo'lmasligi mumkin). StringBizning holatda, nomli tip ob'ekti kelishini ko'ramiz nameva keyinchalik bu o'zgaruvchidan usulimizda foydalanamiz. Usulda cheksiz ko'p parametrlardan foydalanishingiz mumkin, ammo 7 dan ortiq parametr tavsiya etilmaydi. Agar biz elementlarning aniq sonini bilmasak, lekin bu elementlarning barchasi bir xil maqsadda kerak bo'lsa va bir xil turdagi bo'lsa (masalan, String), ellipsis ishlatiladi:
public void constructHelloSentence(String...name) {
 ...
}
Har bir elementga murojaat quyidagicha bo'ladi: name[0] Bu sizga biror narsani eslatadimi? To'g'ri, massiv! Agar biz yozsak, hech narsa o'zgarmaydi:
protected void constructHelloSentence(String[] name) {
 ...
}
Elementlarga kirish ham quyidagi shaklda bo'ladi: name[1] Va yana bir narsa. Usul argumentlari yakuniy bo'lishi mumkin :
public String constructHelloSentence(final String name) {
  ...
}
Bu shuni anglatadiki, ism havolasi ma'lum bir ob'ektga bog'langan Stringva uni bekor qilib bo'lmaydi. Malumot o'zgaruvchilari bilan ishlash va ularning ajratilgan so'zlar bilan o'zaro ta'siri haqida siz " Java'dagi ma'lumotlar turlarifinal " materialida o'qishingiz mumkin .

Qo'ng'iroq qilish usullari

Shunday qilib, biz usullarni yaratishni saralab oldik, endi ulardan foydalanish haqida gapiraylik. Java-da usulni qanday chaqirish mumkin? Java tilidagi usullar - 5Java-dagi har bir usul bir sinfda. Java-da qo'ng'iroq qilish usullari qanday ishlashini tushunish uchun keling, darsni ko'rib chiqaylik:
public class StringConstructor {
  public String constructHelloSentence(String name) {
     String resultSentence = "Hello world! My name is " + name;
     System.out.println(resultSentence);
     return resultSentence;
  }
}
Bizning usulimiz statik emasligi sababli (bu bugungi maqola doirasidan tashqarida bo'lgan muhokama uchun alohida mavzu), uni chaqirish uchun avval ob'ektni yaratishingiz kerak, keyin esa undagi usulni chaqirishingiz kerak:
class Application{
  public static void main(String[] args) {
     StringConstructor stringConstructor = new StringConstructor();
     stringConstructor.constructHelloSentence("Den");
  }
}
Bizning usulimizning argumentlarida biz ekranda ko'rsatilgan natijada ko'rmoqchi bo'lgan satrni (nom) o'tkazdik:

Hello world! My name is Den
Shuni ham yodda tutish kerakki, usullardan qancha kerak bo'lsa, shuncha marta foydalanish mumkin - hech qanday cheklovlar yo'q.

bu

Siz ko'pincha kalit so'zni kodda ko'rishingiz mumkin this, masalan, setters:
public void setValue(Long value) {
   this.value = value;
}
Va bu nimani anglatadi? thisJava-da bu sinfning joriy ob'ektiga havola. Masalan, agar biz ob'ekt yaratgan bo'lsak:
StringConstructor stringConstructor = new StringConstructor();
keyin thisob'ekt ichida stringConstructorbir xil ob'ektga havola bo'ladi. thisob'ekt o'zgaruvchisiga murojaat qilish uchun ham (yuqoridagi sozlagichdagi kabi) va qandaydir usulni chaqirish uchun ishlatiladi. Biz sinfimizni biroz qayta yozishimiz mumkin:
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 ";
  }
}
Orqali thisbiz kerakli satrni olish uchun ushbu ob'ektning usulini chaqiramiz. Ammo shunga qaramay, qoida tariqasida, bu usullar uchun deyarli qo'llanilmaydi, chunki u holda ham ma'lum bir ob'ektning usuliga havola mavjud; u asosan ob'ekt o'zgaruvchisi uchun ishlatiladi.

Usulni ortiqcha yuklash

Aytaylik, bizga asosan bir xil mantiqni bajaradigan usul kerak edi, lekin Hello world! Buning o'rniga worldbiz o'z so'zimizni (string) kiritmoqchimiz. Lekin bizda allaqachon usul bor constructHelloSentence. Xo'sh, biz bir xil funktsiyani bajaradigan usul uchun yangi nom topishimiz kerakmi? Qanday bo'lishidan qat'iy nazar: hozirgi vaqtda usulni ortiqcha yuklash bizga yordam beradi. Java tilidagi usullar - 7Usulning haddan tashqari yuklanishi - bu bir xil usul nomini sinfda e'lon qilishda bir necha marta ishlatishdir. Til sintaksisi nuqtai nazaridan ba'zi bir mahalliy makonda ikkita bir xil nom bo'lishi mumkin emas. Ammo bir xil nomli, ammo turli argumentlar bilan usullarni e'lon qilish ham mumkin. Boshqacha qilib aytganda, bir xil nomga ega, ammo kirish ma'lumotlari boshqacha bo'lgan ikki yoki undan ortiq usullar mavjud bo'lganda, sinf ortiqcha yuklarni o'z ichiga oladi:
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;
  }
}
Bu erda usullar bir xil kirish modifikatorini (shuningdek, qaytarish turini) o'z ichiga olishi shart emasligini ko'ramiz. Agar haddan tashqari yuklangan usul chaqirilsa, kompilyator bir nechta e'lon qilingan usullardan qo'ng'iroq paytida ko'rsatilgan parametrlarga asoslanib, avtomatik ravishda keraklisini aniqlaydi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION