/ / Як можна визначити, чи є локальна змінна "фінальною" з байткода Java? (Пов'язано з BCEL) - java, bytecode, bcel

Як можна визначити, чи локальна змінна є "остаточною" з байт-коду Java? (Пов'язані з BCEL) - java, bytecode, bcel

Де знаходиться така інформація, як локальна змінна"фінал" зберігається в байт-коді Java? Я знаю, що для полів (глобальних змінних) і методів вони знаходяться в бітах прапора доступу, але, схоже, не можуть знайти еквівалент у таблиці місцевих змінних.

Мене цікавить це питання, оскільки я використовую BCEL, щоб перевірити, чи є локальна змінна остаточною, і знайшли еквівалент для полів, методів і класів у класі AccessFlags.

Заздалегідь спасибі.

Відповіді:

2 для відповіді № 1

Кінцевість локальних змінних перевіряється компілятором і не вносить до байт-коду. Ця інформація не потрібна під час виконання, а тому не зберігається в байт-коді.

JVM трактує кінцеві та неофіційні локальні змінні таким же чином.


1 для відповіді № 2

Коротка відповідь - ви можете "t" "Остаточний" прапор доступу для локальних змінних повідомляє компілятору, що значення змінної не може бути перепризначено. Див. Розділ 4.7.13 Специфікація JVM.


0 для відповіді № 3

Я не вірю, що ви можете визначити finalлокальної змінної; це можна довести, написавши невеликий метод з і без final ключове слово і порівнюючи байт-код.