JavaRush /Java Blogu /Random-AZ /Java-da erkən və gec bağlanma arasındakı fərqlər

Java-da erkən və gec bağlanma arasındakı fərqlər

Qrupda dərc edilmişdir
Java-da erkən (statik)gec (dinamik) bağlama arasındakı fərqi anlamaq üçün əvvəlcə bağlamanın nə olduğunu başa düşməlisiniz . Əlaqələndirmə, keçid və kod arasında əlaqənin olması deməkdir. Məsələn, istinad etdiyiniz dəyişən onun təyin olunduğu koda bağlıdır. Eynilə, çağırılan metod kodda müəyyən edildiyi yerə bağlıdır.
Java-da erkən və gec bağlanma arasındakı fərqlər - 1
Java dilində iki növ bağlama metodu var: erkən bağlama (həmçinin statik adlanır) və gec bağlama (müvafiq olaraq dinamik) . Java-da metodu çağırmaq o deməkdir ki, proqram işləyərkən və obyektlər yaradılanda metod ya kompilyasiya zamanı, ya da icra zamanı xüsusi koda bağlıdır. Adından da göründüyü kimi, statik əlaqə kompilyasiya zamanı baş verdiyi üçün təbiətdə daha statikdir, yəni kod Java mənbə kodunu sinif fayllarına tərtib etdikdən sonra hansı metodu çağıracağını "bilir" deməkdir. Və bu, proqramın həyat dövrünün ilkin mərhələsinə aid olduğundan, buna erkən bağlanma da deyilir. Digər tərəfdən, dinamik əlaqə proqram Java Virtual Maşın tərəfindən idarə edildikdən sonra iş vaxtında baş verir. Bu halda hansı metodun çağırılacağı konkret obyekt tərəfindən müəyyən edilir, ona görə də məlumat kompilyasiya zamanı mövcud olmur, çünki obyektlər icra zamanı yaradılır. Və bu, proqramın həyat tsiklində gec baş verdiyi üçün Java-da gec bağlanma adlanır.
Beləliklə, Java-da statik və dinamik bağlama arasındakı əsas fərq ondan ibarətdir ki, birincisi, istinad dəyişəninin növünə əsasən, kompilyasiya vaxtında, ikincisi isə daha sonra, konkret obyektlərdən istifadə etməklə, iş vaxtında baş verir.
Bunu daha yaxşı başa düşmək və Java müsahibələrində verilən bu çox məşhur suala cavab verə bilmək üçün daha bir neçə fərqə baxaq.

Java-da erkən və gec bağlama

Java-da statik və dinamik bağlama arasında bir çox fərq var, lakin ən vacibi JVM-nin onlardan necə istifadə etməsidir. Eyni ada malik birdən çox metod olduqda JVM-nin hansı metodun çağırılacağına necə qərar verdiyini heç düşünmüsünüzmü? Əgər siz heç vaxt metodun həddən artıq yüklənməsi və ya ləğv edilməsindən istifadə etmisinizsə, bilirsiniz ki, Java-da eyni adlı bir neçə metodunuz ola bilər. Java vəziyyətində, JVM istədiyiniz metodu seçmək üçün həm statik, həm də dinamik bağlamadan istifadə edir.

Java-da statik və dinamik bağlama nümunəsi

Bu proqramda siz virtual metodların bağlanmasının statik bağlamadan istifadə etməklə kompilyasiya zamanı baş vermədiyini görəcəksiniz, çünki bu, erkən bağlanan statik metodlarda olduğu kimi superclass metodunu çağıracaq. Əgər alt sinifdən metod çağırılırsa, funksiyanı icra zamanı bağlamaq üçün xüsusi obyekt istifadə olunurdu və buna görə də virtual funksiyaları bağlamaq üçün dinamik bağlama istifadə olunur.
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
Gördüyünüz kimi, metod çağırışı premium()alt sinifdən bir metodun icrası ilə nəticələndi, metod çağırışı isə category()superclass metodunun icrası ilə nəticələndi. Bunun səbəbi premium()- virtual metoddur, gec bağlanma ilə həll edilir, category()- statik metoddur və sinif adı ilə kompilyasiya vaxtı statik bağlamadan istifadə etməklə həll edilir.
Java haqqında oxumaq istəyirsiniz? Java Developer qrupuna qoşulun !

Java-da erkən və gec bağlanma arasındakı fərqlər

İndi Java-nın metod çağırışlarını necə bağladığını və statik və dinamik bağlamanın necə işlədiyini başa düşdüyünüz üçün Java-da erkən və gec bağlama arasındakı əsas fərqləri nəzərdən keçirək:
  1. Statik əlaqə kompilyasiya zamanı, dinamik əlaqə isə icra zamanı baş verir.

  2. Statik əlaqə proqramın həyat dövrünün əvvəlində baş verdiyi üçün ona erkən bağlanma deyilir. Eynilə, dinamik bağlama da gec bağlanma adlanır, çünki o, proqramın icrası zamanı sonra baş verir.

  3. Statik bağlama Java dilində həddən artıq yüklənmiş metodları həll etmək üçün istifadə olunur, dinamik bağlama isə ləğv edilmiş metodları həll etmək üçün Java dilində istifadə olunur.

  4. Eynilə, özəl, statik və terminal metodlar statik bağlamadan istifadə etməklə həll edilir, çünki onları ləğv etmək mümkün deyil, bütün virtual üsullar isə dinamik bağlamadan istifadə etməklə həll olunur.

  5. Statik bağlama vəziyyətində konkret obyektlər deyil, tip məlumatı, yəni istənilən metodu kəşf etmək üçün istinad dəyişəninin növü istifadə olunur. Digər tərəfdən, dinamik bağlama Java-da istədiyiniz metodu tapmaq üçün müəyyən bir obyektdən istifadə edir.
Budur, Java-da statik və dinamik bağlama anlayışlarına əsaslanan yaxşı məşq. “Aşağıdakı proqram icra edildikdə nə çıxacaq?” sualına cavab verə bilərsinizmi?
Java-da erkən və gec bağlanma arasındakı fərqlər - 2
Bu proqram nə verəcək? Collection, Setyoxsa HashSet? Java-da erkən (statik)gec (dinamik) bağlama arasındakı fərqlər haqqında sizə demək istədiyimiz hər şey budur . Bu, ən yaxşı Java telefon müsahibə suallarından biridir, çünki o, namizədin bilik dərinliyini yoxlamaq üçün kifayət qədər imkanlar təqdim edir. Həmişə yadda saxlayın ki , özəl , statikson metodlar statik keçiddən , virtual metodlar isə dinamik keçiddən istifadə etməklə bağlanır . Eyni şəkildə, statik bağlamanın ən yaxşı nümunəsi metodun həddən artıq yüklənməsidir, üstəlik isə dinamikdir. Mənbə
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION