A01、class文件简要说明

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

A01、class文件简要说明_第1张图片

1、字节码文件相关名词

类型 名称 数量
u4 magic 1
u2 minor_version 1
u2 major_version 1
u2 constant_pool_count 1
cp_info constant_pool constant_pool_count - 1
u2 access_flags 1
u2 this_class 1
u2 super_class 1
u2 interfaces_count 1
u2 interfaces interfaces_count
u2 fields_count 1
field_info fields fields_count
u2 methods_count 1
method_info methods methods_count
u2 attribute_count 1
attribute_info attributes attributes_count

2、jdk编译版本对照表

JDK 编译器版本 target 参数 十六进制 minor.major 十进制 major.minor
jdk1.1.8 不能带 target 参数 00 03 00 2D 45.3
jdk1.2.2 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00 00 2E 46.0
jdk1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00 00 2F 47.0
j2sdk1.4.2_10 不带(默认为 -target 1.2) 00 00 00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00 00 30 48.0
jdk1.5.0_11 不带(默认为 -target 1.5) 00 00 00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00 00 30 48.0
jdk1.6.0_01 不带(默认为 -target 1.6) 00 00 00 32 50.0
jdk1.6.0_01 -target 1.5 00 00 00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00 00 30 48.0
jdk1.7.0 不带(默认为 -target 1.6) 00 00 00 32 50.0
jdk1.7.0 -target 1.7 00 00 00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00 00 30 48.0

3、类的访问标识符

Flag Name Value Interpretation
ACC_PUBLIC 0x0001 public
ACC_FINAL 0x0010 final,不能被继承.
ACC_SUPER 0x0020 是否允许使用invokespecial指令,JDK1.2后,该值为true
ACC_INTERFACE 0x0200 是否是接口
ACC_ABSTRACT 0x0400 抽象类
ACC_SYNTHETIC 0x1000 该类不是由用户代码生成,运行时生成的,没有源码
ACC_ANNOTATION 0x2000 是否为注解
ACC_ENUM 0x4000 是否是枚举

4、字段的访问标识符

Flag Name Value Interpretation
ACC_PUBLIC 0x0001 public
ACC_PRIVATE 0x0002 private
ACC_PROTECTED 0x0004 protected
ACC_STATIC 0x0008 static.
ACC_FINAL 0x0010 final
ACC_VOLATILE 0x0040 volatile
ACC_TRANSIENT 0x0080 transient
ACC_SYNTHETIC 0x1000 synthetic; 没有源码,编译器生成
ACC_ENUM 0x4000 枚举类型

5、字段类型表示含义

简称 含义 备注
B byte
C char
D double
F float
I int
J long
S short
Z boolean
V void
L 对象 Ljava/lang/Object
[ 数组 [[Ljava/lang/String; = String

6、方法的访问标识符

Flag Name Value Interpretation
ACC_PUBLIC 0x0001 public
ACC_PRIVATE 0x0002 private
ACC_PROTECTED 0x0004 protected
ACC_STATIC 0x0008 static
ACC_FINAL 0x0010 final
ACC_SYNCHRONIZED 0x0020 synchronized
ACC_BRIDGE 0x0040 编译器产生 桥接方法
ACC_VARARGS 0x0080 可变参数
ACC_NATIVE 0x0100 native
ACC_ABSTRACT 0x0400 abstract
ACC_STRICT 0x0800 strictfp
ACC_SYNTHETIC 0x1000 不在源码中,由编译器产生

使用示例:

  • void inc() ()V

  • void setId(int) (I)V

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

7、扩展信息描述(attribute)

名称 使用者 描述
Deprecated field method 字段、方法、类被废弃
ConstantValue field final常量
Code method 方法的字节码和其他数据
Exceptions method 方法的异常
LineNumberTable Code_Attribute 方法行号和字节码映射
LocalVaribleTable Code_Attribute 方法局部变量表描述
SourceFile Class file 源文件名
Synthetic field method 编译器产生的方法或字段

你可能感兴趣的:(JVM专栏,JVM,字节码)