如何判断局部变量是否从 Java 字节码'final'?(与BCEL相关)



Java字节码中存储的信息(如局部变量是否为"final"(在哪里?我知道,对于字段(全局变量(和方法,这些都可以在访问标志位中找到,但似乎无法在局部变量表中找到等价的字段。

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

提前谢谢。

局部变量的终结性由编译器检查,不会进入字节码。这些信息在运行时是不需要的,因此不会存储在字节码中。

JVM以相同的方式处理最终和非最终局部变量。

简短的回答-你不能。仅局部变量的"final"访问标志告诉编译器变量值无法重新分配。请参阅JVM规范的第4.7.13节。

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

相关内容

  • 没有找到相关文章

最新更新