如何判断一个局部变量是否来自Java字节码的“最终”? (与BCEL相关)

时间:2011-10-09 14:00:11

标签: java bytecode bcel

诸如局部变量是否在Java字节码中存储的“最终”信息在哪里?我知道对于字段(全局变量)和方法,这些可以在访问标志位中找到,但似乎无法在局部变量表中找到等效项。

我对这个问题很感兴趣,因为我正在使用BCEL来检查局部变量是否是最终的,并找到了AccessFlags类中的字段,方法和类的等价物。

提前致谢。

3 个答案:

答案 0 :(得分:3)

编译器检查局部变量的最终结果,而不是字节码。此信息在运行时不是必需的,因此不存储在字节码中。

JVM以相同的方式处理final和non-final局部变量。

答案 1 :(得分:1)

简短回答 - 你不能。局部变量的'final'访问标志只告诉编译器不能重新赋值变量值。请参阅JVM specification的第4.7.13节。

答案 2 :(得分:0)

我不相信你可以确定局部变量的final;这可以通过编写一个带有和不带final关键字的小方法并比较字节码来证明。