JavaRush /Java Blog /Random-TL /Mga pagkakaiba sa pagitan ng maaga at huli na pagbubuklod...

Mga pagkakaiba sa pagitan ng maaga at huli na pagbubuklod sa Java

Nai-publish sa grupo
Upang maunawaan ang pagkakaiba sa pagitan ng maaga (static) at huli (dynamic) na pagbubuklod sa Java, kailangan mo munang maunawaan kung ano ang pagbubuklod . Ang pag-link ay nangangahulugang mayroong koneksyon sa pagitan ng link at ng code. Halimbawa, ang isang variable na iyong tinutukoy ay nakatali sa code kung saan ito tinukoy. Gayundin, ang pamamaraan na tinatawag ay nakatali sa lokasyon sa code kung saan ito tinukoy.
Mga pagkakaiba sa pagitan ng maaga at huli na pagbubuklod sa Java - 1
Mayroong dalawang uri ng paraan ng pagbubuklod sa wikang Java: maagang pagbubuklod (tinatawag ding static) at huli na pagbubuklod (ayon sa pagkakabanggit, dynamic) . Ang pagtawag sa isang pamamaraan sa Java ay nangangahulugan na ang pamamaraan ay nakasalalay sa tiyak na code, alinman sa oras ng pag-compile o sa oras ng pagtakbo, kapag ang programa ay tumatakbo at ang mga bagay ay nilikha. Tulad ng iminumungkahi ng pangalan, ang static na pag-link ay mas static sa kalikasan dahil nangyayari ito sa oras ng pag-compile, ibig sabihin, ang code ay "alam" kung aling paraan ang tatawagan pagkatapos i-compile ang Java source code sa mga class file. At dahil ito ay tumutukoy sa maagang yugto ng ikot ng buhay ng programa, tinatawag din itong maagang pagbubuklod. Sa kabilang banda, ang dynamic na pag-link ay nangyayari sa runtime, pagkatapos na ang programa ay patakbuhin ng Java Virtual Machine. Sa kasong ito, kung aling paraan ang tawag ay tinutukoy ng partikular na bagay, kaya ang impormasyon ay hindi magagamit sa oras ng pag-compile dahil ang mga bagay ay nilikha sa oras ng pagtakbo. At dahil ito ay nangyayari sa huli sa ikot ng buhay ng programa, ito ay tinatawag na late binding sa Java.
Kaya, ang pangunahing pagkakaiba sa pagitan ng static at dynamic na binding sa Java ay ang una ay nangyayari nang maaga, sa oras ng pag-compile, batay sa uri ng reference variable, at ang huli ay nangyayari sa ibang pagkakataon, sa runtime, gamit ang mga kongkretong bagay.
Tingnan natin ang ilan pang pagkakaiba para mas maunawaan ito at masagot din ang napakasikat na tanong na ito sa mga panayam sa Java.

Maaga at Huling Pagbubuklod sa Java

Maraming pagkakaiba sa pagitan ng static at dynamic na binding sa Java, ngunit ang pinakamahalaga ay kung paano ginagamit ng JVM ang mga ito. Naisip mo na ba kung paano nagpapasya ang JVM kung aling paraan ang tatawagan kapag mayroong higit sa isang pamamaraan na may parehong pangalan sa saklaw? Kung nakagamit ka na ng paraan ng overloading o overriding, alam mo na sa Java maaari kang magkaroon ng maraming pamamaraan na may parehong pangalan. Sa kaso ng Java, ang JVM ay gumagamit ng parehong static at dynamic na binding upang piliin ang nais na paraan.

Halimbawa ng static at dynamic na binding sa Java

Sa program na ito, makikita mo na ang pagbubuklod ng mga virtual na pamamaraan ay hindi nangyayari sa oras ng pag-compile gamit ang static na pagbubuklod, dahil ito ay tatawag ng isang pamamaraan mula sa superclass, tulad ng nangyayari sa mga static na pamamaraan na maagang nakatali. Kung ang isang pamamaraan mula sa isang subclass ay tinatawag, isang partikular na bagay ang ginamit upang itali ang function sa runtime, at samakatuwid ang dynamic na binding ay ginagamit upang itali ang mga virtual na function.
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
Tulad ng nakikita mo, ang isang tawag sa pamamaraan premium()ay nagresulta sa pagpapatupad ng isang pamamaraan mula sa subclass, habang ang isang tawag sa pamamaraan category()ay nagresulta sa pagpapatupad ng isang superclass na pamamaraan. Ito ay dahil ang premium()- ay isang virtual na pamamaraan, na niresolba gamit ang late binding, habang category()- ay isang static na paraan, na niresolba gamit ang compile-time na static na binding ayon sa pangalan ng klase.
Interesado sa pagbabasa tungkol sa Java? Sumali sa Java Developer group !

Mga pagkakaiba sa pagitan ng maaga at huli na pagbubuklod sa Java

Ngayong mayroon ka nang hawakan sa kung paano nagbubuklod ang Java sa mga tawag sa pamamaraan at kung paano gumagana ang static at dynamic na pagbubuklod, balikan natin ang mga pangunahing pagkakaiba sa pagitan ng maaga at huli na pagbubuklod sa Java:
  1. Ang static na pag-link ay nangyayari sa oras ng pag-compile, habang ang dynamic na pag-link ay nangyayari sa oras ng pagtakbo.

  2. Dahil ang static na pag-link ay nangyayari nang maaga sa ikot ng buhay ng isang programa, ito ay tinatawag na maagang pagbubuklod. Katulad nito, ang dynamic na binding ay tinatawag ding late binding dahil nangyayari ito mamaya sa pagpapatupad ng program.

  3. Ginagamit ang static na binding sa wikang Java upang malutas ang mga overloaded na pamamaraan habang ginagamit ang dynamic na binding sa wikang Java upang malutas ang mga overridden na pamamaraan.

  4. Gayundin, ang mga pribado, static, at terminal na pamamaraan ay nireresolba gamit ang static na binding dahil hindi sila ma-override, habang ang lahat ng virtual na pamamaraan ay nireresolba gamit ang dynamic na binding.

  5. Sa kaso ng static na binding, hindi mga konkretong bagay ang ginagamit, ngunit uri ng impormasyon, iyon ay, ang uri ng reference variable ay ginagamit upang matuklasan ang nais na paraan. Sa kabilang banda, ang dynamic na binding ay gumagamit ng isang partikular na bagay upang mahanap ang gustong paraan sa Java.
Narito ang isang magandang ehersisyo batay sa mga konsepto ng static at dynamic na binding sa Java. Maaari mo bang sagutin ang tanong na: "Ano ang magiging output kapag ang sumusunod na programa ay naisakatuparan?"
Mga pagkakaiba sa pagitan ng maaga at huli na pagbubuklod sa Java - 2
Ano ang ilalabas ng program na ito? Collection, Seto HashSet? Iyon lang ang gusto naming sabihin sa iyo tungkol sa mga pagkakaiba sa pagitan ng maaga (static) at late (dynamic) na pagbubuklod sa Java. Isa ito sa pinakamahusay na mga tanong sa panayam sa telepono ng Java dahil nagbibigay ito ng kaunting pagkakataon upang subukan ang lalim ng kaalaman ng kandidato. Laging tandaan na ang pribado , static , at huling mga pamamaraan ay nakatali gamit ang static na pag-uugnay , habang ang mga virtual na pamamaraan ay nakatali gamit ang dynamic na pag-uugnay . Gayundin, ang pinakamagandang halimbawa ng static na binding ay ang overloading ng pamamaraan, habang ang overriding ay dynamic. Pinagmulan
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION