前几天咨询了大家字节码相关问题
看了一遍《深入理解虚拟机》,部分指令和语法是明白了,但是依然存在一些疑惑
在下面字节码中标出了,麻烦懂的朋友指点下
多谢了
类文件
package core.object_create;
public class ObjectTest {
private String name="v2";
public void hi(){
int i =777;
}
}
// class version 56.0 (56)
// access flags 0x21
public class core/object_create/ObjectTest {
// compiled from: ObjectTest.java
// access flags 0x2
private Ljava/lang/String; name
// access flags 0x1
public <init>()V
L0 //这里在申明什么
LINENUMBER 3 L0 //这个语法是啥意思
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
L1
LINENUMBER 4 L1
ALOAD 0
LDC "v2"
PUTFIELD core/object_create/ObjectTest.name : Ljava/lang/String;
RETURN
L2
LOCALVARIABLE this Lcore/object_create/ObjectTest; L0 L2 0
MAXSTACK = 2
MAXLOCALS = 1
// access flags 0x1
public hi()V
L0
LINENUMBER 7 L0
SIPUSH 777
ISTORE 1
L1
LINENUMBER 8 L1
RETURN
L2
LOCALVARIABLE this Lcore/object_create/ObjectTest; L0 L2 0 //这句
LOCALVARIABLE i I L1 L2 1 //以及这句分别在申明什么
MAXSTACK = 1
MAXLOCALS = 2
}
1
penguinWWY 2020-04-22 00:43:12 +08:00 1
你用的字节码查看工具把 LineNumberTable 和 LocalVariableTable 这两个表的内容解析了一下
L0 、L1 应该表示一个 label,也就是一个标签 `LINENUMBER ` 声明这个标签对应的行号 `LOCALVARIABLE` 表示局部变量的名字、类型 |
2
lqw3030 OP @penguinWWY 感谢
|