A01、class文件简要说明

2023-12-28 03:10:16

关于 .class 文件的相关结构说明

img

1、字节码文件相关名词

类型名称数量
u4magic1
u2minor_version1
u2major_version1
u2constant_pool_count1
cp_infoconstant_poolconstant_pool_count - 1
u2access_flags1
u2this_class1
u2super_class1
u2interfaces_count1
u2interfacesinterfaces_count
u2fields_count1
field_infofieldsfields_count
u2methods_count1
method_infomethodsmethods_count
u2attribute_count1
attribute_infoattributesattributes_count

2、jdk编译版本对照表

JDK 编译器版本target 参数十六进制 minor.major十进制 major.minor
jdk1.1.8不能带 target 参数00 03 00 2D45.3
jdk1.2.2不带(默认为 -target 1.1)00 03 00 2D45.3
jdk1.2.2-target 1.200 00 00 2E46.0
jdk1.3.1_19不带(默认为 -target 1.1)00 03 00 2D45.3
jdk1.3.1_19-target 1.300 00 00 2F47.0
j2sdk1.4.2_10不带(默认为 -target 1.2)00 00 00 2E46.0
j2sdk1.4.2_10-target 1.400 00 00 3048.0
jdk1.5.0_11不带(默认为 -target 1.5)00 00 00 3149.0
jdk1.5.0_11-target 1.4 -source 1.400 00 00 3048.0
jdk1.6.0_01不带(默认为 -target 1.6)00 00 00 3250.0
jdk1.6.0_01-target 1.500 00 00 3149.0
jdk1.6.0_01-target 1.4 -source 1.400 00 00 3048.0
jdk1.7.0不带(默认为 -target 1.6)00 00 00 3250.0
jdk1.7.0-target 1.700 00 00 3351.0
jdk1.7.0-target 1.4 -source 1.400 00 00 3048.0

3、类的访问标识符

Flag NameValueInterpretation
ACC_PUBLIC0x0001public
ACC_FINAL0x0010final,不能被继承.
ACC_SUPER0x0020是否允许使用invokespecial指令,JDK1.2后,该值为true
ACC_INTERFACE0x0200是否是接口
ACC_ABSTRACT0x0400抽象类
ACC_SYNTHETIC0x1000该类不是由用户代码生成,运行时生成的,没有源码
ACC_ANNOTATION0x2000是否为注解
ACC_ENUM0x4000是否是枚举

4、字段的访问标识符

Flag NameValueInterpretation
ACC_PUBLIC0x0001public
ACC_PRIVATE0x0002private
ACC_PROTECTED0x0004protected
ACC_STATIC0x0008static.
ACC_FINAL0x0010final
ACC_VOLATILE0x0040volatile
ACC_TRANSIENT0x0080transient
ACC_SYNTHETIC0x1000synthetic; 没有源码,编译器生成
ACC_ENUM0x4000枚举类型

5、字段类型表示含义

简称含义备注
Bbyte
Cchar
Ddouble
Ffloat
Iint
Jlong
Sshort
Zboolean
Vvoid
L对象Ljava/lang/Object
[数组[[Ljava/lang/String; = String

6、方法的访问标识符

Flag NameValueInterpretation
ACC_PUBLIC0x0001public
ACC_PRIVATE0x0002private
ACC_PROTECTED0x0004protected
ACC_STATIC0x0008static
ACC_FINAL0x0010final
ACC_SYNCHRONIZED0x0020synchronized
ACC_BRIDGE0x0040编译器产生 桥接方法
ACC_VARARGS0x0080可变参数
ACC_NATIVE0x0100native
ACC_ABSTRACT0x0400abstract
ACC_STRICT0x0800strictfp
ACC_SYNTHETIC0x1000不在源码中,由编译器产生

使用示例:

  • void inc() ()V

  • void setId(int) (I)V

  • int indexOf(char[],int ) ([CI)I

7、扩展信息描述(attribute)

名称使用者描述
Deprecatedfield method字段、方法、类被废弃
ConstantValuefieldfinal常量
Codemethod方法的字节码和其他数据
Exceptionsmethod方法的异常
LineNumberTableCode_Attribute方法行号和字节码映射
LocalVaribleTableCode_Attribute方法局部变量表描述
SourceFileClass file源文件名
Syntheticfield method编译器产生的方法或字段

文章来源:https://blog.csdn.net/qq_37165235/article/details/135254934
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。