14. 三个字节码分析

第一个字节码分析

package com.zj.study.jvm.bytecode;

/*
    javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。
    -v -verbose,输出附加信息(包括行号、本地变量表,反汇编等详细信息)
    -c,对代码进行反汇编
    javap com.zj.study.jvm.bytecode.MyTest1
    javap -c com.zj.study.jvm.bytecode.MyTest1
    javap -verbose com.zj.study.jvm.bytecode.MyTest1

    Hex Fiend mac 16进制查看器

 */
public class MyTest1 {
    private int a = 1;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }
}

CA FE BA BE // 魔数
00 00 00 32 // 00 00 次版本号 00 32 主版本号
00 18 // 1 * 16 + 8 -1 = 23个常量
0A 00 04 00 14 // 0A = 10 表示这是一个方法,00 04 声明方法的类描述符的索引项是4 ,00 14 = 20 指向名称及类型描述符的索引项 
09 00 03 00 15 // 09 = 9 表示这是一个字段,00 03 声明字段的类或者接口描述组的索引项是3 ,00 15 = 21 指向字段描述符的索引项21
07 00 16 // 07 = 7 表示这是一个类,00 16 = 22 指向全限定名常量项的索引
07 00 17 // 07 = 7 表示这是一个类,00 17 = 23 指向全限定名常量项的索引
01 00 01 61 // 01 = 1 表示这是一个utf-8编码的一个字符串,00 01 = 1 长度为length=1的utf-8编码的字符串,61 内容为 a
01 00 01 49 // 01 = 1 表示这是一个utf-8编码的一个字符串,00 01 = 1 长度为length=1的utf-8编码的字符串,49 内容为 I
01 00 06 3C 69 6E 69 74 3E // 01 = 1 表示这是一个utf-8编码的一个字符串,00 06 = 6 长度为length=6的utf-8编码的字符串,内容为 <init>
01 00 03 28 29 56 // 01 = 1 表示这是一个utf-8编码的一个字符串,00 03 = 3 长度为length=3的utf-8编码的字符串,内容为 ()V
01 00 04 43 6F 64 65 // 01 = 1 表示这是一个utf-8编码的一个字符串,00 04 = 4 长度为length=4的utf-8编码的字符串,内容为 Code
01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 // 内容为LineNumberTable
01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 6C 65 54 61 62 6C 65 // 内容为LocalVariableTable
01 00 04 74 68 69 73 // 内容为this
01 00 23 4C 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 31 3B // 内容为Lcom/zj/study/jvm/bytecode/MyTest1;
01 00 04 67 65 74 41 // 内容为getA
01 00 03 28 29 49 // 内容为()I 
01 00 04 73 65 74 41 // 内容为setA
01 00 04 28 49 29 56 // 内容为(I)V
01 00 0A 53 6F 75 72 63 65 46 69 6C 65 // 内容为SourceFile
01 00 0C 4D 79 54 65 73 74 31 2E 6A 61 76 61 0C 00 // 内容为MyTest1.java
07 00 08 // 07 = 6 表示这是一个类,00 08 = 8 指向全限定名常量项的索引
0C 00 05 00 06 // 0C=12表示这是一个名称和类型信息,00 05=5,指向该字段或方法名称常量项的索引,00 06=6指向该字段或方法描述符常量的索引
01 00 21 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 31 // 内容为com/zj/study/jvm/bytecode/MyTest1
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 // 内容为java/lang/Object
00 21 // 访问标识符access_flag
00 03 // 当前类名 索引,从常量池找
00 04 // 父类类名 索引,从常量池找
00 00 // 接口数量 0 没有接口名 
00 01 // fields_count 字段的数量
00 02 00 05 00 06 00 00 // 00 02 访问修饰符,00 05 名字索引,00 06 描述符的索引,00 00 附加属性个数

00 03 // 一共有3个方法

00 01 // 第一个方法的访问修饰符
00 07 // 名字索引 
00 08 // 描述索引
00 01 // 附加属性长度是1 
00 09 // 第一个方法的第一个附加属性名字索引 
00 00 00 38 // 第一个方法的第一个附加属性长度
00 02 // max_stack
00 01 // max_locals
00 00 00 0A // code_length
2A B7 00 01 2A 04 B5 00 02 B1 // 真正的执行的内容
00 00 // 异常表长度
00 02 // 附加属性的附加的属性 
00 0A // 附加属性的常量池索引 LineNumberTable
00 00 00 0A // 长度 10
00 02 00 00 00 0E 00 04 00 0F // 00 02 lineNumberTable的长度,00 00 字节码指令的偏移量,00 0E 对应源码的行号
00 0B // 附加属性的常量池索引 LocalVariableTable
00 00 00 0C // 长度
00 01 // local_variable_table_length
00 00 00 0A 00 0C 00 0D 00 00 // 00 00 局部变量的作用域的起始字节码偏移量,00 0A 局部变量的作用域的大小,00 0C 局部变量的变量名索引,00 0D 当前局部变量的描述符索引, 00 00 当前局部变量在栈帧中局部变量表中的位置

00 01 // 第二个方法的访问修饰符
00 0E // 名字索引 
00 0F // 描述索引
00 01 // 附加属性长度是1 
00 09 // 第二个方法的第一个附加属性名字索引
00 00 00 2F // 第二个方法的第二个附加属性长度 47
00 01 // max_stack
00 01 // max_locals
00 00 00 05 // code_length
2A B4 00 02 AC // 真正的执行的内容
00 00 // 异常表长度
00 02 // 附加属性的附加的属性 
00 0A // 附加属性的常量池索引 LineNumberTable
00 00 00 06 // 长度 6
00 01 00 00 00 12 // 00 01 lineNumberTable的长度,00 00 字节码指令的偏移量,00 12 对应源码的行号
00 0B // 附加属性的常量池索引 LocalVariableTable
00 00 00 0C // 长度
00 01 // local_variable_table_length
00 00 00 05 00 0C 00 0D 00 00 // 00 00 局部变量的作用域的起始字节码偏移量,00 05 局部变量的作用域的大小,00 0C 局部变量的变量名索引,00 0D 当前局部变量的描述符索引, 00 00 当前局部变量在栈帧中局部变量表中的位置

00 01 // 第三个方法的访问修饰符
00 10 // 名字索引 
00 11 // 描述索引
00 01 // 附加属性长度是1 
00 09 // 第三个方法的第一个附加属性名字索引
00 00 00 3E // 第二个方法的第二个附加属性长度 62
00 02 
00 02 
00 00 00 06 
2A 1B B5 00 02 B1 
00 00 
00 02 
00 0A 
00 00 00 0A 
00 02 00 00 00 16 00 05 00 17 
00 0B 
00 00 00 16 
00 02 
00 00 00 06 00 0C 00 0D 00 00 00 00 00 06 00 05 00 06 00 01 

00 01 // 类的附加属性1个
00 12 // 类的附加属性名字索引
00 00 00 02 // 类的附加属性的长度
00 13 // 文件名对应的索引

第二个字节码分析

package com.zj.study.jvm.bytecode;

public class MyTest2 {
    String str = "Welcome";
    private int x = 5;
    public static Integer in = 10;

    public MyTest2() {
    }

    public static void main(String[] args) {
        MyTest2 myTest2 = new MyTest2();
        myTest2.setX(8);
        in = 20;
    }

    public void setX(int x) {
        this.x = x;
    }
}
CA FE BA BE // 魔数
00 00 00 32 // 次版本号 主版本号
00 2F // 常量池个数 = 2 * 16 + 15 - 1 = 46
0A 00 0A 00 22 // 索引 1 方法 声明方法的类描述符常量池索引 10 指向名称及类型描述符 34
08 00 23 // 索引 2 字符串字面量的索引 35
09 00 05 00 24 // 索引 3 字段 声明字段的类或者接口描述符索引 5 指向名称及类型描述符 36
09 00 05 00 25 // 索引 4  字段 声明字段的类或者接口描述符索引 5 指向名称及类型描述符 37
07 00 26 // 索引 5 类 全限定名常量项的索引 38
0A 00 05 00 22 // 索引 6 方法 声明方法的类描述符常量池索引 5 指向名称及类型描述符 34
0A 00 05 00 27 // 索引 7 方法 声明方法的类描述符常量池索引 5 指向名称及类型描述符 39
0A 00 28 00 29 // 索引 8 方法 声明方法的类描述符常量池索引 40 指向名称及类型描述符 41
09 00 05 00 2A // 索引 9 字段 声明字段的类或者接口描述符索引 5 指向名称及类型描述符 42
07 00 2B // 索引 10 类 全限定名常量项的索引 43
01 00 03 73 74 72 // 索引 11 字符串 长度 3 内容 str
01 00 12 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B // 索引 12 字符串 长度 18 内容 Ljava/lang/String;
01 00 01 78 // 索引 13 字符串 长度 1 内容 x
01 00 01 49 // 索引 14 字符串 长度 1 内容 I
01 00 02 69 6E // 索引 15 字符串 长度 2 内容 in
01 00 13 4C 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 3B // 索引 16 字符串 长度 19 内容 Ljava/lang/Integer;
01 00 06 3C 69 6E 69 74 3E // 索引 17 字符串 长度 6 内容 <init>
01 00 03 28 29 56 // 索引 18 字符串 长度 3 内容 ()V
01 00 04 43 6F 64 65 // 索引 19 字符串 长度 4 内容 Code
01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 // 索引 20 字符串 长度 15 内容 LineNumberTable
01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 6C 65 54 61 62 6C 65 // 索引 21 字符串 长度 18 内容 LocalVariableTable
01 00 04 74 68 69 73 // 索引 22 字符串 长度 4 内容 this
01 00 23 4C 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 32 3B // 索引 23 字符串 长度 35 内容 Lcom/zj/study/jvm/bytecode/MyTest2;
01 00 04 6D 61 69 6E // 索引 24 字符串 长度 4 内容 main
01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 // 索引 25 字符串 长度 22 内容 ([Ljava/lang/String;)V
01 00 04 61 72 67 73 // 索引 26 字符串 长度 4 内容 args
01 00 13 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B // 索引 27 字符串 长度 19 内容 [Ljava/lang/String;
01 00 07 6D 79 54 65 73 74 32 // 索引 28 字符串 长度 7 内容 myTest2
01 00 04 73 65 74 58 // 索引 29 字符串 长度 4 内容 setX
01 00 04 28 49 29 56 // 索引 30 字符串 长度 4 内容 (I)V
01 00 08 3C 63 6C 69 6E 69 74 3E // 索引 31 字符串 长度 8 内容 <clinit>
01 00 0A 53 6F 75 72 63 65 46 69 6C 65 // 索引 32 字符串 长度 10 内容 SourceFile
01 00 0C 4D 79 54 65 73 74 32 2E 6A 61 76 61 // 索引 33 字符串 长度 12 内容 MyTest2.java
0C 00 11 00 12 // 索引 34 名称和字段类型 指向该字段或方法名称常量项索引 17 指向该字段或方法描述符常量项索引 18
01 00 07 57 65 6C 63 6F 6D 65 // 索引 35 字符串 长度 7 内容 Welcome
0C 00 0B 00 0C // 索引 36 名称和字段类型 指向该字段或方法名称常量项索引 11 指向该字段或方法描述符常量项索引 12
0C 00 0D 00 0E // 索引 37 名称和字段类型 指向该字段或方法名称常量项索引 13 指向该字段或方法描述符常量项索引 14
01 00 21 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 32 // 索引 38 字符串 长度 33 内容 com/zj/study/jvm/bytecode/MyTest2
0C 00 1D 00 1E // 索引 39 名称和字段类型 指向该字段或方法名称常量项索引 29 指向该字段或方法描述符常量项索引 30
07 00 2C // 索引 40 类 全限定名常量项的索引 44
0C 00 2D 00 2E // 索引 41 名称和字段类型 指向该字段或方法名称常量项索引 45 指向该字段或方法描述符常量项索引 46
0C 00 0F 00 10 // 索引 42 名称和字段类型 指向该字段或方法名称常量项索引 15 指向该字段或方法描述符常量项索引 16
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 // 索引 43 字符串 长度 16 内容 java/lang/Object
01 00 11 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 // 索引 44 字符串 长度 17 内容 java/lang/Integer
01 00 07 76 61 6C 75 65 4F 66 // 索引 45 字符串 长度 7 内容 valueOf
01 00 16 28 49 29 4C 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 3B // 索引 46 字符串 长度 22 内容 (I)Ljava/lang/Integer;
00 21 // 类访问标志
00 05 // 当前类名字 常量池索引为5
00 0A // 父类名字 常量池索引为10
00 00 // 接口个数
00 03 // 成员变量个数 3
00 00 00 0B 00 0C 00 00 2个字节访问修饰符 2个字节名字索引 2个字节描述符索引 2个字节字段拥有的独有的属性信息
00 02 00 0D 00 0E 00 00 
00 09 00 0F 00 10 00 00 
00 04 // 4个方法 
00 01 // 第一个方法的访问修饰符
00 11 // 第一个方法的名字索引
00 12 // 第一个方法的描述符索引
00 01 // 第一个方法拥有的属性信息
00 13 // 第一个方法的第一个属性的名字索引 
00 00 00 42 // 第一个方法的第一个属性的长度
00 02 
00 01 
00 00 00 10 
2A B7 00 01 2A 12 02 B5 00 03 2A 08 B5 00 04 B1 
00 00 
00 02 
00 14 
00 00 00 0E 
00 03 00 00 00 03 00 04 00 04 00 0A 00 05 
00 15 
00 00 00 0C 
00 01 00 00 00 10 00 16 00 17 00 00 

00 09 // 第二个方法的访问修饰符
00 18 // 名字索引
00 19 // 描述符索引
00 01 // 属性个数
00 13 // Code
00 00 00 57 // 长度
00 02 
00 02 
00 00 00 17 
BB 00 05 59 B7 00 06 4C 2B 10 08 B6 00 07 10 14 B8 00 08 B3 00 09 B1 
00 00 
00 02 
00 14 
00 00 00 12 
00 04 00 00 00 0A 00 08 00 0B 00 0E 00 0C 00 16 00 0D 
00 15 
00 00 00 16 
00 02 00 00 00 17 00 1A 00 1B 00 00 00 08 00 0F 00 1C 00 17 00 01

00 01 
00 1D 
00 1E 
00 01 
00 13 
00 00 00 3E 
00 02 
00 02 
00 00 00 06 
2A 1B B5 00 04 B1 
00 00 
00 02 
00 14 
00 00 00 0A 
00 02 00 00 00 10 00 05 00 11 
00 15 
00 00 00 16 
00 02 00 00 00 06 00 16 00 17 00 00 00 00 00 06 00 0D 00 0E 00 01 

00 08 
00 1F 
00 12 
00 01 
00 13 
00 00 00 21 
00 01 
00 00 
00 00 00 09 
10 0A B8 00 08 B3 00 09 B1 
00 00 
00 01 
00 14 
00 00 00 06
00 01 00 00 00 07 

00 01 
00 20 
00 00 00 02 
00 21

第三个字节码分析

package com.zj.study.jvm.bytecode;

public class MyTest2 {
    String str = "Welcome";
    private int x = 5;

    public static Integer in = 10;

    public static void main(String[] args) {
        MyTest2 myTest2 = new MyTest2();
        myTest2.setX(8);
        in = 20;
    }

    public synchronized void setX(int x) {
        this.x = x;
    }

    private void test(String test) {
        synchronized (this.str) {
            System.out.println("Hello World");
        }
    }

    private synchronized static void test2() {
        
    }
}
CA FE BA BE 
00 00 00 32 
00 46 // 4 * 16 + 6 - 1 = 69

0A 00 0D 00 2D 
08 00 2E 
09 00 05 00 2F 
09 00 05 00 30 
07 00 31 
0A 00 05 00 2D 
0A 00 05 00 32 
0A 00 33 00 34 
09 00 05 00 35 
09 00 36 00 37 
08 00 38 
0A 00 39 00 3A 
07 00 3B 
01 00 03 73 74 72 
01 00 12 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 
01 00 01 78 
01 00 01 49 
01 00 02 69 6E 
01 00 13 4C 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 3B 
01 00 06 3C 69 6E 69 74 3E 
01 00 03 28 29 56 
01 00 04 43 6F 64 65 
01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 
01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 6C 65 54 61 62 6C 65 
01 00 04 74 68 69 73 
01 00 23 4C 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 32 3B 
01 00 04 6D 61 69 6E 
01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 
01 00 04 61 72 67 73 
01 00 13 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 
01 00 07 6D 79 54 65 73 74 32 
01 00 04 73 65 74 58 
01 00 04 28 49 29 56 
01 00 04 74 65 73 74 
01 00 15 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 
01 00 0D 53 74 61 63 6B 4D 61 70 54 61 62 6C 65 
07 00 31 
07 00 3C 
07 00 3B 
07 00 3D 
01 00 05 74 65 73 74 32 
01 00 08 3C 63 6C 69 6E 69 74 3E 
01 00 0A 53 6F 75 72 63 65 46 69 6C 65 
01 00 0C 4D 79 54 65 73 74 32 2E 6A 61 76 61 
0C 00 14 00 15 
01 00 07 57 65 6C 63 6F 6D 65 
0C 00 0E 00 0F 
0C 00 10 00 11 
01 00 21 63 6F 6D 2F 7A 6A 2F 73 74 75 64 79 2F 6A 76 6D 2F 62 79 74 65 63 6F 64 65 2F 4D 79 54 65 73 74 32 
0C 00 20 00 21 
07 00 3E 
0C 00 3F 00 40 
0C 00 12 00 13 
07 00 41 
0C 00 42 00 43 
01 00 0B 48 65 6C 6C 6F 20 57 6F 72 6C 64 
07 00 44 
0C 00 45 00 23 
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 
01 00 13 6A 61 76 61 2F 6C 61 6E 67 2F 54 68 72 6F 77 61 62 6C 65 
01 00 11 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 
01 00 07 76 61 6C 75 65 4F 66 
01 00 16 28 49 29 4C 6A 61 76 61 2F 6C 61 6E 67 2F 49 6E 74 65 67 65 72 3B 
01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 
01 00 03 6F 75 74 
01 00 15 4C 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 61 6D 3B 
01 00 13 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 61 6D 
01 00 07 70 72 69 6E 74 6C 6E 

00 21 
00 05 
00 0D 
00 00 // 接口数量
00 03 // 3个字段
00 00 00 0E 00 0F 00 00 
00 02 00 10 00 11 00 00 
00 09 00 12 00 13 00 00 

00 06 // 6个方法 

00 01 
00 14 
00 15 
00 01 
00 16 // Code
00 00 00 42 
00 02 
00 01 
00 00 00 10 
2A B7 00 01 2A 12 02 B5 00 03 2A 08 B5 00 04 B1 
00 00 
00 02 
00 17 // LineNumberTable
00 00 00 0E 
00 03 00 00 00 03 00 04 00 04 00 0A 00 05 
00 18 // LocalVariableTable
00 00 00 0C 
00 01 00 00 00 10 00 19 00 1A 00 00 

00 09 
00 1B 
00 1C 
00 01 
00 16 // Code
00 00 00 57 
00 02 
00 02 
00 00 00 17 
BB 00 05 59 B7 00 06 4C 2B 10 08 B6 00 07 10 14 B8 00 08 B3 00 09 B1 
00 00 
00 02 
00 17 
00 00 00 12 
00 04 00 00 00 0A 00 08 00 0B 00 0E 00 0C 00 16 00 0D 
00 18 
00 00 00 16 
00 02 00 00 00 17 00 1D 00 1E 00 00 00 08 00 0F 00 1F 00 1A 00 01 

00 21 
00 20 
00 21 
00 01 
00 16 
00 00 00 3E 
00 02 
00 02 
00 00 00 06 
2A 1B B5 00 04 B1 
00 00 
00 02 
00 17 
00 00 00 0A 
00 02 00 00 00 10 00 05 00 11 
00 18 
00 00 00 16 
00 02 00 00 00 06 00 19 00 1A 00 00 00 00 00 06 00 10 00 11 00 01 

00 02 
00 22 
00 23 
00 01 
00 16 
00 00 00 88 
00 02 
00 04 
00 00 00 1A 
2A B4 00 03 59 4D C2 B2 00 0A 12 0B B6 00 0C 2C C3 A7 00 08 4E 2C C3 2D BF B1 
00 02 // 异常
00 07 00 11 00 14 00 00 
00 14 00 17 00 14 00 00 
00 03 
00 17 
00 00 00 12 
00 04 00 00 00 14 00 07 00 15 00 0F 00 16 00 19 00 17 
00 18 
00 00 00 16 
00 02 00 00 00 1A 00 19 00 1A 00 00 00 00 00 1A 00 22 00 0F 00 01 
00 24 //StackMapTable
00 00 00 18 
00 02 FF 00 14 00 03 07 00 25 07 00 26 07 00 27 00 01 07 00 28 FA 00 04 

00 2A 
00 29 
00 15 
00 01 
00 16 // Code
00 00 00 19 
00 00 
00 00 
00 00 00 01 
B1 
00 00 
00 01 
00 17 // LineNumberTable
00 00 00 06 
00 01 00 00 00 1B 

00 08 
00 2A 
00 15 
00 01 
00 16 // Code
00 00 00 21 
00 01 
00 00 
00 00 00 09 
10 0A B8 00 08 B3 00 09 B1 
00 00 
00 01 
00 17 // LineNumberTable
00 00 00 06 
00 01 00 00 00 07 

00 01 
00 2B // SourceFile
00 00 00 02 
00 2C // MyTest2.java
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容