image.png
1.编译
首先我们需要编译,编译就是把java文件编译为.class文件,这个class文件是无法阅读的,如果要阅读就需要反编译来看:
image.png
我们通过反编译,把文件输出到一个txt文件中来看,我这边就反编译了自己项目中用到的一个class文件来看:
//描述信息
Classfile /Users/wesfer/IdeaProjects/test-project/build/classes/java/main/com/neucloud/testproject/controller/BasicDataController.class
//描述信息
Last modified 2021-2-4; size 7271 bytes
MD5 checksum 9b89e650fabd0146a7c29f0dbc606535
Compiled from "BasicDataController.java"
public class com.neucloud.testproject.controller.BasicDataController
minor version: 0
major version: 52 //使用的jdk版本
flags: ACC_PUBLIC, ACC_SUPER
//常量池
Constant pool:
#1 = Methodref #22.#121 // java/lang/Object."<init>":()V
#2 = Fieldref #19.#122 // com/neucloud/testproject/controller/BasicDataController.basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
#3 = InterfaceMethodref #123.#124 // com/neucloud/testproject/service/BasicDataService.findMateriel:(Ljava/lang/String;)Ljava/util/List;
#4 = Class #125 // java/lang/String
#5 = Methodref #126.#127 // com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
#6 = InterfaceMethodref #123.#128 // com/neucloud/testproject/service/BasicDataService.findProductLine:(Ljava/lang/String;)Ljava/util/List;
#7 = InterfaceMethodref #123.#129 // com/neucloud/testproject/service/BasicDataService.findPlant:()Ljava/util/List;
#8 = InterfaceMethodref #123.#130 // com/neucloud/testproject/service/BasicDataService.findAllDevice:(Ljava/lang/
{
//字段信息以及方法信息
private static final org.slf4j.Logger log;
descriptor: Lorg/slf4j/Logger;
flags: ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private com.neucloud.testproject.service.BasicDataService basicDataService;
descriptor: Lcom/neucloud/testproject/service/BasicDataService;
flags: ACC_PRIVATE
public com.neucloud.testproject.controller.BasicDataController(com.neucloud.testproject.service.BasicDataService);
descriptor: (Lcom/neucloud/testproject/service/BasicDataService;)V
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: aload_1
6: putfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
9: return
LineNumberTable:
line 35: 0
line 36: 4
line 37: 9
LocalVariableTable:
Start Length Slot Name Signature
0 10 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 10 1 basicDataService Lcom/neucloud/testproject/service/BasicDataService;
MethodParameters:
Name Flags
basicDataService
RuntimeVisibleAnnotations:
0: #36()
//方法信息,权限(flags)之类的,还有code(指令信息)
public com.neucloud.testproject.dto.DataResponse<java.util.List<com.neucloud.testproject.dto.plan.DeviceDto>> findMateriel(java.lang.String);
descriptor: (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #3, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findMateriel:(Ljava/lang/String;)Ljava/util/List;
10: iconst_0
11: anewarray #4 // class java/lang/String
14: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
17: areturn
LineNumberTable:
line 42: 0
LocalVariableTable:
Start Length Slot Name Signature
0 18 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 18 1 code Ljava/lang/String;
MethodParameters:
Name Flags
code
Signature: #42 // (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Ljava/util/List<Lcom/neucloud/testproject/dto/plan/DeviceDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#37])
1: #45(#46=s#47)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#50)
public com.neucloud.testproject.dto.DataResponse<java.util.List<com.neucloud.testproject.dto.plan.DeviceDto>> findProductLine(java.lang.String);
descriptor: (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #6, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findProductLine:(Ljava/lang/String;)Ljava/util/List;
10: iconst_0
11: anewarray #4 // class java/lang/String
14: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
17: areturn
LineNumberTable:
line 48: 0
LocalVariableTable:
Start Length Slot Name Signature
0 18 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 18 1 userName Ljava/lang/String;
MethodParameters:
Name Flags
userName
Signature: #42 // (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Ljava/util/List<Lcom/neucloud/testproject/dto/plan/DeviceDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#51])
1: #45(#46=s#53)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#54)
public com.neucloud.testproject.dto.DataResponse<java.util.List<com.neucloud.testproject.dto.plan.DeviceDto>> findPlant();
descriptor: ()Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: invokeinterface #7, 1 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findPlant:()Ljava/util/List;
9: iconst_0
10: anewarray #4 // class java/lang/String
13: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
16: areturn
LineNumberTable:
line 54: 0
LocalVariableTable:
Start Length Slot Name Signature
0 17 0 this Lcom/neucloud/testproject/controller/BasicDataController;
Signature: #57 // ()Lcom/neucloud/testproject/dto/DataResponse<Ljava/util/List<Lcom/neucloud/testproject/dto/plan/DeviceDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#55])
1: #45(#46=s#58)
public com.neucloud.testproject.dto.DataResponse<java.util.List<com.neucloud.testproject.dto.plan.DeviceDto>> findAllDevice(java.lang.String, java.lang.String);
descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: aload_2
6: invokeinterface #8, 3 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findAllDevice:(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
11: iconst_0
12: anewarray #4 // class java/lang/String
15: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
18: areturn
LineNumberTable:
line 61: 0
LocalVariableTable:
Start Length Slot Name Signature
0 19 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 19 1 userName Ljava/lang/String;
0 19 2 deviceCode Ljava/lang/String;
MethodParameters:
Name Flags
userName
deviceCode
Signature: #62 // (Ljava/lang/String;Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Ljava/util/List<Lcom/neucloud/testproject/dto/plan/DeviceDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#59])
1: #45(#46=s#63)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#54)
parameter 1:
0: #49(#46=s#64)
public com.neucloud.testproject.dto.DataResponse<java.util.List<java.lang.String>> findProductByAuth(java.lang.String);
descriptor: (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #9, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findProductByAuth:(Ljava/lang/String;)Ljava/util/List;
10: iconst_0
11: anewarray #4 // class java/lang/String
14: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
17: areturn
LineNumberTable:
line 67: 0
LocalVariableTable:
Start Length Slot Name Signature
0 18 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 18 1 orgCode Ljava/lang/String;
MethodParameters:
Name Flags
orgCode
Signature: #67 // (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Ljava/util/List<Ljava/lang/String;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#65])
1: #45(#46=s#68)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#69)
public com.neucloud.testproject.dto.DataResponse<com.neucloud.testproject.dto.common.PageVo<com.neucloud.testproject.dto.schedule.ScheduleBasicDto>> findScheduleBasicData(java.lang.String, java.lang.String, com.neucloud.testproject.dto.common.PageInfo);
descriptor: (Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=4, locals=4, args_size=4
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: aload_2
6: aload_3
7: invokeinterface #10, 4 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findScheduleBasicData:(Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/common/PageVo;
12: iconst_0
13: anewarray #4 // class java/lang/String
16: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
19: areturn
LineNumberTable:
line 75: 0
LocalVariableTable:
Start Length Slot Name Signature
0 20 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 20 1 materielCode Ljava/lang/String;
0 20 2 lineCodes Ljava/lang/String;
0 20 3 pageInfo Lcom/neucloud/testproject/dto/common/PageInfo;
MethodParameters:
Name Flags
materielCode
lineCodes
pageInfo
Signature: #76 // (Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/DataResponse<Lcom/neucloud/testproject/dto/common/PageVo<Lcom/neucloud/testproject/dto/schedule/ScheduleBasicDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#70])
1: #45(#46=s#77)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#78)
parameter 1:
0: #49(#46=s#79)
parameter 2:
0: #49()
1: #80()
public com.neucloud.testproject.dto.Response updateScheduleBasicData(com.neucloud.testproject.dto.schedule.ScheduleBasicParamDto);
descriptor: (Lcom/neucloud/testproject/dto/schedule/ScheduleBasicParamDto;)Lcom/neucloud/testproject/dto/Response;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #11, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.updateScheduleBasicData:(Lcom/neucloud/testproject/dto/schedule/ScheduleBasicParamDto;)V
10: getstatic #12 // Field com/neucloud/testproject/dto/DataResponse.OK:Lcom/neucloud/testproject/dto/Response;
13: areturn
LineNumberTable:
line 81: 0
line 82: 10
LocalVariableTable:
Start Length Slot Name Signature
0 14 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 14 1 scheduleBasicParamDto Lcom/neucloud/testproject/dto/schedule/ScheduleBasicParamDto;
MethodParameters:
Name Flags
scheduleBasicParamDto
RuntimeVisibleAnnotations:
0: #85(#44=[s#81])
1: #45(#46=s#86)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #87()
public com.neucloud.testproject.dto.DataResponse<com.neucloud.testproject.dto.basic.DeviceRuntimeDto> deviceRuntimeData(java.lang.String);
descriptor: (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #13, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.deviceRuntimeData:(Ljava/lang/String;)Lcom/neucloud/testproject/dto/basic/DeviceRuntimeDto;
10: iconst_0
11: anewarray #4 // class java/lang/String
14: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
17: areturn
LineNumberTable:
line 88: 0
LocalVariableTable:
Start Length Slot Name Signature
0 18 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 18 1 deviceCode Ljava/lang/String;
MethodParameters:
Name Flags
deviceCode
Signature: #89 // (Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Lcom/neucloud/testproject/dto/basic/DeviceRuntimeDto;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#88])
1: #45(#46=s#90)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#91)
public com.neucloud.testproject.dto.DataResponse<com.neucloud.testproject.dto.common.PageVo<com.neucloud.testproject.dto.schedule.SafetyStockDto>> findSafetyStock(java.lang.String, java.lang.String, com.neucloud.testproject.dto.common.PageInfo);
descriptor: (Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=4, locals=4, args_size=4
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: aload_2
6: aload_3
7: invokeinterface #14, 4 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.findSafetyStock:(Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/common/PageVo;
12: iconst_0
13: anewarray #4 // class java/lang/String
16: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
19: areturn
LineNumberTable:
line 96: 0
LocalVariableTable:
Start Length Slot Name Signature
0 20 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 20 1 materielCode Ljava/lang/String;
0 20 2 lineCodes Ljava/lang/String;
0 20 3 pageInfo Lcom/neucloud/testproject/dto/common/PageInfo;
MethodParameters:
Name Flags
materielCode
lineCodes
pageInfo
Signature: #93 // (Ljava/lang/String;Ljava/lang/String;Lcom/neucloud/testproject/dto/common/PageInfo;)Lcom/neucloud/testproject/dto/DataResponse<Lcom/neucloud/testproject/dto/common/PageVo<Lcom/neucloud/testproject/dto/schedule/SafetyStockDto;>;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#92])
1: #45(#46=s#94)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #49(#46=s#78)
parameter 1:
0: #49(#46=s#79)
parameter 2:
0: #49()
1: #80()
public com.neucloud.testproject.dto.DataResponse<java.lang.Boolean> verifyMeasureCode(java.lang.String, java.lang.String);
descriptor: (Ljava/lang/String;Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
flags: ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: aload_2
6: invokeinterface #15, 3 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.verifyMeasureCode:(Ljava/lang/String;Ljava/lang/String;)Z
11: invokestatic #16 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
14: iconst_0
15: anewarray #4 // class java/lang/String
18: invokestatic #5 // Method com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
21: areturn
LineNumberTable:
line 102: 0
LocalVariableTable:
Start Length Slot Name Signature
0 22 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 22 1 id Ljava/lang/String;
0 22 2 measureCode Ljava/lang/String;
MethodParameters:
Name Flags
id
measureCode
Signature: #98 // (Ljava/lang/String;Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse<Ljava/lang/Boolean;>;
RuntimeVisibleAnnotations:
0: #43(#44=[s#95])
1: #45(#46=s#99)
RuntimeVisibleParameterAnnotations:
parameter 0:
parameter 1:
0: #49(#46=s#100)
public com.neucloud.testproject.dto.Response saveSafetyStock(com.neucloud.testproject.dto.schedule.SafetyStockParamDto);
descriptor: (Lcom/neucloud/testproject/dto/schedule/SafetyStockParamDto;)Lcom/neucloud/testproject/dto/Response;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #17, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.saveSafetyStock:(Lcom/neucloud/testproject/dto/schedule/SafetyStockParamDto;)V
10: getstatic #12 // Field com/neucloud/testproject/dto/DataResponse.OK:Lcom/neucloud/testproject/dto/Response;
13: areturn
LineNumberTable:
line 108: 0
line 109: 10
LocalVariableTable:
Start Length Slot Name Signature
0 14 0 this Lcom/neucloud/testproject/controller/BasicDataController;
0 14 1 safetyStockParamDto Lcom/neucloud/testproject/dto/schedule/SafetyStockParamDto;
MethodParameters:
Name Flags
safetyStockParamDto
RuntimeVisibleAnnotations:
0: #85(#44=[s#101])
1: #45(#46=s#105)
RuntimeVisibleParameterAnnotations:
parameter 0:
0: #87()
public com.neucloud.testproject.dto.Response deleteSafetyStock(java.lang.String[]);
descriptor: ([Ljava/lang/String;)Lcom/neucloud/testproject/dto/Response;
flags: ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: getfield #2 // Field basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
4: aload_1
5: invokeinterface #18, 2 // InterfaceMethod com/neucloud/testproject/service/BasicDataService.deleteSafetyStock:([Ljava/lang/String;)V
10: getstatic #12 // Field com/neucloud/testproject/dto/DataResponse.OK:Lcom/neucloud/
我们从上面就可以看到有很多的类的描述信息,还有常量池信息,字段描述信息,还有方法的各种信息包括方法名称,返回和传入的参数信息,以及权限,还有指令信息。
2.加载过程:
- 类的加载过程如图所示,
- 如果虚拟机发现之前没有加载过这个类,就会通过ClassLoader把类加载到内存。
加载的具体过程:
image.png
3.验证
image.png
如果需要查看,那么就需要使用16进程的编辑器打开,就可以看到cafebabe的信息了,这个cafebabe就很搞笑了。
image.png
image.png
image.png
可以看到上图中所示,如果你的代码是正确无误的,那么就可以加上这个参数来关闭验证,从而使得类的加载更快: -Xverify:none,下面就是我们使用的编辑器IDEA的参数设置,这样设置呢就可以更快的启动IDEA了。
image.png
image.png
4.准备
image.png
如图,在准备阶段就会被类的静态变量赋值,final static修饰的变量才会赋值,而仅仅static变量还是0,不会赋用户设置的值。
5.解析
image.png
符号引用是因为刚开始的时候java类并不知道引用对象的地址在哪里,所以就暂且用了符号来代替,如我们开始附上的代码中的,常量池( #1 = Methodref , #4 = Class , #7 = InterfaceMethodref )这些都是符号引用,所以在这个阶段,就是把符号引用转换为直接引用,附上引用的地址。
//常量池
Constant pool:
#1 = Methodref #22.#121 // java/lang/Object."<init>":()V
#2 = Fieldref #19.#122 // com/neucloud/testproject/controller/BasicDataController.basicDataService:Lcom/neucloud/testproject/service/BasicDataService;
#3 = InterfaceMethodref #123.#124 // com/neucloud/testproject/service/BasicDataService.findMateriel:(Ljava/lang/String;)Ljava/util/List;
#4 = Class #125 // java/lang/String
#5 = Methodref #126.#127 // com/neucloud/testproject/dto/DataResponse.ok:(Ljava/lang/Object;[Ljava/lang/String;)Lcom/neucloud/testproject/dto/DataResponse;
#6 = InterfaceMethodref #123.#128 // com/neucloud/testproject/service/BasicDataService.findProductLine:(Ljava/lang/String;)Ljava/util/List;
#7 = InterfaceMethodref #123.#129 // com/neucloud/testproject/service/BasicDataService.findPlant:()Ljava/util/List;
#8 = InterfaceMethodref #123.#130 // com/neucloud/testproject/service/BasicDataService.findAllDevice:(Ljava/lang/
6.初始化阶段
image.png
image.png
最后在说明一点,类的初始化未必完全按照这个步骤来走,比如解析也可能会在初始化之后来做。