六、特殊字符串
常量池容纳的符号引用包括三种特殊的字符串:全限定名、简单名称、描述符。全限定名为类或接口的全限定名,如java.lang.Object对象的全限定名为java/lang/Object,用/代替.即可。简单名称为字段名或方法名的简单名称,如Object对象的toString()方法的简单名称为toString,描述符我们在之前已经介绍过了。
七、指令介绍
7.1 方法调用指令:
1. invokevirtual,用于调用对象的实例方法,根据对象的实际类型进行分派。
2. invokeinterface,用于调用接口方法,在运行时搜索一个实现了该接口方法的对
象,找出合适的方法进行调用。
3. invokespecial,用于调用需要特殊处理的实例方法,包括实例初始化方法、私有方法、父类方法。
4. invokestatic,用于调用类方法,static方法。
5. invokedynamic,用于在运行时动态解析出调用点限定符所引用的方法,并执行该方法。
7.2 返回指令
ireturn(boolean、byte、char、short、int)、lreturn、freturn、dreturn、areturn(返回为对象引用类型)、return(返回为void)
7.3 同步指令
虚拟机支持方法级的同步和方法内部一段指令序列的同步,都使用管程(Monitor)来支持。方法级(synchronized修饰)同步时隐式的,无需通过字节码指令来控制,方法调用时检查ACC_SYNCHRONIZED标志。方法内部的synchronized语句块使用
monitorenter,monitorexit指令来确保同步。
七、总结
class文件看似很复杂,其实经过分析我们发现class文件并不难,通过分析class文件,我们知道了源程序经过编译器编译之后如何组织在class文件中,进而为虚拟机执行程序提供搭起了桥梁。也相信经过分析,读者也能够分析class文件了,那么我们的目的也就达到了,谢谢各位园友的观看~