JavaRush /จาวาบล็อก /Random-TH /ความแตกต่างระหว่างการรวม Early และ Late ใน Java

ความแตกต่างระหว่างการรวม Early และ Late ใน Java

เผยแพร่ในกลุ่ม
เพื่อทำความเข้าใจความแตกต่างระหว่างการเชื่อมโยงระหว่างช่วงต้น (คงที่)และช่วงปลาย (ไดนามิก)ใน Java คุณต้องเข้าใจก่อนว่าการเชื่อมโยง คือ อะไร การลิงก์หมายถึงมีการเชื่อมต่อระหว่างลิงก์กับโค้ด ตัวอย่างเช่น ตัวแปรที่คุณอ้างอิงถูกผูกไว้กับโค้ดที่ตัวแปรนั้นถูกกำหนดไว้ ในทำนองเดียวกัน วิธีการที่ถูกเรียกนั้นถูกผูกไว้กับตำแหน่งในโค้ดที่มันถูกกำหนดไว้
ความแตกต่างระหว่างการเชื่อมโยงก่อนและหลังใน Java - 1
การผูกเมธอดในภาษา Java มีสองประเภท: การผูกล่วงหน้า (หรือที่เรียกว่า static) และการเชื่อม โยงล่าช้า (ตามลำดับ ไดนามิก ) การเรียกเมธอดใน Java หมายความว่าเมธอดนั้นเชื่อมโยงกับโค้ดเฉพาะ ทั้งในเวลาคอมไพล์หรือรันไทม์ เมื่อโปรแกรมรันและสร้างอ็อบเจ็กต์ ตามชื่อที่แนะนำ การเชื่อมโยงแบบคงที่มีลักษณะคงที่มากกว่าเมื่อเกิดขึ้นในเวลาคอมไพล์ ซึ่งหมายความว่าโค้ด "รู้" ว่าควรเรียกใช้เมธอดใดหลังจากคอมไพล์ซอร์สโค้ด Java ลงในไฟล์คลาส และเนื่องจากสิ่งนี้หมายถึงช่วงเริ่มต้นของวงจรชีวิตของโปรแกรม จึงถูกเรียกว่าการรวมล่วงหน้า ในทางกลับกัน การเชื่อมโยงแบบไดนามิกจะเกิดขึ้นที่รันไทม์ หลังจากที่โปรแกรมถูกรันโดย Java Virtual Machine ในกรณีนี้ วิธีการเรียกใช้จะถูกกำหนดโดยออบเจ็กต์เฉพาะ ดังนั้นข้อมูลจึงไม่พร้อมใช้งานในขณะคอมไพล์เนื่องจากออบเจ็กต์ถูกสร้างขึ้น ณ รันไทม์ และเนื่องจากสิ่งนี้เกิดขึ้นในช่วงท้ายของวงจรชีวิตของโปรแกรม จึงเรียกว่าการรวมล่าช้าใน Java
ดังนั้นความแตกต่างพื้นฐานระหว่างการเชื่อมโยงแบบสแตติกและไดนามิกใน Javaก็คือ การผูกแบบแรกจะเกิดขึ้นก่อนเวลา ณ เวลาคอมไพล์ ขึ้นอยู่กับประเภทของตัวแปรอ้างอิง และอย่างหลังจะเกิดขึ้นในภายหลังที่รันไทม์โดยใช้อ็อบเจ็กต์ที่เป็นรูปธรรม
เรามาดูความแตกต่างอีกเล็กน้อยเพื่อทำความเข้าใจสิ่งนี้ให้ดีขึ้น และสามารถตอบคำถามยอดนิยมนี้ที่ถูกถามในการสัมภาษณ์ Java ได้ด้วย

การผูกช่วงต้นและปลายใน Java

มีความแตกต่างมากมายระหว่างการเชื่อมโยงแบบคงที่และไดนามิกใน Java แต่สิ่งที่สำคัญที่สุดคือวิธีที่ JVM ใช้สิ่งเหล่านี้ คุณเคยสงสัยหรือไม่ว่า JVM ตัดสินใจว่าจะเรียกใช้วิธีใดเมื่อมีมากกว่าหนึ่งวิธีที่มีชื่อเดียวกันในขอบเขต หากคุณเคยใช้ method overloading หรือ overriding คุณจะรู้ว่าใน 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 !

ความแตกต่างระหว่างการรวม Early และ Late ใน Java

ตอนนี้ คุณได้เข้าใจและเข้าใจแล้วว่า Java เชื่อมโยงการเรียกเมธอดอย่างไร และวิธีการทำงานของการเชื่อมโยงแบบคงที่และไดนามิก เรามาสรุปความแตกต่างที่สำคัญระหว่างการเชื่อมโยงระหว่างช่วงต้นและช่วงหลังใน Java กัน:
  1. การเชื่อมโยงแบบคงที่เกิดขึ้นในเวลาคอมไพล์ ในขณะที่การเชื่อมโยงแบบไดนามิกเกิดขึ้น ณ รันไทม์

  2. เนื่องจากการลิงก์แบบสแตติกเกิดขึ้นในช่วงแรกของวงจรชีวิตของโปรแกรม จึงเรียกว่าการรวมล่วงหน้า ในทำนองเดียวกัน การผูกแบบไดนามิกเรียกอีกอย่างว่าการผูกล่าช้า เนื่องจากจะเกิดขึ้นในภายหลังในการทำงานของโปรแกรม

  3. การเชื่อมโยงแบบคงที่ใช้ในภาษา Java เพื่อแก้ไขวิธีการโอเวอร์โหลด ในขณะที่การเชื่อมโยงแบบไดนามิกใช้ในภาษา Java เพื่อแก้ไขวิธีการที่ถูกแทนที่

  4. ในทำนองเดียวกัน วิธีการส่วนตัว คงที่ และเทอร์มินัลได้รับการแก้ไขโดยใช้การเชื่อมโยงแบบคงที่ เนื่องจากไม่สามารถเขียนทับได้ ในขณะที่วิธีการเสมือนทั้งหมดได้รับการแก้ไขโดยใช้การเชื่อมโยงแบบไดนามิก

  5. ในกรณีของการเชื่อมโยงแบบคงที่ ไม่ใช่วัตถุที่เป็นรูปธรรมที่ใช้ แต่เป็นข้อมูลประเภท นั่นคือ ประเภทของตัวแปรอ้างอิงที่ใช้เพื่อค้นหาวิธีการที่ต้องการ ในทางกลับกัน การเชื่อมโยงแบบไดนามิกใช้วัตถุเฉพาะเพื่อค้นหาวิธีการที่ต้องการใน Java
ต่อไปนี้เป็นแบบฝึกหัดที่ดีตามแนวคิดของการผูกแบบคงที่และไดนามิกใน Java คุณสามารถตอบคำถาม: "สิ่งที่จะออกมาเมื่อรันโปรแกรมต่อไปนี้"
ความแตกต่างระหว่างการเชื่อมโยงก่อนและหลังใน Java - 2
โปรแกรมนี้จะได้ผลลัพธ์อะไร? Collection, SetหรือHashSet? นั่นคือทั้งหมดที่เราต้องการบอกคุณเกี่ยวกับความแตกต่างระหว่าง การเชื่อมโยง ช่วงต้น (คงที่)และช่วงท้าย (ไดนามิก)ใน Java นี่เป็นหนึ่งในคำถามสัมภาษณ์ทางโทรศัพท์ Java ที่ดีที่สุดเพราะมีโอกาสค่อนข้างน้อยในการทดสอบความรู้เชิงลึกของผู้สมัคร โปรดจำไว้เสมอว่า วิธี การส่วนตัวคงที่และสุดท้ายจะถูกผูกไว้โดยใช้การเชื่อมโยงแบบคงที่ในขณะที่วิธีการเสมือนจะถูกผูกไว้โดยใช้การเชื่อมโยงแบบไดนามิก ในทำนองเดียวกัน ตัวอย่างที่ดีที่สุดของการเชื่อมโยงแบบคงที่คือการโอเวอร์โหลดเมธอด ในขณะที่การแทนที่จะเป็นแบบไดนามิก แหล่งที่มา
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION