JavaRush /Java blogi /Random-UZ /Java-da erta va kech ulanish o'rtasidagi farqlar

Java-da erta va kech ulanish o'rtasidagi farqlar

Guruhda nashr etilgan
Java-da erta (statik) va kech (dinamik) bog'lanish o'rtasidagi farqni tushunish uchun avval bog'lanish nima ekanligini tushunishingiz kerak . Bog'lanish havola va kod o'rtasida bog'liqlik mavjudligini anglatadi. Misol uchun, siz havola qilayotgan o'zgaruvchi u aniqlangan kodga bog'langan. Xuddi shunday, chaqirilayotgan usul koddagi u aniqlangan joyga bog'langan.
Java-da erta va kech ulanish o'rtasidagi farqlar - 1
Java tilida ulanishning ikki turi mavjud: erta ulanish (statik deb ham ataladi) va kech ulanish (mos ravishda dinamik) . Java-da metodni chaqirish, bu usul kompilyatsiya vaqtida yoki dastur ishga tushirilganda va ob'ektlar yaratilganda ma'lum bir kodga bog'langanligini anglatadi. Nomidan ko'rinib turibdiki, statik bog'lanish tabiatan ko'proq statikdir, chunki u kompilyatsiya vaqtida sodir bo'ladi, ya'ni kod Java manba kodini sinf fayllariga kompilyatsiya qilgandan so'ng qaysi usulni chaqirish kerakligini "biladi". Va bu dasturning hayot aylanishining dastlabki bosqichini nazarda tutganligi sababli, u erta bog'lanish deb ham ataladi. Boshqa tomondan, dinamik bog'lanish dastur Java virtual mashinasi tomonidan ishga tushirilgandan so'ng, ish vaqtida sodir bo'ladi. Bunday holda, qaysi usulni chaqirish aniq ob'ekt tomonidan belgilanadi, shuning uchun ma'lumot kompilyatsiya vaqtida mavjud emas, chunki ob'ektlar ishlash vaqtida yaratilgan. Va bu dasturning hayotiy tsiklining oxirida sodir bo'lganligi sababli, bu Java-da kech bog'lanish deb ataladi.
Shunday qilib, Java-da statik va dinamik bog'lanish o'rtasidagi asosiy farq shundaki, birinchisi mos yozuvlar o'zgaruvchisining turiga qarab kompilyatsiya vaqtida, ikkinchisi esa keyinroq, aniq ob'ektlar yordamida ish vaqtida sodir bo'ladi.
Keling, buni yaxshiroq tushunish va Java intervyularida berilgan ushbu juda mashhur savolga javob berish uchun yana bir nechta farqlarni ko'rib chiqaylik.

Java-da erta va kech ulanish

Java-da statik va dinamik bog'lanish o'rtasida juda ko'p farqlar mavjud, ammo eng muhimi JVM ulardan qanday foydalanishi. Bir xil nomli bir nechta usullar mavjud bo'lganda JVM qanday usulni chaqirish kerakligini hech o'ylab ko'rganmisiz? Agar siz haddan tashqari yuklash yoki bekor qilish usulidan foydalangan bo'lsangiz, bilasizki, Java-da siz bir xil nomdagi bir nechta usullarga ega bo'lishingiz mumkin. Java misolida, JVM kerakli usulni tanlash uchun ham statik, ham dinamik ulanishdan foydalanadi.

Java-da statik va dinamik ulanishga misol

Ushbu dasturda virtual usullarni bog'lash kompilyatsiya vaqtida statik bog'lanish yordamida amalga oshirilmasligini ko'rasiz, chunki bu erta bog'langan statik usullarda bo'lgani kabi superklassdagi usulni chaqiradi. Agar pastki sinfdan usul chaqirilsa, ish vaqtida funktsiyani bog'lash uchun ma'lum bir ob'ekt ishlatilgan va shuning uchun virtual funktsiyalarni bog'lash uchun dinamik bog'lanish qo'llaniladi.
public class Main {
  public static void main(String[] args) {

    // Пример статического и динамического связывания в Java
    Insurance current = new CarInsurance();

    // Динамическое связывание на основе an object
    int premium = current.premium();

    // Статическое связывание на основе класса
    String category = current.category();

    System.out.println("premium : " + premium);
    System.out.println("category : " + category);
  }
}

class Insurance{
  public static final int LOW = 100;

  public int premium(){
    return LOW;
  }

  public static String category(){
    return "Insurance";
  }

}

class CarInsurance extends Insurance{
  public static final int HIGH = 200;

  public int premium(){
    return HIGH;
  }

  public static String category(){
    return "Car Insurance";
  }

}
Результаты выполнения:

premium : 200
category : Insurance
Ko'rib turganingizdek, usul chaqiruvi premium()pastki sinfdan usulning bajarilishiga olib keldi, usul chaqiruvi esa category()superklass usulining bajarilishiga olib keldi. Buning sababi shundaki premium(), - bu virtual usul bo'lib, kech bog'lanish yordamida hal qilinadi, category()- statik usul bo'lib, sinf nomi bo'yicha kompilyatsiya vaqtida statik bog'lanish yordamida hal qilinadi.
Java haqida o'qishga qiziqasizmi? Java Developer guruhiga qo'shiling !

Java-da erta va kech ulanish o'rtasidagi farqlar

Endi sizda Java usuli qoʻngʻiroqlarini qanday bogʻlashi va statik va dinamik bogʻlash qanday ishlashi haqida maʼlumotga ega boʻlganingizdan soʻng, keling, Javaʼda erta va kech bogʻlash oʻrtasidagi asosiy farqlarni qayta koʻrib chiqamiz:
  1. Statik bog'lanish kompilyatsiya vaqtida, dinamik bog'lanish esa ish vaqtida sodir bo'ladi.

  2. Statik bog'lanish dasturning hayotiy siklining boshida sodir bo'lganligi sababli, u erta bog'lanish deb ataladi. Xuddi shunday, dinamik bog'lanish kechikish deb ham ataladi, chunki u dasturning bajarilishida keyinroq sodir bo'ladi.

  3. Statik ulanish Java tilida haddan tashqari yuklangan usullarni hal qilish uchun ishlatiladi, dinamik bog'lanish esa bekor qilingan usullarni hal qilish uchun Java tilida qo'llaniladi.

  4. Xuddi shunday, xususiy, statik va terminal usullar statik bog'lash yordamida hal qilinadi, chunki ularni bekor qilib bo'lmaydi, barcha virtual usullar esa dinamik bog'lanish yordamida hal qilinadi.

  5. Statik bog'lanish holatida aniq ob'ektlar emas, balki tip ma'lumotlari, ya'ni mos yozuvlar o'zgaruvchisining turi kerakli usulni ochish uchun ishlatiladi. Boshqa tomondan, dinamik ulanish Java-da kerakli usulni topish uchun ma'lum bir ob'ektdan foydalanadi.
Mana Java-da statik va dinamik bog'lanish tushunchalariga asoslangan yaxshi mashq. “Quyidagi dastur bajarilganda nima chiqadi?” degan savolga javob bera olasizmi ?
Java-da erta va kech ulanish o'rtasidagi farqlar - 2
Ushbu dastur nima beradi? Collection, Setyoki HashSet? Java-da erta (statik) va kech (dinamik) bog'lanish o'rtasidagi farqlar haqida sizga aytmoqchi bo'lgan narsa shu . Bu eng yaxshi Java telefon intervyu savollaridan biri, chunki u nomzodning bilim chuqurligini tekshirish uchun juda ko'p imkoniyatlarni taqdim etadi. Har doim esda tutingki, shaxsiy , statik va yakuniy usullar statik bog'lanish yordamida , virtual usullar esa dinamik bog'lanish yordamida bog'lanadi . Xuddi shunday, statik bog'lanishning eng yaxshi namunasi usulni haddan tashqari yuklashdir, bekor qilish esa dinamikdir. Manba
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION