Maison Java javaDidacticiel Concepts et différences entre la liaison statique et la liaison dynamique dans l'analyse du code Java

Concepts et différences entre la liaison statique et la liaison dynamique dans l'analyse du code Java

Jul 17, 2017 pm 03:59 PM
java 动态 绑定

Il existe deux méthodes de liaison en Java, l'une est la liaison statique, également appelée liaison anticipée. L’autre est la liaison dynamique, également appelée liaison tardive.

Le concept de liaison de programme :

La liaison fait référence à l'association d'un appel de méthode avec la classe (corps de la méthode) dans laquelle se trouve la méthode. Pour Java, la liaison est divisée en liaison statique et liaison dynamique ; ou liaison précoce et liaison tardive

Liaison statique (liaison anticipée du compilateur) :

La méthode a été lié avant l'exécution du programme et est implémenté par le compilateur ou un autre éditeur de liens. Par exemple : C. Pour Java, cela peut être compris comme une liaison lors de la compilation du programme ; en particulier, les seules méthodes en Java sont les méthodes finales, statiques, privées et constructeur, qui sont des liaisons précoces

liaisons dynamiques (exécutions de liaison tardives Liaison tardive) :

Liaison tardive : liaison basée sur le type de l'objet spécifique au moment de l'exécution.

Si un langage implémente une liaison tardive, il doit également fournir un mécanisme pour déterminer le type de l'objet pendant l'exécution et appeler respectivement les méthodes appropriées. C'est-à-dire que le compilateur ne connaît toujours pas le type de l'objet pour le moment, mais le mécanisme d'appel de méthode peut enquêter par lui-même et trouver le corps de méthode correct. Différentes langues implémentent la liaison tardive de différentes manières. Pensez-y de cette façon : ils doivent tous insérer un type spécial d’informations dans l’objet.

Le processus de liaison dynamique :

  • La machine virtuelle extrait la table de méthodes du type réel de l'objet

  • Signature de méthode de recherche de machine virtuelle

  • Méthode d'appel

À propos du résumé lié à la liaison :

Après avoir compris les concepts des trois, nous avons constaté que Java appartient à la fin obligatoire. En Java, presque toutes les méthodes sont liées tardivement. Les méthodes liées dynamiquement appartiennent à des sous-classes ou à des classes de base au moment de l'exécution. Mais il y en a aussi des spéciales. Étant donné que les méthodes statiques et les méthodes finales ne peuvent pas être héritées, leurs valeurs peuvent être déterminées au moment de la compilation. Un point particulier à noter est que les méthodes et les variables membres déclarées en privé ne peuvent pas être héritées par les sous-classes. Toutes les méthodes privées sont implicitement désignées comme finales (de là, nous savons : déclarer les méthodes comme type final consiste à empêcher la méthode d'être écrasée. , la seconde est de désactiver efficacement la liaison dynamique en Java). La liaison tardive en Java est implémentée par la JVM. Nous n'avons pas besoin de la déclarer explicitement, mais C++ est différent. Nous devons déclarer explicitement qu'une méthode a une liaison tardive. La conversion ascendante ou le polymorphisme en Java est réalisé à l'aide de la liaison dynamique, donc comprendre la liaison dynamique signifie la conversion ascendante et le polymorphisme.

Pour les méthodes en Java, à l'exception des méthodes finales, statiques, privées et constructeur qui sont pré-liées, toutes les autres méthodes sont liées dynamiquement. La liaison dynamique se produit généralement sous la déclaration de conversion entre la classe parent et la sous-classe :

Par exemple : Parent p = new Children();

Le Le processus spécifique est le suivant :

1. Le compilateur vérifie le type déclaré et le nom de méthode de l'objet. Supposons que nous appelions la méthode x.f(args) et que x ait été déclaré comme objet de classe C, alors le compilateur énumérera toutes les méthodes nommées f dans la classe C et les méthodes f héritées de la super classe de classe C

2. Ensuite, le compilateur vérifie les types de paramètres fournis dans l'appel de méthode. Si parmi toutes les méthodes nommées f, il existe un type de paramètre qui correspond le mieux au type de paramètre fourni par l'appel, alors cette méthode est appelée "résolution de surcharge"

3. et utilise dynamique Lorsqu'une liaison appelle une méthode, la machine virtuelle doit appeler une version de la méthode qui correspond au type réel de l'objet pointé par x. Supposons que le type réel soit D (une sous-classe de C). Si la classe D définit f(String), alors cette méthode est appelée, sinon la méthode f(String) est recherchée dans la superclasse de D, et ainsi de suite. 🎜>

Réflexion sur le problème :

Comment fournir aux utilisateurs de la méthode une méthode pour accomplir une tâche. Que se passe-t-il si l’utilisateur a des exigences particulières et peut-il personnaliser sa propre méthode ?

Connaissances impliquées :

Classes enfants et parents, interfaces, transformation ascendante, liaison dynamique

Code spécifique :


package com.chengxuyuanzhilu;
public interface MyInterfaces {
  void doting();
}
package com.chengxuyuanzhilu;
public class Drink implements MyInterfaces {
  @Override
  public void doting() {
    System.out.println("我在喝水");
  }
}
package com.chengxuyuanzhilu;
public class Eat implements MyInterfaces {
  @Override
  public void doting() {
    System.out.println("我在吃东西");
  }
}
package com.chengxuyuanzhilu;
public class Run implements MyInterfaces {
  @Override
  public void doting() {
    System.out.println("我在奔跑");
  }
}
package com.chengxuyuanzhilu;
public class TestDynamicBind {
  public static void main(String[] args) {
    MyInterfaces my = null;
    my = new Eat();
    bind(my);
    my = new Drink();
    bind(my);
    my = new Run();
    bind(my);      
  }
  static void bind(MyInterfaces my){
    my.doting();  
    }
}
Copier après la connexion
Comparaison des différences

1. La liaison statique se produit au moment de la compilation, la liaison dynamique se produit au moment de l'exécution

2. Utiliser privé ou statique ou final modifié. variables ou méthodes, utilisez la liaison statique. Les méthodes virtuelles (méthodes qui peuvent être remplacées par des sous-classes) seront liées dynamiquement en fonction de l'objet d'exécution.
3. La liaison statique est effectuée à l'aide des informations de classe, tandis que la liaison dynamique doit être effectuée à l'aide des informations sur l'objet.
4. La méthode surchargée est complétée à l'aide d'une liaison statique, tandis que la méthode de substitution est complétée à l'aide d'une liaison dynamique.

Vérification

La liaison dynamique ne peut pas être directement vérifiée à l'aide de javap, et s'il est prouvé que la liaison statique n'est pas effectuée, cela signifie que la liaison dynamique est effectuée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles