JavaRush /Java блогу /Random-KY /Java'да эрте жана кеч байланыштын ортосундагы айырмачылык...

Java'да эрте жана кеч байланыштын ортосундагы айырмачылыктар

Группада жарыяланган
Java'да эрте (статикалык) жана кеч (динамикалык) байланыштын ортосундагы айырманы түшүнүү үчүн , адегенде байланышуу деген эмне экенин түшүнүшүңүз керек . Шилтеме шилтеме менен codeдун ортосунда байланыш бар экенин билдирет. Мисалы, сиз шилтеме берген өзгөрмө ал аныкталган codeго байланат. Ошо сыяктуу эле, чакырылып жаткан ыкма codeдун аныкталган жерине байланган.
Java-да эрте жана кеч байланыштын ортосундагы айырмачылыктар - 1
Java тorнде методду байланыштыруунун эки түрү бар: эрте байланыш (статикалык деп да аталат) жана кеч байланыш (тиешелүүлүгүнө жараша динамикалык) . Java'да методду чакыруу, бул метод компиляция убагында же программа иштеп жатканда жана an objectтер түзүлгөндө, конкреттүү codeго байланганын билдирет. Аты айтып тургандай, статикалык байланыш компиляция убагында болуп тургандыктан, табияты боюнча статикалык болуп саналат, бул code Java булак codeун класстык файлдарга компиляциялагандан кийин кайсы ыкманы чакырууну “билет” дегенди билдирет. Жана бул программанын жашоо циклинин алгачкы этабына тиешелүү болгондуктан, ал эрте милдеттүү деп да аталат. Башка жагынан алганда, динамикалык байланыш программа Java Virtual Machine тарабынан иштетилгенден кийин, иштөө убагында пайда болот. Бул учурда кайсы ыкманы чакыруу конкреттүү an object тарабынан аныкталат, андыктан компиляция убагында маалымат жеткorктүү эмес, анткени an objectтер иштөө убагында түзүлөт. Жана бул программанын жашоо циклинде кеч болуп жаткандыктан, ал Java тorнде кеч байланыш деп аталат.
Ошентип, Javaдагы статикалык жана динамикалык байланыштын негизги айырмасы , биринчиси компиляция убагында, маалымдама өзгөрмөнүн түрүнө негизделген, ал эми экинчиси кийинчерээк, конкреттүү an objectтерди колдонуу менен ишке ашат.
Муну жакшыраак түшүнүү жана Java интервьюларында берилген бул абдан популярдуу суроого жооп берүү үчүн дагы бир нече айырмачылыктарды карап көрөлү.

Java тorндеги эрте жана кеч байланыш

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 тorнде ашыкча жүктөлгөн ыкмаларды чечүү үчүн колдонулат, ал эми динамикалык байланыштыруу Java тorнде жокко чыгарылган ыкмаларды чечүү үчүн колдонулат.

  4. Ошо сыяктуу эле, купуя, статикалык жана терминалдык методдор статикалык байланышты колдонуу менен чечилет, анткени аларды жокко чыгаруу мүмкүн эмес, ал эми бардык виртуалдык ыкмалар динамикалык байланыштыруу аркылуу чечилет.

  5. Статикалык байланышта конкреттүү an objectтер эмес, типтеги маалымат колдонулат, башкача айтканда, керектүү ыкманы ачуу үчүн шилтеме өзгөрмөнүн түрү колдонулат. Башка жагынан алганда, динамикалык байланыш Java каалаган ыкманы табуу үчүн белгилүү бир an objectисин колдонот.
Бул жерде Javaдагы статикалык жана динамикалык байланыш түшүнүктөрүнө негизделген жакшы көнүгүү. «Төмөнкү программа аткарылганда эмне чыгат?» деген суроого жооп бере аласызбы ?
Java-да эрте жана кеч байланыштын ортосундагы айырмачылыктар - 2
Бул программа эмне берет? Collection, Setже HashSet? Бул биз сизге Javaдагы алгачкы (статикалык) жана кеч (динамикалык) байланыштын ортосундагы айырмачылыктар жөнүндө айткыбыз келген. Бул эң жакшы Java телефондук интервью суроолорунун бири, анткени ал талапкердин бorминин тереңдигин текшерүү үчүн бир нече мүмкүнчүлүктөрдү берет. Жеке , статикалык жана акыркы методдор статикалык байланышты колдонуу менен , ал эми виртуалдык методдор динамикалык байланышты колдонуу менен байланышканын унутпаңыз . Ошо сыяктуу эле, статикалык туташтыруунун эң жакшы мисалы - бул ыкманы ашыкча жүктөө, ал эми жокко чыгаруу динамикалык. Булак
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION