JavaRush /Блоги Java /Random-TG /Тафовут байни ҳатмии барвақт ва дер дар Java

Тафовут байни ҳатмии барвақт ва дер дар Java

Дар гурӯҳ нашр шудааст
Барои фаҳмидани фарқи байни ҳатмии барвақтӣ (статикӣ) ва дер (динамикӣ) дар Java, шумо аввал бояд бифаҳмед, ки ҳатмӣ чист . Пайвастшавӣ маънои онро дорад, ки байни пайванд ва code робита вуҷуд дорад. Масалан, тағирёбандае, ки шумо истинод мекунед, ба codeе, ки дар он муайян шудааст, вобаста аст. Ба ҳамин монанд, усули даъватшаванда ба маконе, ки дар code муайян карда шудааст, вобаста аст.
Тафовут байни ҳатмии барвақт ва дер дар Java - 1
Дар забони Java ду намуди усули ҳатмӣ вуҷуд дорад: ҳатмии барвақт (инчунин статикӣ номида мешавад) ва ҳатмии дер (мутаносибан динамикӣ) . Даъват кардани усул дар Java маънои онро дорад, ки усул ба рамзи мушаххас вобаста аст, ё дар вақти компиляция ё дар вақти иҷро, вақте ки барнома иҷро мешавад ва an objectҳо сохта мешаванд. Тавре ки аз ном бармеояд, пайванди статикӣ табиати статикӣ дорад, зеро он дар вақти компилясия рух медиҳад, яъне code "медонад" ки пас аз тартиб додани codeи ибтидоии Java ба файлҳои синф кадом усулро даъват кардан лозим аст. Ва азбаски ин ба марҳилаи аввали давраи ҳаёти барнома дахл дорад, онро ҳатмии барвақт низ меноманд. Аз тарафи дигар, пайвасти динамикӣ дар вақти кор, пас аз он ки барнома аз ҷониби мошини виртуалии Java иҷро мешавад, ба амал меояд. Дар ин ҳолат, кадом усули занг аз ҷониби an objectи мушаххас муайян карда мешавад, бинобар ин, иттилоот дар вақти компилясия дастрас нест, зеро an objectҳо дар вақти иҷро сохта мешаванд. Ва азбаски ин дер дар давраи ҳаёти барнома рух медиҳад, онро дар Java ҳатмии дер меноманд.
Ҳамин тавр, фарқи асосии байни пайвастагии статикӣ ва динамикӣ дар Java дар он аст, ки аввалӣ барвақт, дар вақти тартибдиҳӣ, дар асоси навъи тағирёбандаи истинод ба амал меояд ва охирин баъдтар, дар вақти кор бо истифода аз an objectҳои мушаххас ба амал меояд.
Биёед якчанд фарқиятҳои дигарро бубинем, то инро беҳтар фаҳмем ва инчунин тавонистем ба ин саволи хеле маъмул, ки дар мусоҳибаҳои Java дода шудааст, ҷавоб диҳем.

Пайвасткунии барвақт ва дер дар Java

Байни ҳатмии статикӣ ва динамикӣ дар Java фарқиятҳои зиёд мавҷуданд, аммо муҳимтар аз ҳама он аст, ки JVM онҳоро чӣ гуна истифода мебарад. Оё шумо ягон бор дар ҳайрат шудаед, ки чӣ тавр JVM қарор мекунад, ки кадом усулро даъват кунад, вақте ки зиёда аз як усул бо ҳамон ном дар миқёс мавҷуд аст? Агар шумо ягон бор усули изофаборкунӣ ё бекоркуниро истифода карда бошед, шумо медонед, ки дар Java шумо метавонед якчанд усулҳоро бо ҳамон ном дошта бошед. Дар мавриди Java, JVM барои интихоби усули дилхоҳ ҳам пайвастагии статикӣ ва динамикӣ истифода мебарад.

Намунаи пайвастагии статикӣ ва динамикӣ дар Java

Дар ин барнома, шумо хоҳед дид, ки ҳатмии усулҳои виртуалӣ дар вақти компилясия бо истифода аз ҳатмии статикӣ ба амал намеояд, зеро ин усулро аз суперкласс даъват мекунад, чуноне ки бо усулҳои статикӣ, ки барвақт баста мешаванд. Агар усул аз зерсинф даъват карда шавад, an objectи мушаххас барои пайваст кардани функсия дар вақти иҷро истифода мешуд ва аз ин рӯ барои пайваст кардани функсияҳои виртуалӣ пайвасти динамикӣ истифода мешавад.
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 Developer ҳамроҳ шавед !

Тафовут байни ҳатмии барвақт ва дер дар Java

Акнун, ки шумо дар бораи он, ки чӣ тавр Java зангҳои методиро мепайвандад ва чӣ тавр пайвастшавии статикӣ ва динамикӣ кор мекунад, маълумот доред, биёед фарқиятҳои калидӣ байни ҳатмии барвақт ва дер дар Java-ро такрор кунем:
  1. Пайванди статикӣ дар вақти компилясия ба амал меояд, дар ҳоле ки пайванди динамикӣ дар вақти кор рух медиҳад.

  2. Азбаски пайванди статикӣ дар аввали давраи ҳаёти барнома рух медиҳад, онро ҳатмии барвақт меноманд. Ба ҳамин монанд, ҳатмии динамикӣ инчунин ҳатмии дер номида мешавад, зеро он дертар ҳангоми иҷрои барнома рух медиҳад.

  3. Пайвасткунии статикӣ дар забони Java барои ҳалли усулҳои изофабор истифода мешавад, дар ҳоле ки ҳатмии динамикӣ дар забони Java барои ҳалли усулҳои бекоршуда истифода мешавад.

  4. Ба ҳамин монанд, усулҳои хусусӣ, статикӣ ва терминалӣ бо истифода аз ҳатмии статикӣ ҳал карда мешаванд, зеро онҳоро аз байн бурдан мумкин нест, дар ҳоле ки ҳамаи усулҳои виртуалӣ бо истифода аз ҳатмии динамикӣ ҳал карда мешаванд.

  5. Дар ҳолати ҳатмии статикӣ, на an objectҳои мушаххас, балки иттилооти типӣ истифода мешаванд, яъне навъи тағирёбандаи истинод барои кашф кардани усули дилхоҳ истифода мешавад. Аз тарафи дигар, ҳатмии динамикӣ an objectи мушаххасро барои ёфтани усули дилхоҳ дар Java истифода мебарад.
Ин як машқи хубест, ки ба мафҳумҳои пайвастагии статикӣ ва динамикӣ дар Java асос ёфтааст. Оё шумо метавонед ба саволи зерин ҷавоб диҳед: "Ҳангоми иҷрои барномаи зерин чӣ натиҷа дода мешавад?"
Тафовут байни ҳатмии барвақт ва дер дар Java - 2
Ин барнома чӣ натиҷа медиҳад? Collection, Setё HashSet? Ин ҳама чизест, ки мо мехостем ба шумо дар бораи фарқиятҳои байни ҳатмии барвақт (статикӣ) ва дер (динамикӣ) дар Java нақл кунем. Ин яке аз беҳтарин саволҳои мусоҳибаи телефонии Java мебошад, зеро он барои санҷиши умқи дониши номзад имкониятҳои зиёде фароҳам меорад. Ҳамеша дар хотир доред, ки усулҳои хусусӣ , статикӣ ва ниҳоӣ бо истифода аз пайванди статикӣ , дар ҳоле ки усулҳои виртуалӣ бо истифода аз пайванди динамикӣ баста мешаванд . Ба ҳамин монанд, намунаи беҳтарини ҳатмии статикӣ ин изофабори усул аст, дар ҳоле ки барҳамдиҳӣ динамикӣ аст. Сарчашма
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION