概述
final在java中作为不可变语义的修饰词,接下来我们通过一段示例代码从字节码角度分析以下两点:
final在类中不同的地方声明是怎么样标识的?
为局部变量声明final有意义吗?
示例代码
public final class TestFinal {
private final int a = 10;
public final void testFinalMethod() {
System.out.println("testFinalMethod...");
}
public final void testFianlLocalVar() {
final Object obj = new Object();
}
}
复制代码
这段代码本身没有什么需要解读的, 我们来关注一下final声明在不同的位置,字节码层面是怎么标识的。
1. 声明final在类定义中
通过final修饰类, 根据虚拟机规范ClassFile结构如下:
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;