JavaRush /Java блогы /Random-KK /Java тіліндегі ерте және кеш байланыстыру арасындағы айыр...

Java тіліндегі ерте және кеш байланыстыру арасындағы айырмашылықтар

Топта жарияланған
Java тіліндегі ерте (статикалық) және кеш (динамикалық) байланыстыру арасындағы айырмашылықты түсіну үшін алдымен байланыстырудың не екенін түсінуіңіз керек . Байланыстыру сілтеме мен code арасында байланыс бар екенін білдіреді. Мысалы, сіз сілтеме жасайтын айнымалы ол анықталған codeқа байланысты. Сол сияқты, шақырылатын әдіс codeтағы ол анықталған орынға байланысты.
Java тіліндегі ерте және кеш байланыстыру арасындағы айырмашылықтар - 1
Java тілінде байланыстыру әдісінің екі түрі бар: ерте байланыстыру (статикалық деп те аталады) және кеш байланыстыру (тиісінше динамикалық) . Java тіліндегі әдісті шақыру әдіс компиляция уақытында немесе бағдарлама іске қосылғанда және нысандар жасалғанда, белгілі бір codeқа байланысты екенін білдіреді. Атауынан көрініп тұрғандай, статикалық байланыстыру компиляция уақытында орын алатын табиғатта статикалық болып табылады, яғни code Java бастапқы codeын сынып файлдарына құрастырғаннан кейін қай әдісті шақыру керектігін «біледі» дегенді білдіреді. Бұл бағдарламаның өмірлік циклінің бастапқы кезеңіне қатысты болғандықтан, оны ерте байланыстыру деп те атайды. Екінші жағынан, динамикалық байланыстыру бағдарлама Java виртуалды машинасымен іске қосылғаннан кейін орындалу уақытында орын алады. Бұл жағдайда қандай әдісті шақыру нақты нысан арқылы анықталады, сондықтан ақпарат компиляция уақытында қол жетімді емес, себебі нысандар орындалу уақытында жасалады. Бұл бағдарламаның өмірлік циклінің соңында болатындықтан, Java тілінде кеш байланыстыру деп аталады.
Сонымен, Java тіліндегі статикалық және динамикалық байланыстырудың түбегейлі айырмашылығы мынада: біріншісі анықтамалық айнымалының түріне негізделген компиляция уақытында ерте пайда болады, ал екіншісі нақты нысандарды пайдалану арқылы кейінірек орындалады.
Мұны жақсырақ түсіну және Java сұхбатында қойылған осы өте танымал сұраққа жауап беру үшін тағы бірнеше айырмашылықтарды қарастырайық.

Java тіліндегі ерте және кеш байланыстыру

Java тіліндегі статикалық және динамикалық байланыстырудың арасында көптеген айырмашылықтар бар, бірақ ең бастысы JVM оларды қалай пайдаланатыны. Сіз JVM ауқымында бірдей атаумен бірнеше әдіс болған кезде қандай әдісті шақыру керектігін қалай шешетінін ойлап көрдіңіз бе? Егер сіз бір кездері әдісті шамадан тыс жүктеуді немесе қайта анықтауды пайдаланған болсаңыз, Java-да бірдей атпен бірнеше әдістер болуы мүмкін екенін білесіз. Java жағдайында, JVM қажетті әдісті таңдау үшін статикалық және динамикалық байланыстыруды пайдаланады.

Java тіліндегі статикалық және динамикалық байланыстырудың мысалы

Бұл бағдарламада виртуалды әдістерді байланыстыру статикалық байланыстыруды пайдаланып компиляция уақытында орындалмайтынын көресіз, өйткені бұл ерте байланыстырылған статикалық әдістермен болғандай суперкласстың әдісін шақырады. Егер ішкі сыныптың әдісі шақырылса, функцияны орындау уақытында байланыстыру үшін белгілі бір нысан пайдаланылды, демек, виртуалды функцияларды байланыстыру үшін динамикалық байланыстыру қолданылады.
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
Көріп отырғаныңыздай, әдісті шақыру premium()ішкі сыныптан әдісті орындауға әкелді, ал әдісті шақыру category()суперкласс әдісін орындауға әкелді. Себебі premium()- кеш байлау арқылы шешілетін виртуалды әдіс, ал category()- класс аты бойынша компиляция уақытындағы статикалық байланыстыру арқылы шешілетін статикалық әдіс.
Java туралы оқығыңыз келе ме? Java әзірлеушілер тобына қосылыңыз !

Java тіліндегі ерте және кеш байланыстыру арасындағы айырмашылықтар

Енді сізде Java әдісі шақыруларын байланыстыру және статикалық және динамикалық байланыстыру қалай жұмыс істейтіні туралы дескриптор бар болғандықтан, Java-дағы ерте және кеш байланыстыру арасындағы негізгі айырмашылықтарды қайталап көрейік:
  1. Статикалық байланыстыру компиляция уақытында, ал динамикалық байланыстыру орындалу уақытында орын алады.

  2. Статикалық байланыстыру бағдарламаның өмірлік циклінің басында болатындықтан, ол ерте байланыстыру деп аталады. Сол сияқты динамикалық байланыстыру кеш байлану деп те аталады, себебі ол бағдарламаның орындалуында кейінірек орын алады.

  3. Статикалық байланыстыру Java тілінде шамадан тыс жүктелген әдістерді шешу үшін пайдаланылады, ал динамикалық байланыстыру Java тілінде қайта анықталған әдістерді шешу үшін қолданылады.

  4. Сол сияқты, жеке, статикалық және терминалдық әдістер статикалық байланыстыру арқылы шешіледі, себебі оларды қайта анықтау мүмкін емес, ал барлық виртуалды әдістер динамикалық байланыстыру арқылы шешіледі.

  5. Статикалық байланыстыру жағдайында нақты an objectілер емес, типтік ақпарат пайдаланылады, яғни қажетті әдісті ашу үшін анықтамалық айнымалының түрі пайдаланылады. Екінші жағынан, динамикалық байланыстыру Java-да қажетті әдісті табу үшін белгілі бір нысанды пайдаланады.
Міне, Java тіліндегі статикалық және динамикалық байланыстыру ұғымдарына негізделген жақсы жаттығу. «Келесі программа орындалғанда не шығады?» деген сұраққа жауап бере аласыз ба?
Java тіліндегі ерте және кеш байланыстырудың айырмашылығы - 2
Бұл бағдарлама не береді? Collection, Setнемесе HashSet? Java тіліндегі ерте (статикалық) және кеш (динамикалық) байланыстыру арасындағы айырмашылықтар туралы айтқымыз келгені осы . Бұл Java телефонымен сұхбаттасудың ең жақсы сұрақтарының бірі, себебі ол үміткердің білімінің тереңдігін тексеруге көптеген мүмкіндіктер береді. Жеке , статикалық және соңғы әдістер статикалық байланыстыру арқылы байланыстырылатынын , ал виртуалды әдістер динамикалық байланыстыру арқылы байланыстырылатынын әрқашан есте сақтаңыз . Сол сияқты, статикалық байланыстырудың ең жақсы мысалы әдісті шамадан тыс жүктеу болып табылады, ал қайта анықтау динамикалық болып табылады. Дереккөз
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION