Day346&347&348&349

在这里插入图片描述

高版本虚拟机,可以解释运行低版本字节码文件

在这里插入图片描述


[](()3、常量池:存放所有常量

Class文件是JVM的基石,常量池是Class文件的基石

在这里插入图片描述

[](()①常量池计数器

常量池计数器与常量池表数量的关系相差1

当常量池计数器为1时,常量池表中没有常量项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aEJaQrQ2-1627913746777)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802210419816.png)]

16(十六进制)===>22(十进制) = = =>代表有22-1个常量项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eY8ijPEt-1627913746779)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802212416879.png)]


[](()②常量池表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyIwDukx-1627913746780)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802210518689.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pbpgY48K-1627913746782)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/90FE40AD-F441-4EE9-AC84-C454336623E0.png)]


字面量和符号引用:↓

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZOgFKPN-1627913746783)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/C38BE91B-B892-4649-963E-FD16D9E22B46.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xg8aT81c-1627913746784)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802210944345.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnCjHGSj-1627913746785)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/633B44A4-BD0B-4C11-89F1-F82924257B80.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwNo25sS-1627913746786)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802212257729.png)]


常量类型和结构:↓

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJu2SU3m-1627913746787)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/0C0F81E0-9695-4BBC-837D-169D82EE03F8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0iiVjIx7-1627913746789)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802214138297.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9keDQp1F-1627913746790)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802220216819.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-duBCzWeQ-1627913746793)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/76379731-F6D2-4170-9AA1-BA7CB2E94334.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ku4hlECL-1627913746794)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/94A88A04-159D-472B-8563-961BB10F161D.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SzgK0iqt-1627913746795)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/D0747842-7F19-453A-940E-F33636C8A24C.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdZFWB61-1627913746796)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/0427B224-0197-4550-A6AB-BA2C1229644A.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhrBt1OG-1627913746798)(C:/Users/PePe/AppData/Local/Temp/mindmaster/1239293b2189/bin/2A3022E7-8EFD-4F4A-9391-294655267FC3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXrAEslV-1627913746799)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210802221439464.png)]

在class字节码文件中所表示的是指向某索引的符号有引用,不代表真正的内存地址

当被类加载器加载到内存中,所存放到运行时数据区中,此时的符号引用就编译成了真正指向真实内存地址的直接引用


[](()4、访问标识

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l8ee3vRd-1628002213622)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803205822566.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aOqGpK04-1628002213625)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803210014668.png)]

在这里插入图片描述


[](()5、类索引、父类索引、接口索引集合

当前类叫什么、当前类的父类谁、当前类实现了几个接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LwYz7Wy7-1628002213633)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803211202522.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5hbLJQUy-1628002213635)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803211223276.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DsfpzFVc-1628002213636)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803211035515.png)]


[](()6、字段表集合

平时我们说的类中的属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-14mPz6q3-1628002213639)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803211528217.png)]

[](()①字段计数器

在这里插入图片描述


[](()②字段表

字段(类成员变量)的描述符为:参数类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ak0weXGv-1628002213643)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803212359603.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9wGRjVO-1628002213644)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213227680.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wd2Kpx5V-1628002213645)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213315517.png)]


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T3BJq5Kc-1628002213646)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803212424621.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHlagspf-1628002213647)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803212459635.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40FSCge5-1628002213648)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803212517015.png)]


[](()7、方法表集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2muptDf-1628002213649)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213951806.png)]


[](()①方法计数器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-angnJu3x-1628002213651)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213741918.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Wz8RtaG-1628002213652)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803214432273.png)]


[](()②方法表

方法的描述符为:方法的入参列表、方法的返回值类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ygo6Wj9D-1628002213654)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213724264.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7rX36Ko4-1628002213656)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803220424025.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFBbuXgU-1652250080401)(https://img-blog.csdnimg.cn 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 /5f0da650dec4438ca04c588190795ca6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjg0NDY5,size_16,color_FFFFFF,t_70)]


[](()8、属性表集合

方法中可以有属性,字段中也可以有属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eUVPC06X-1628002213658)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803220608320.png)]

[](()①属性计数器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57W6gXwJ-1628002213659)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803213833046.png)]


[](()②属性表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sg3qlQA0-1628002213660)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803221025512.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZsSZqM6r-1628002213662)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803223702691.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLtE5hlo-1628002213663)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803221039052.png)]

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZTElAx0-1628002213666)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803221124638.png)]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


[](()9、总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bXKnnKU-1628002213676)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210803224703812.png)]


[](()四、使用javap指令解析Class文件


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mC6HkyT1-1628084883863)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210804203148913.png)]

[](()1、解析字节码的作用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nJ3sQh48-1628084883869)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210804203216714.png)]


[](()2、javac -g操作

在这里插入图片描述


[](()3、javap的用法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DdstDjvE-1628084883880)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210804204512772.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y9td6BQd-1628084883872)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20210804204150028.png)]

最全信息的写法javap -v -p XXX.class


[](()4、使用举例

  • 代码

public class JavapTest {

private int num;

boolean flag;

protected char gender;

public String info;

public static final int COUNTS = 1;

static {

String url = “www.atguigu.com”;

}

{

info = “java”;

}

public JavapTest() {

}

private JavapTest(boolean falg) {

this.flag = flag;

}

private void methodPrivate() {

}

int getNum(int i) {

return num + i;

}

protected char showGender() {

return gender;

}

public void showInfo() {

int i = 100;

System.out.println(info + i);

}

}

  • javap字节码文件分析

javap -v -p JavapTest.class

Classfile /C:/Users/achang/Desktop/JavapTest.class // 字节码文件所属的路径

Last modified 2021-2-24; size 1393 bytes // 最后修改时间,字节码文件的大小

MD5 checksum 2c764244fa3a95bfb346c9e416a7a3f6 // MD5散列值

Compiled from “JavapTest.java” // 源文件的名称

public class io.renren.JavapTest

minor version: 0 // 副版本

major version: 52 // 主版本

flags: ACC_PUBLIC, ACC_SUPER // 访问标识

//*************************** 常量池↓********************************

Constant pool:

#1 = Methodref #16.#48 // java/lang/Object.“”😦)V

#2 = String #49 // java

#3 = Fieldref #15.#50 // io/renren/JavapTest.info:Ljava/lang/String;

#4 = Fieldref #15.#51 // io/renren/JavapTest.flag:Z

#5 = Fieldref #15.#52 // io/renren/JavapTest.num:I

#6 = Fieldref #15.#53 // io/renren/JavapTest.gender:C

#7 = Fieldref #54.#55 // java/lang/System.out:Ljava/io/PrintStream;

#8 = Class #56 // java/lang/StringBuilder

#9 = Methodref #8.#48 // java/lang/StringBuilder.“”😦)V

#10 = Methodref #8.#57 // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

#11 = Methodref #8.#58 // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;

#12 = Methodref #8.#59 // java/lang/StringBuilder.toString:()Ljava/lang/String;

#13 = Methodref #60.#61 // java/io/PrintStream.println:(Ljava/lang/String;)V

#14 = String #62 // www.atguigu.com

#15 = Class #63 // io/renren/JavapTest

#16 = Class #64 // java/lang/Object

#17 = Utf8 num

#18 = Utf8 I

#19 = Utf8 flag

#20 = Utf8 Z

#21 = Utf8 gender

#22 = Utf8 C

#23 = Utf8 info

#24 = Utf8 Ljava/lang/String;

#25 = Utf8 COUNTS

#26 = Utf8 ConstantValue

#27 = Integer 1

#28 = Utf8

#29 = Utf8 ()V

#30 = Utf8 Code

#31 = Utf8 LineNumberTable

#32 = Utf8 LocalVariableTable

#33 = Utf8 this

#34 = Utf8 Lio/renren/JavapTest;

#35 = Utf8 (Z)V

#36 = Utf8 falg

#37 = Utf8 MethodParameters

#38 = Utf8 methodPrivate

#39 = Utf8 getNum

#40 = Utf8 (I)I

#41 = Utf8 i

#42 = Utf8 showGender

#43 = Utf8 ()C

#44 = Utf8 showInfo

#45 = Utf8

#46 = Utf8 SourceFile

#47 = Utf8 JavapTest.java

#48 = NameAndType #28:#29 // “”😦)V

#49 = Utf8 java

#50 = NameAndType #23:#24 // info:Ljava/lang/String;

#51 = NameAndType #19:#20 // flag:Z

#52 = NameAndType #17:#18 // num:I

#53 = NameAndType #21:#22 // gender:C

#54 = Class #65 // java/lang/System

#55 = NameAndType #66:#67 // out:Ljava/io/PrintStream;

#56 = Utf8 java/lang/StringBuilder

#57 = NameAndType #68:#69 // append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

#58 = NameAndType #68:#70 // append:(I)Ljava/lang/StringBuilder;

#59 = NameAndType #71:#72 // toString:()Ljava/lang/String;

#60 = Class #73 // java/io/PrintStream

#61 = NameAndType #74:#75 // println:(Ljava/lang/String;)V

#62 = Utf8 www.atguigu.com

#63 = Utf8 io/renren/JavapTest

#64 = Utf8 java/lang/Object

#65 = Utf8 java/lang/System

#66 = Utf8 out

#67 = Utf8 Ljava/io/PrintStream;

#68 = Utf8 append

#69 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder;

#70 = Utf8 (I)Ljava/lang/StringBuilder;

#71 = Utf8 toString

#72 = Utf8 ()Ljava/lang/String;

#73 = Utf8 java/io/PrintStream

#74 = Utf8 println

#75 = Utf8 (Ljava/lang/String;)V

//字段表集合的信息↓********

{

private int num; // 字段名

descriptor: I // 字段描述符,字段类型

flags: ACC_PRIVATE // 字段的访问标识

boolean flag;

descriptor: Z

flags:

protected char gender;

descriptor: C

flags: ACC_PROTECTED

public java.lang.String info;
va/io/PrintStream;

#68 = Utf8 append

#69 = Utf8 (Ljava/lang/String;)Ljava/lang/StringBuilder;

#70 = Utf8 (I)Ljava/lang/StringBuilder;

#71 = Utf8 toString

#72 = Utf8 ()Ljava/lang/String;

#73 = Utf8 java/io/PrintStream

#74 = Utf8 println

#75 = Utf8 (Ljava/lang/String;)V

//字段表集合的信息↓********

{

private int num; // 字段名

descriptor: I // 字段描述符,字段类型

flags: ACC_PRIVATE // 字段的访问标识

boolean flag;

descriptor: Z

flags:

protected char gender;

descriptor: C

flags: ACC_PROTECTED

public java.lang.String info;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值