JavaRush /Java-Blog /Random-DE /Unterschiede zwischen früher und später Bindung in Java

Unterschiede zwischen früher und später Bindung in Java

Veröffentlicht in der Gruppe Random-DE
Um den Unterschied zwischen früher (statischer) und später (dynamischer) Bindung in Java zu verstehen, müssen Sie zunächst verstehen, was Bindung ist . Verlinkung bedeutet, dass zwischen dem Link und dem Code eine Verbindung besteht. Beispielsweise ist eine Variable, auf die Sie verweisen, an den Code gebunden, in dem sie definiert ist. Ebenso ist die aufgerufene Methode an die Stelle im Code gebunden, an der sie definiert ist.
Unterschiede zwischen früher und später Bindung in Java – 1
In der Java-Sprache gibt es zwei Arten der Methodenbindung: frühe Bindung (auch statisch genannt) und späte Bindung (bzw. dynamisch) . Das Aufrufen einer Methode in Java bedeutet, dass die Methode entweder zur Kompilierungszeit oder zur Laufzeit, wenn das Programm ausgeführt wird und Objekte erstellt werden, an bestimmten Code gebunden ist. Wie der Name schon sagt, ist die statische Verknüpfung eher statischer Natur, da sie zur Kompilierzeit erfolgt. Das bedeutet, dass der Code „weiß“, welche Methode er aufrufen muss, nachdem er den Java-Quellcode in Klassendateien kompiliert hat. Da sich dies auf die frühe Phase des Programmlebenszyklus bezieht, wird es auch als frühe Bindung bezeichnet. Andererseits erfolgt die dynamische Verknüpfung zur Laufzeit, nachdem das Programm von der Java Virtual Machine ausgeführt wurde. In diesem Fall wird die aufzurufende Methode durch das jeweilige Objekt bestimmt, sodass die Informationen zur Kompilierungszeit nicht verfügbar sind, da Objekte zur Laufzeit erstellt werden. Und da dies spät im Lebenszyklus des Programms geschieht, wird es in Java als späte Bindung bezeichnet.
Der grundlegende Unterschied zwischen statischer und dynamischer Bindung in Java besteht also darin, dass erstere früh, zur Kompilierungszeit, basierend auf dem Typ der Referenzvariablen, und letztere später, zur Laufzeit, unter Verwendung konkreter Objekte erfolgt.
Schauen wir uns noch ein paar weitere Unterschiede an, um dies besser zu verstehen und auch diese sehr beliebte Frage, die in Java-Interviews gestellt wird, beantworten zu können.

Frühe und späte Bindung in Java

Es gibt viele Unterschiede zwischen statischer und dynamischer Bindung in Java, aber der wichtigste ist, wie die JVM sie verwendet. Haben Sie sich jemals gefragt, wie die JVM entscheidet, welche Methode aufgerufen wird, wenn sich im Gültigkeitsbereich mehr als eine Methode mit demselben Namen befindet? Wenn Sie jemals das Überladen oder Überschreiben von Methoden verwendet haben, wissen Sie, dass es in Java mehrere Methoden mit demselben Namen geben kann. Im Fall von Java verwendet die JVM sowohl statische als auch dynamische Bindungen, um die gewünschte Methode auszuwählen.

Beispiel für statische und dynamische Bindung in Java

In diesem Programm werden Sie sehen, dass die Bindung virtueller Methoden nicht zur Kompilierungszeit mithilfe der statischen Bindung erfolgt, da dadurch eine Methode aus der Oberklasse aufgerufen würde, wie dies bei statischen Methoden der Fall ist, die früh gebunden werden. Wenn eine Methode aus einer Unterklasse aufgerufen wird, wurde ein bestimmtes Objekt verwendet, um die Funktion zur Laufzeit zu binden, und daher wird dynamische Bindung zum Binden virtueller Funktionen verwendet.
public class Main {
  public static void main(String[] args) {

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

    // Динамическое связывание на основе ein Objektа
    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
Wie Sie sehen, führte ein Methodenaufruf premium()zur Ausführung einer Methode aus der Unterklasse, während ein Methodenaufruf category()zur Ausführung einer Methode der Oberklasse führte. Dies liegt daran, dass premium()- eine virtuelle Methode ist, die mithilfe einer späten Bindung aufgelöst wird, während category()- eine statische Methode ist, die mithilfe einer statischen Bindung zur Kompilierungszeit nach Klassennamen aufgelöst wird.
Möchten Sie etwas über Java lesen? Treten Sie der Java-Entwicklergruppe bei !

Unterschiede zwischen früher und später Bindung in Java

Nachdem Sie nun wissen, wie Java Methodenaufrufe bindet und wie statisches und dynamisches Binden funktioniert, wollen wir noch einmal die wichtigsten Unterschiede zwischen früher und später Bindung in Java zusammenfassen:
  1. Die statische Verknüpfung erfolgt zur Kompilierungszeit, während die dynamische Verknüpfung zur Laufzeit erfolgt.

  2. Da die statische Verknüpfung früh im Lebenszyklus eines Programms erfolgt, wird sie als frühe Bindung bezeichnet. In ähnlicher Weise wird die dynamische Bindung auch als späte Bindung bezeichnet, da sie später in der Programmausführung erfolgt.

  3. Statische Bindung wird in der Java-Sprache verwendet, um überladene Methoden aufzulösen, während dynamische Bindung in der Java-Sprache verwendet wird, um überschriebene Methoden aufzulösen.

  4. Ebenso werden private, statische und Terminalmethoden mithilfe der statischen Bindung aufgelöst, da sie nicht überschrieben werden können, während alle virtuellen Methoden mithilfe der dynamischen Bindung aufgelöst werden.

  5. Bei der statischen Bindung werden nicht konkrete Objekte, sondern Typinformationen, also der Typ der Referenzvariablen, verwendet, um die gewünschte Methode zu entdecken. Andererseits verwendet die dynamische Bindung ein bestimmtes Objekt, um die gewünschte Methode in Java zu finden.
Hier ist eine gute Übung, die auf den Konzepten der statischen und dynamischen Bindung in Java basiert. Können Sie die Frage beantworten: „Was wird ausgegeben, wenn das folgende Programm ausgeführt wird?“
Unterschiede zwischen früher und später Bindung in Java - 2
Was wird dieses Programm ausgeben? Collection, Setoder HashSet? Das ist alles, was wir Ihnen über die Unterschiede zwischen früher (statischer) und später (dynamischer) Bindung in Java sagen wollten . Dies ist eine der besten Fragen für Java-Telefoninterviews, da sie zahlreiche Möglichkeiten bietet, die Tiefe des Wissens des Kandidaten zu testen. Denken Sie immer daran, dass private , statische und finale Methoden mithilfe statischer Verknüpfungen gebunden werden , während virtuelle Methoden mithilfe dynamischer Verknüpfungen gebunden werden . Ebenso ist das beste Beispiel für statische Bindung das Überladen von Methoden, während das Überschreiben dynamisch ist. Quelle
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION