LineNumberTable:这个属性用来表示code数组中的字节码和Java代码行数之间的关系 。这个属性可以用来在调试的时候定位代码的执行行数 。
LocalVariableTable:局部变量表,当前类中只有唯一的局部变量,而这个局部变量就是this当前对象 。
局部变量表属性类似于行号表属性 。
请注意:
Java源代码角度:Java类中的实例方法中可以直接使用this 。
Java字节码角度: Java类中的非静态方法,即实例方法中的这个this实际是通过编译器隐示的作为方法的第一个参数传递进来(有点类似于Python中的方法,其方法中的第一个参数都会传递一个self变量,表示当前对象本身) 。这样使得每一个实例方法内部都可以很顺利的访问this 。换句话说针对类的实例方法它至少会有一个LocalVariable局部变量,这个变量就是this 。
4.7 字段/方法描述符在JVM规范中,每个变量/字段都有描述信息,描述信息主要的作用是描述字段的数据类型、方法的参数列表(包括数量、类型与顺序)与返回值 。根据描述符规则,基本数据类型和代表无返回值的void类型都用一个大写字符来表示,对象类型则使用字符L加对象的全限定名称来表示 。为了压缩字节码文件的体积,对于基本数据类型,JVM都只使用一个大写字母来表示,如下所示:
B - byte,C - char,D - double,F - float,I - int,J - long,S - short,Z - boolean,V - void,L - 对象类型,如Ljava/lang/String;
数组类型: 针对数组类型来说,每一个维度使用一个前置的[来表示,如:
int数组被记录[I,String[]二维数组被记录为[[Ljava/lang/String;
方法描述符
用描述符描述方法时,按照先参数列表,后返回值的顺序来描述 。参数列表按照参数的严格顺序放在一组之内,如方法:
String getInfoByIdAndName(int id, String name),该方法的描述符为:(I, Ljava/lang/String;)Ljava/lang/String;Java字节码文件的工具推荐:https://github.com/ingokegel/jclasslib
【这一次,彻底弄懂 Java 字节码文件】
推荐阅读
- 如何彻底清理手机垃圾,手机内存释放好几个G
- 水果|护肤10年总碰壁!这一次终于选对了
- 绿茶、白茶、黄茶、青茶、红茶、黑茶,那下末于弄懂了!
- 黑科技从未黑的如此彻底 小米mix测评
- 一招教你彻底除口臭 彻底治疗口臭
- 飞机|巨亏超400亿!3大航彻底“入冬”东航净亏损超122亿 疫情下大家出行锐减
- |这一次,她是真的生气了,他该怎么办?
- 烦人的网页弹窗广告无处不在?3种方法帮你彻底关闭 网页弹窗广告
- 饵料|钓鱼“观漂识鱼”,弄懂这几种疑难漂相,可增加扬竿中鱼率
- 谈资今年没有时尚奥斯卡 2020年Met Gala彻底取消
