JavaRush /בלוג Java /Random-HE /הבדלים בין כריכה מוקדמת ומאוחרת בג'אווה

הבדלים בין כריכה מוקדמת ומאוחרת בג'אווה

פורסם בקבוצה
כדי להבין את ההבדל בין כריכה מוקדמת (סטטית) למאוחרת (דינמית) בג'אווה, תחילה עליך להבין מהי כריכה . קישור פירושו שיש קשר בין הקישור לקוד. לדוגמה, משתנה שאתה מתייחס אליו קשור לקוד שבו הוא מוגדר. באופן דומה, השיטה הנקראת קשורה למיקום בקוד שבו היא מוגדרת.
הבדלים בין כריכה מוקדמת ומאוחרת בג'אווה - 1
ישנם שני סוגים של כריכת שיטה בשפת ג'אווה: כריכה מוקדמת (נקראת גם סטטית) וכריכה מאוחרת ( בהתאמה, דינמית) . קריאה למתודה ב-Java פירושה שהשיטה קשורה לקוד ספציפי, או בזמן הידור או בזמן ריצה, כאשר התוכנית פועלת ואובייקטים נוצרים. כפי שהשם מרמז, קישור סטטי הוא יותר סטטי באופיו כפי שהוא קורה בזמן הקומפילציה, כלומר הקוד "יודע" לאיזו שיטה לקרוא לאחר הידור של קוד המקור של Java לקבצי מחלקה. ומכיוון שהכוונה היא לשלב המוקדם של מחזור החיים של התוכנית, היא נקראת גם כריכה מוקדמת. מצד שני, קישור דינמי מתרחש בזמן ריצה, לאחר שהתוכנית מופעלת על ידי ה-Java Virtual Machine. במקרה זה, איזו שיטה להתקשר נקבעת על ידי האובייקט הספציפי, כך שהמידע אינו זמין בזמן ההידור מכיוון שאובייקטים נוצרים בזמן ריצה. ומכיוון שזה קורה מאוחר במחזור החיים של התוכנית, זה נקרא איגוד מאוחר בג'אווה.
לכן, ההבדל המהותי בין איגוד סטטי ודינאמי ב-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:
  1. קישור סטטי מתרחש בזמן הידור, ואילו קישור דינמי מתרחש בזמן ריצה.

  2. מכיוון שקישור סטטי מתרחש בשלב מוקדם במחזור החיים של תוכנית, זה נקרא קשירה מוקדמת. באופן דומה, כריכה דינמית נקראת גם כריכה מאוחרת מכיוון שהיא מתרחשת מאוחר יותר בביצוע התוכנית.

  3. כריכה סטטית משמשת בשפת Java כדי לפתור שיטות עמוסות יתר, בעוד שקישור דינמי משמש בשפת Java כדי לפתור שיטות שדרסו.

  4. כמו כן, שיטות פרטיות, סטטיות ומסוף נפתרות באמצעות כריכה סטטית מכיוון שלא ניתן לעקוף אותן, בעוד שכל השיטות הוירטואליות נפתרות באמצעות כריכה דינמית.

  5. במקרה של כריכה סטטית, לא משתמשים באובייקטים קונקרטיים, אלא במידע על סוג, כלומר, משתמשים בסוג משתנה ההתייחסות לגילוי השיטה הרצויה. מצד שני, כריכה דינמית משתמשת באובייקט ספציפי כדי למצוא את השיטה הרצויה ב-Java.
הנה תרגיל טוב המבוסס על המושגים של כריכה סטטית ודינמית ב-Java. האם תוכל לענות על השאלה: "מה ייצא כאשר התוכנית הבאה תופעל?"
הבדלים בין כריכה מוקדמת ומאוחרת בג'אווה - 2
מה תפיק התוכנית הזו? Collection, Setאו HashSet? זה כל מה שרצינו לספר לכם על ההבדלים בין כריכה מוקדמת (סטטית) ומאוחרת (דינמית) בג'אווה. זוהי אחת משאלות הראיון הטלפוניות הטובות ביותר בג'אווה מכיוון שהיא מספקת לא מעט הזדמנויות לבחון את עומק הידע של המועמד. זכור תמיד ששיטות פרטיות , סטטיות וסופיות כרוכות באמצעות קישור סטטי , בעוד ששיטות וירטואליות כרוכות באמצעות קישור דינמי . באופן דומה, הדוגמה הטובה ביותר לכריכה סטטית היא עומס יתר של שיטה, בעוד שהעקיפה היא דינמית. מָקוֹר
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION