Java字节码中存储的信息(如局部变量是否为"final"(在哪里?我知道,对于字段(全局变量(和方法,这些都可以在访问标志位中找到,但似乎无法在局部变量表中找到等价的字段。
我对这个问题很感兴趣,因为我正在使用BCEL来检查局部变量是否是final,并且已经在类AccessFlags中找到了字段、方法和类的等价变量。
提前谢谢。
局部变量的终结性由编译器检查,不会进入字节码。这些信息在运行时是不需要的,因此不会存储在字节码中。
JVM以相同的方式处理最终和非最终局部变量。
简短的回答-你不能。仅局部变量的"final"访问标志告诉编译器变量值无法重新分配。请参阅JVM规范的第4.7.13节。
我不相信你能确定局部变量的final
ity;这可以通过编写一个带有和不带有final
关键字的小方法并比较字节码来证明。