Ребят, очень прошу, помогите разобраться:
Проверьте, пожалуйста, правильно ли я понимаю:
1) Раннее связывание- компилятор связывет между собой ссылку и код. То есть, когда байт код попадает в JVM , то там уже знают, какой код и где брать .
2) Позднее- это когда в JVM происходит связывание.
Вопрос вот в чем: почему в момент компеляции компелятор не понимает, что мы создаем обьект и что будет вызван именно переопределенный метод этого обьекта? Мы же сначала пишем код по созданию обьекта, а потом вызываем его переопределенный метод. Не хватает мощности у компилятора, или зачем это было сделано? В позднем что получается... мол, вот ссылка на 3 разных кода (переопределенных метода), а ты (JVM) сам разбирайся, какй вызвать... Мы же вызываем их посредствам обьект.метод(), так почему сразу не связать их?
Dima
35 уровень
Ранее и позднее связывания
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
29 апреля 2019, 16:11решение
Тут старшие ребята может расскажут, от себя скажу, что есть два уровня понимания происходящего в JVM.
Теоретический (есть раннее и позднее связывание, или вот такой код медленнее вот такого).
И фактический. Сила Джавы в JVM и многочисленных оптимизациях на этапе компиляции и исполнения, что часто затираются границы между тем как оно звучит в теории, и как происходит на самом деле, там целый свой мир и есть отдельное направление в джава программировании, люди, которые занимаются оптимизацией, разработкой кастомных GC ,класслоадеры и прочая низкоуровневый (относительно нас, будущих формошлепов) стафф. Но этим занимаются прошаренные дядьки.
Для представления можно почитать Блог Шипилева
Как я понимаю на своем дилетантском уровне.
С точки зрения теории, что-то близко этого объяснения Раннее и позднее связывание Java
С точки зрения практического понимания/ассоциации.
Представь что есть какой-то web-application. Сервер, который принимает данные, поступающие через интернет-страничку и отдает эти данные обработанные.
И вот пользователь на страничке видит формочку. Где очень грубо говоря, он может отослать фотографию, текст, число , то есть разные данные и нажать кнопку SEND AND PRINT
У нас в коде есть строка вида
Object userObject= getObjectFromUser();
String s = userObject.toString();
А дальше интересно, объект может быть любым, для части различных видов объектов может быть переопределен метод toString , для части нет.
Как на этапе компиляции и начала исполнения кода в понедельник, мы можем совершить ранее связывание объекта, который мы получим в четверг, при условии что сам пользователь не знает какой тип объекта отправит до последнего момента? А приложение скомпилировано и работает.
Это грубый пример, но смысл думаю понятен.
+2
Dima
29 апреля 2019, 17:42
Да, более чем. Спасибо!
+1