|
|
||||||
TRICKS: Что вернёт метод?17.02.2014, 13:39. Показов 3656. Ответов 42
начинаем серию постов TRICKS по фишкам JVM и компилятора, вопросы для самообразования, не более
![]() просьба не компилировать, а попробовать подумать что вернёт метод
![]() ps: вопрос чисто академический, поэтому не стоит нести чушь про то что так писать негоже
1
|
||||||
| 17.02.2014, 13:39 | |
|
Ответы с готовыми решениями:
42
TRICKS: Что нам грядущая 8-чка готовит
Reflection: что вернет getField.getInt(null)? |
|
]:->
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
|
|
| 17.02.2014, 14:22 | |
|
Кликните здесь для просмотра всего текста
Угадал) Может, из-за того, что один return заменяется другим, если это возможно. (имеется в виду, возможность компиляции, как в данном случае).
0
|
|
|
3 / 3 / 1
Регистрация: 18.09.2013
Сообщений: 19
|
||||||
| 17.02.2014, 14:33 | ||||||
|
На java не пишу, но решил правильно.
Рассуждал примерно так: В строчке
Оператор break быстрее всего реализован на байт-коде как jump на оператор следующий после цикла. В результате возвращаем "boo" Если я прав, то задача, как раз неинтересная
0
|
||||||
|
|
||
| 17.02.2014, 14:43 [ТС] | ||
|
Добавлено через 1 минуту завтра напишу расклад по тому что происходит, если конечно меня не обгонит кто либо )
0
|
||
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|
| 17.02.2014, 14:49 | |
|
Долго искал подвох. Не нашел. Ответ в данном случае очевиден, надо только понимать, что делает return и как работает finally.
0
|
|
|
|
|||||||
| 17.02.2014, 14:51 [ТС] | |||||||
|
return "foo"; и выполнить его, и оно таки доходит и по идее по спекам должен выполниться final блок и потом вернуться указателем на точку где остановился return "foo" ) проверьте
0
|
|||||||
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|
| 17.02.2014, 15:06 | |
|
как я и думал, в результате будет "boo".
первым сработает return "foo";, но finally 100% вызовет break, что в свою очередь заставит выйти с цикла while и выполнить следующую строку : return "boo";
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|||||||
| 17.02.2014, 15:12 | |||||||
![]()
0
|
|||||||
|
|
||
| 17.02.2014, 15:14 | ||
|
Так как finally обязательно должен быть выполнен, то return "foo"; не дает повода ухода из метода, break прекращает цикл и следующее действие return "boo"; Как-то так
![]() Добавлено через 1 минуту
0
|
||
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|
| 17.02.2014, 15:16 | |
|
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|||
| 17.02.2014, 15:22 | |||
|
Можно проще. Натравливаете на класс javap -c, получаете то же самое, но не в красивом окошке, а в консоли. Добавлено через 1 минуту
1
|
|||
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|
| 17.02.2014, 15:35 | |
|
М-да, тут еще надо логику оптимизатора понимать... Иногда он оставляет хвостовой return, иногда делает по ходу кода.
0
|
|
|
|
||
| 17.02.2014, 15:52 [ТС] | ||
|
но по причине того что finally реализовано не на уровне JVM, а на уровне компилятора, то компилятор заменяет его гоутушками равно как и брейк, а так как оптимизатор не настолько умён как должен был бы быть, то после отработки брейка он вместо передачи управления обратно на первый return идёт дальше по коду и выполняет второй return, что согласитесь несколько не соответствует логике
0
|
||
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|
| 17.02.2014, 16:02 | |
|
0
|
|
|
|
||
| 17.02.2014, 16:07 [ТС] | ||
|
Добавлено через 3 минуты к слову сказать все кто ответил "правильно" (сказал что будет boo) кроме Skipy, на самом деле ошиблись, так как по правилам синтаксиса языка должен был отработать foo, а boo отработал только из-за дефекта оптимизатора и особенностей реализайии finally блока правильный ответ - должен быть foo, но из за багов-фич выведется boo
0
|
||
|
40 / 40 / 14
Регистрация: 26.12.2013
Сообщений: 309
|
|
| 17.02.2014, 16:09 | |
|
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
||||||||||||
| 17.02.2014, 16:11 | ||||||||||||
0
|
||||||||||||
|
|
||
| 17.02.2014, 16:14 [ТС] | ||
|
человек читающий код не обязан знать реализацию байткода в компиляторе, их вообще может быть тыщи, но так как де факто мы имеем дело с компилятором от sun->оракла, то у нас такое поведение, ничем кстати необоснованное, как и ваш юмор )))
0
|
||
|
46 / 36 / 15
Регистрация: 05.02.2014
Сообщений: 140
|
||||||
| 17.02.2014, 16:22 | ||||||
|
у меня 1 return
0
|
||||||
| 17.02.2014, 16:22 | |
|
Помогаю со студенческими работами здесь
20
Что вернет length для двумерного массива? Передать в метод "что-то", что бы метод мог в это "что-то" записать матрицу неизвестной размерности Что вернёт метод простого класса Что вернет функция
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|