Statik metodlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Statik metodlar

Statik o'zgaruvchilar bilan birga, klasslarda statik metodlar ham bo'lishi mumkin.

Oddiy metodlar klassning obyektlariga bog'langan (namunalari) va ular oddiy klass- o'zgaruvchilariga murojaat qilishlari mumkin (va shuningdek statik o'zgaruvchilar va metodlar). Statik metodlar esa klassning statik obyektiga bog'langan va ular faqat statik o'zgaruvchilar va/yoki boshqa statik klass metodlariga murojaat qilishlari mumkin.

Oddiy metodni klassda chaqirish uchun, avval bu klassdan obyekt yaratish kerak, shundagina obyektning metodini chaqirish mumkin. Oddiy metodni obyekt emas, klassdan chaqirish iloji yo'q.

Misol:

Oddiy metodni klassdan chaqirish mumkin emas!
public class DataInfo
{
   public int getValue()
   {
      return 100;
   }
}

public class Solution
{
   public static void main(String[] args)
   {
      System.out.println(DataInfo.getValue()); // bu yerda xato!
   }
}

Statik metodni chaqirish uchun, faqat statik obyekt mavjud bo'lishi kerak (u har doim klass xotirada yuklanganidan keyin mavjud bo'ladi). Mana shuning uchun main() metodi statik. U klassning statik obyektiga bog'langan, uni chaqirish uchun hech qanday obyekt yaratishga hojat yo'q.

Metodni statik e'lon qilish uchun, metod sarlavhasi oldida static kalit so'zni yozish kerak. Ushbu tuzilishning umumiy ko'rinishi quyidagicha:

static tip nom(parametrlar)
{
   metod kodi
}

Misollar:

Kod Izoh
public class Solution
{
   public static void main(String args[])
   {
      test();
   }

   public static void test()
   {
      int d = 2/0;
   }
}


Metod main Java-mashinasi tomonidan quyidagi buyruq bilan chaqiriladi: Solution.main();



Statik metod test() statik metod main()da chaqiriladi.

Boshqa klassdan statik metodni chaqirish uchun, statik metod nomidan oldin klass nomini ko'rsating. Ushbu tuzilmaning umumiy ko'rinishi quyidagicha:

Tip nom = KlassNomi.metodNomi(parametrlar)

Misollar:

Kod Statik metod
int x = Math.min(a, b);
int min(int a, int b)
Thread.sleep(200);
void sleep(long ms)
Path path = Path.of("c:\\readme.txt");
Path of(String str)


2. Statik vs Oddiy metodlar

Statik metodlar oddiy metodlardan nimasi bilan farq qiladi?

Oddiy metod - bu obyektga - klass namunasiga bog'langan, statik metod esa bunday bog'lanishga ega emas. Oddiy metod klassning o'zgaruvchilariga murojaat qilishi mumkin, statik esa qilolmaydi: bu metodlar bilan bog'liq hech qanday klass namunalari mavjud emas.

Ikki xil metodlar farqi jadvalda ifodalangan:

Salohiyat Oddiy metod Statik metod
Klass namunasiga bog'lanish mavjud Ha Yo'q
Oddiy metodlarni chaqira oladi Ha Yo'q
Statik metodlarni chaqira oladi Ha Ha
Oddiy klass o'zgaruvchilariga murojaat qila oladi Ha Yo'q
Statik klass o'zgaruvchilariga murojaat qila oladi Ha Ha
Obyektda chaqirilishi mumkin Ha Ha
Klassda chaqirilishi mumkin Yo'q Ha

Nega bunday metodlar kerak, agar ular shuncha cheklangan bo'lsa? Gap shundaki, bunday yondashuvning ham o'z afzalliklari bor.

Birinchidan, statik metodlar va o'zgaruvchilarga murojaat qilish uchun hech qanday obyekt havolasi kerak emas.

Ikkinchidan, ba'zan o'zgaruvchilar yagona nusxada bo'lishi kerak. Masalan, System.out o'zgaruvchisi (System klassining statik o'zgaruvchisi out).

Uchinchidan, ba'zida metodni chaqirish kerak, hatto biror-bir obyektni yaratish imkoniyati bo'lgunga qadar. Masalan, dastur bajarilishini boshlaydigan main() metodi: uni Java mashina klass nusxasini yaratishdan oldin chaqiradi.

Klass namunasiga bog'lanish mavjud

Oddiy metodni chaqirganda unga yashirin parametr — unga nisbatan metod chaqirilgan obyekt uzatiladi. Bu parametr this nomiga ega. Bu yagona yashirin parametr, ya'ni metod chaqirilgan obyektga havola statik metodlardan oddiy metodlarni ajratib turadigan narsadir.

Statik metodlarda bunday yashirin parametr yo'q, shuning uchun statik metodlar ichida this kalit so'zidan foydalanish mumkin emas va statik metoddan oddiy metodni chaqirish mumkin emas: klass nusxasiga havola olish imkoniyati yo'q.

Oddiy metodlarni chaqira oladi

Oddiy klass metodida har doim yashirin parametr — this — klassning metod chaqirilgan obyektiga havola mavjud. Har safar siz oddiy metodni boshqa oddiy metod ichida chaqirganingizda, bu chaqiruv uchun this yashirin parametrlardan foydalaniladi. Misol

Kod Qanday ishlaydi
int min(int a, int b)
{
   return a < b ? a : b;
}

int min(int a, int b, int c)
{
   int t = min(a, b);
   return min(t, c);
}
int min(int a, int b)
{
   return a < b ? a : b;
}

int min(int a, int b, int c)
{
   int t = this.min(a, b);
   return this.min(t, c);
}

Shuning uchun oddiy metodni statikdan chaqirib bo'lmaydi. Statik metod ichida this nomiga ega yashirin o'zgaruvchi mavjud emas.

Yoki boshqa vaziyatni tasavvur qiling: dasturda hali bizning klassimizdan birorta ham obyekt yaratilmadi. Klassning statik metodi chaqirilishi mumkinmi? Ha. Bu statik metod oddiy metodni chaqira oladimi?

Qaysi obyekt uchun u chaqirilishi mumkin? Axir hali bizning klassimizning birorta ham nusxasi yaratilmagan!

Statik klass metodlarini chaqira oladi

Statik metodlarni dasturda istalgan joydan chaqirish mumkin. Demak, ular statik metodlardan ham, oddiy metodlardan ham chaqirilishi mumkin. Bu yerda hech qanday cheklovlar yo'q.

Oddiy klass o'zgaruvchilariga murojaat qila oladi

Oddiy metoddin klassning oddiy o'zgaruvchilariga murojaat qilish mumkin, chunki bunda klass nusxasining o'zgaruvchilariga murojaat yuz beradi, u esa this yashirin parametridan oson olinadi.

Statik metod klassning oddiy o'zgaruvchilarini qaysi nusxadan olishni bilmaydi. Bizni holatimizda statik metod chaqirilgan, lekin dasturda hali bironta ham klass nusxasi yaratilmagan bo'lishi mumkin.

Shuning uchun statik metodlar klassning oddiy o'zgaruvchilariga murojaat qila olmaydi.

Statik metod oddiy metodni chaqiradi, lekin qaysi obyektga nisbatan chaqiriladi?

Statik metodlar

Noma'lum! Shuning uchun oddiy metodni statikdan chaqirib bo'lmaydi, obyektga havola ko'rsatmasdan!

Statik klass o'zgaruvchilariga murojaat qila oladi

Statik o'zgaruvchilarga murojaat qilish holati statik metodlarga murojaat qilish kabi. Statik o'zgaruvchilarga dasturda istalgan joydan murojaat qilish mumkin. Shuning uchun ular statik metodlardan, shuningdek, oddiy metodlardan ham murojaat qilish mumkin.

Obyektda chaqirilishi mumkin

Statik ham, oddiy metodlar ham obyektlarda chaqirilishi mumkin. Oddiy metod, chunki uni faqat obyektlarda chaqirish mumkin. Statik metod ham obyektlarda chaqirilishi mumkin: bu holatda kompilyator o'zi o'zgaruvchi turini aniqlab, uning turiga qarab statik metodni chaqiradi:

Kod Kompilyator uni qanday ko'radi
Thread th = Thread.current();
th.sleep(1000);
Thread th = Thread.current();
Thread.sleep(1000);
Integer i = 1;
int x = i.parseInt("12");
Integer i = 1;
int x = Integer.parseInt("12");
"".valueOf(12);
String.valueOf(12);

Klassda chaqirilishi mumkin

Klassda faqat statik metodi chaqirilishi mumkin, oddiy metodni chaqirish uchun klassning nusxasiga havola kerak. Shuning uchun oddiy metodni KlassNomi.metodNomi(parametrlar) ko'rinishida chaqirib bo'lmaydi


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION