Разъясните как в java читается код, сразу сверху в низ, плавно переходя от переменной к переменной от метода к методу и т д, или же происходят скачки по коду?
то что нашел в инете: Компиляция или интерпретация программы задает способ дальнейшего выполнения программы на устройстве. Программы написанные на языке Java всегда работают на основе интерпретации. Интерпретатор осуществляет пошаговое или построчное выполнение программы каждый раз, когда она выполняется. Во время интерпретации создается не выполняемый код, а виртуальный, который впоследствии выполняется виртуальной Java машиной.
т.е. встречая к примеру вызов одного из методов, он запоминает что произошел вызов и переходит к другому вызову метода запоминая и его, а уже после переходит к вызываемому методу и далее далее? или же когда встречается вызов метода происходит скачек к этому методу в нем производятся какие нибудь вычисления, возможно еще один вызов, и уж после он возвращается к нашему второму вызову метода?
Кирилл Калашников Норильск
5 уровень
Нашел статью по чтению кода, разъясните как в java читается код, сразу сверху в низ, плавно переходя от
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Антон НикольскийExpert
18 января 2018, 14:17
В плане логики работы программы интерпретация и "обычное" выполнение ничем не отличаются.
Интерпретация от "обычного" выполнения отличается следующим. В первом случае компилятор переводит в машинный код очередную команду, затем эта команда выполняется, затем компилятор переводит следующую команду и так далее. Во втором случае компилятор переводит в машинный код всю программу целиком, а затем она целиком выполняется. Т.е. разница в том, как переводить команды языка высокого уровня в язык низкого уровня - целиком или поочередно.
В Джаве интерпретация имеет особенности - сначала компилятор переводит всю программу целиком в байт-код, а затем уже при выполнении байт-кода его команды интепретируются Джава-машиной поочередно (хотя многие куски кода переводятся в машинный код целиком для оптимизации).
0
Антон НикольскийExpert
18 января 2018, 14:23
А в плане выполнения команд никаких спонтанных скачков не происходит. Исключение составляет создание объектов - перед выполнением конструктора инициализируются поля (переменные) объекта. Если класс вызывается впервые, то происходит загрузка класса.
В общем случае выполнение происходит так:
строка 1 метода А
строка 2 метода А
строка 3 метода А, содержащая вызов В
строка 1 метода В
строка 2 метода В
последняя строка метода В
строка 4 метода А
и т.д.
Ну и плюс циклы, ветвления и т.д. Выполнение команд начинается с метода main.
+2
Кирилл Калашников Норильск
18 января 2018, 14:31
вооот, этот ответ мне и нужен был,теперь я все понял, меня именно волновал основной вопрос что происходит при вызове я его получил, спасибо огромное)
0
Кирилл Калашников Норильск
18 января 2018, 14:53
блин а можно еще вопрос?))))
в этом примере
Man man = new Man();
Woman woman = new Woman();
man.wife = new Woman();
woman.husband = new Man();
т.е. у нас получается 2 объекта и 4 ссылки, 2ссылки(husband и man ссылаются на Man) и 2 ссылки(woman и wife ссылающиеся на Woman) ?
0
Антон НикольскийExpert
18 января 2018, 15:03
Нет, в вашем примере 4 ссылки и 4 объекта. Каждый вызов new Man() или new Woman() - это создание нового объекта. Чтобы 2 ссылки ссылались на один и тот же объект, нужно сделать следующее:
видео посмотреть.
Можно еще это +1
Кирилл Калашников Норильск
18 января 2018, 15:23
блин огромнейшее спасибо, разобрался)
0
Кирилл Калашников Норильск
18 января 2018, 13:23
Алгоритм работы простого интерпретатора
1)прочитать инструкцию;
2)проанализировать инструкцию и определить соответствующие действия;
3)выполнить соответствующие действия;
4)если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.
кароч чет я запутался)))
вот допустим ситуация, у нас есть программа с несколькими классами, и первый класс который будет выполнен это класс в котором присутствует метод main, JVM начинает читать код с самой верхней строки, натыкается на метод main, в нем куча ссылок на другие классы, получается он читает весь этот класс запоминает что там написано и потом читает все остальные классы?
или же если в классе лежит 2 класса, когда JVM читает код, она скачет по коду или читает его от строки к строке?
очень волнует этот вопрос меня, просьба либо хорошую сылочку скинуть ну или попробовать мне разжевать мой вопрос, ну или хотябы примерно подать информацию о том как JVM выполняет код программы, заранее благодарю
0