JavaRush /Blog Java /Random-PL /Różnice między wczesnym i późnym wiązaniem w Javie

Różnice między wczesnym i późnym wiązaniem w Javie

Opublikowano w grupie Random-PL
Aby zrozumieć różnicę pomiędzy wczesnym (statycznym) i późnym (dynamicznym) wiązaniem w Javie, musisz najpierw zrozumieć, czym jest wiązanie . Linkowanie oznacza, że ​​istnieje połączenie pomiędzy linkiem a kodem. Na przykład zmienna, do której się odwołujesz, jest powiązana z kodem, w którym jest zdefiniowana. Podobnie wywoływana metoda jest powiązana z lokalizacją w kodzie, w którym jest zdefiniowana.
Różnice pomiędzy wczesnym i późnym wiązaniem w Javie - 1
W języku Java istnieją dwa typy wiązania metod: wczesne wiązanie (zwane także statycznym) i późne wiązanie (odpowiednio dynamiczne) . Wywołanie metody w Javie oznacza, że ​​metoda jest powiązana z określonym kodem w czasie kompilacji lub w czasie wykonywania, kiedy program jest uruchamiany i tworzone są obiekty. Jak sama nazwa wskazuje, łączenie statyczne ma bardziej statyczny charakter, ponieważ ma miejsce w czasie kompilacji, co oznacza, że ​​kod „wie”, którą metodę wywołać po skompilowaniu kodu źródłowego Java do plików klas. A ponieważ odnosi się to do wczesnego etapu cyklu życia programu, nazywa się to również wczesnym wiązaniem. Z drugiej strony dynamiczne łączenie następuje w czasie wykonywania, po uruchomieniu programu przez wirtualną maszynę Java. W tym przypadku metoda wywołania zależy od konkretnego obiektu, więc informacje nie są dostępne w czasie kompilacji, ponieważ obiekty są tworzone w czasie wykonywania. A ponieważ dzieje się to na późnym etapie cyklu życia programu, w Javie nazywa się to późnym wiązaniem.
Zatem podstawowa różnica między wiązaniem statycznym i dynamicznym w Javie polega na tym, że to pierwsze zachodzi wcześnie, w czasie kompilacji, w zależności od typu zmiennej referencyjnej, a drugie później, w czasie wykonywania, przy użyciu konkretnych obiektów.
Przyjrzyjmy się jeszcze kilku różnicom, aby lepiej to zrozumieć i móc odpowiedzieć na to bardzo popularne pytanie zadawane w wywiadach w języku Java.

Wczesne i późne wiązanie w Javie

Istnieje wiele różnic między wiązaniami statycznymi i dynamicznymi w Javie, ale najważniejszy jest sposób, w jaki JVM je wykorzystuje. Czy zastanawiałeś się kiedyś, w jaki sposób maszyna JVM decyduje, którą metodę wywołać, gdy w zakresie istnieje więcej niż jedna metoda o tej samej nazwie? Jeśli kiedykolwiek korzystałeś z przeciążania lub przesłaniania metod, wiesz, że w Javie możesz mieć wiele metod o tej samej nazwie. W przypadku Java JVM używa zarówno powiązania statycznego, jak i dynamicznego, aby wybrać żądaną metodę.

Przykład wiązania statycznego i dynamicznego w Javie

W tym programie zobaczysz, że wiązanie metod wirtualnych nie następuje w czasie kompilacji przy użyciu wiązania statycznego, ponieważ spowodowałoby to wywołanie metody z nadklasy, jak to ma miejsce w przypadku metod statycznych, które są wiązane wcześniej. Jeśli wywoływana jest metoda z podklasy, do powiązania funkcji w czasie wykonywania użyto określonego obiektu, dlatego do powiązania funkcji wirtualnych używane jest wiązanie dynamiczne.
public class Main {
  public static void main(String[] args) {

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

    // Динамическое связывание на основе obiektа
    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
Jak widać, wywołanie metody premium()spowodowało wykonanie metody z podklasy, natomiast wywołanie metody category()spowodowało wykonanie metody nadklasy. Dzieje się tak, ponieważ premium()- jest metodą wirtualną, która jest rozwiązywana przy użyciu późnego wiązania, podczas gdy category()- jest metodą statyczną, która jest rozwiązywana przy użyciu statycznego wiązania w czasie kompilacji według nazwy klasy.
Chcesz przeczytać o Javie? Dołącz do grupy programistów Java !

Różnice między wczesnym i późnym wiązaniem w Javie

Teraz, gdy już o tym wiesz i rozumiesz, jak Java wiąże wywołania metod oraz jak działa wiązanie statyczne i dynamiczne, podsumujmy kluczowe różnice między wczesnym i późnym wiązaniem w Javie:
  1. Łączenie statyczne następuje w czasie kompilacji, natomiast łączenie dynamiczne następuje w czasie wykonywania.

  2. Ponieważ łączenie statyczne ma miejsce na początku cyklu życia programu, nazywa się je wczesnym wiązaniem. Podobnie wiązanie dynamiczne jest również nazywane późnym wiązaniem, ponieważ następuje na późniejszym etapie wykonywania programu.

  3. Wiązanie statyczne jest używane w języku Java do rozwiązywania przeciążonych metod, podczas gdy wiązanie dynamiczne jest używane w języku Java do rozwiązywania przesłoniętych metod.

  4. Podobnie metody prywatne, statyczne i terminalowe są rozwiązywane przy użyciu powiązania statycznego, ponieważ nie można ich zastąpić, podczas gdy wszystkie metody wirtualne są rozwiązywane przy użyciu powiązania dynamicznego.

  5. W przypadku wiązania statycznego do odkrycia żądanej metody wykorzystywane są nie konkretne obiekty, ale informacja o typie, czyli typ zmiennej referencyjnej. Z drugiej strony wiązanie dynamiczne używa określonego obiektu do znalezienia żądanej metody w Javie.
Oto dobre ćwiczenie oparte na koncepcjach wiązania statycznego i dynamicznego w Javie. Czy potrafisz odpowiedzieć na pytanie: „Co zostanie wypisane po wykonaniu poniższego programu?”
Różnice pomiędzy wczesnym i późnym wiązaniem w Javie - 2
Co wyświetli ten program? Collection, SetLub HashSet? To wszystko, co chcieliśmy powiedzieć o różnicach między wczesnym (statycznym) i późnym (dynamicznym) wiązaniem w Javie. Jest to jedno z najlepszych pytań do rozmowy telefonicznej w języku Java, ponieważ zapewnia sporo możliwości sprawdzenia poziomu wiedzy kandydata. Zawsze pamiętaj, że metody prywatne , statyczne i końcowe są powiązane przy użyciu łączenia statycznego , podczas gdy metody wirtualne są wiązane przy użyciu łączenia dynamicznego . Podobnie najlepszym przykładem wiązania statycznego jest przeciążenie metody, podczas gdy przesłonięcie jest dynamiczne. Źródło
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION