Де знаходиться така інформація, як локальна змінна"фінал" зберігається в байт-коді Java? Я знаю, що для полів (глобальних змінних) і методів вони знаходяться в бітах прапора доступу, але, схоже, не можуть знайти еквівалент у таблиці місцевих змінних.
Мене цікавить це питання, оскільки я використовую BCEL, щоб перевірити, чи є локальна змінна остаточною, і знайшли еквівалент для полів, методів і класів у класі AccessFlags.
Заздалегідь спасибі.
Відповіді:
2 для відповіді № 1Кінцевість локальних змінних перевіряється компілятором і не вносить до байт-коду. Ця інформація не потрібна під час виконання, а тому не зберігається в байт-коді.
JVM трактує кінцеві та неофіційні локальні змінні таким же чином.
1 для відповіді № 2
Коротка відповідь - ви можете "t" "Остаточний" прапор доступу для локальних змінних повідомляє компілятору, що значення змінної не може бути перепризначено. Див. Розділ 4.7.13 Специфікація JVM.
0 для відповіді № 3
Я не вірю, що ви можете визначити final
локальної змінної; це можна довести, написавши невеликий метод з і без final
ключове слово і порівнюючи байт-код.