b java 之字节码详解

本文从一个简单的Demo类出发,深入探讨Java字节码,包括使用javap进行反编译,字节码解析,以及字节码结构的详细分析。重点关注常量类型表、类访问权限控制、字段表、方法表和属性表,特别是code、LineNumberTable和LocalVariableTable等重要属性。
摘要由CSDN通过智能技术生成

—> go to 总目录

从一个class文件看字节码结构。
java虚机规范

一、Demo

1.1 Demo.java

仅有一个变量,一个方法。

package com.httpserver;

/**
 * <code>Demo</code> description
 *
 * @author sunqiyuan
 * @date 2020-04-28
 */
public class Demo {
   
    private int num = 1;

    public int add() {
   
        num = num + 2;
        return num;
    }
}

1.2 反编译的真实java文件

可以看出来多了this

在这里插入图片描述

1.3 Demo.class

00000000: cafe babe 0000 0034 0016 0a00 0400 1209  .......4........
00000010: 0003 0013 0700 1407 0015 0100 036e 756d  .............num
00000020: 0100 0149 0100 063c 696e 6974 3e01 0003  ...I...<init>...
00000030: 2829 5601 0004 436f 6465 0100 0f4c 696e  ()V...Code...Lin
00000040: 654e 756d 6265 7254 6162 6c65 0100 124c  eNumberTable...L
00000050: 6f63 616c 5661 7269 6162 6c65 5461 626c  ocalVariableTabl
00000060: 6501 0004 7468 6973 0100 154c 636f 6d2f  e...this...Lcom/
00000070: 6874 7470 7365 7276 6572 2f44 656d 6f3b  httpserver/Demo;
00000080: 0100 0361 6464 0100 0328 2949 0100 0a53  ...add...()I...S
00000090: 6f75 7263 6546 696c 6501 0009 4465 6d6f  ourceFile...Demo
000000a0: 2e6a 6176 610c 0007 0008 0c00 0500 0601  .java...........
000000b0: 0013 636f 6d2f 6874 7470 7365 7276 6572  ..com/httpserver
000000c0: 2f44 656d 6f01 0010 6a61 7661 2f6c 616e  /Demo...java/lan
000000d0: 672f 4f62 6a65 6374 0021 0003 0004 0000  g/Object.!......
000000e0: 0001 0002 0005 0006 0000 0002 0001 0007  ................
000000f0: 0008 0001 0009 0000 0038 0002 0001 0000  .........8......
00000100: 000a 2ab7 0001 2a04 b500 02b1 0000 0002  ..*...*.........
00000110: 000a 0000 000a 0002 0000 0009 0004 000a  ................
00000120: 000b 0000 000c 0001 0000 000a 000c 000d  ................
00000130: 0000 0001 000e 000f 0001 0009 0000 003d  ...............=
00000140: 0003 0001 0000 000f 2a2a b400 0205 60b5  ........**....`.
00000150: 0002 2ab4 0002 ac00 0000 0200 0a00 0000  ..*.............
00000160: 0a00 0200 0000 0d00 0a00 0e00 0b00 0000  ................
00000170: 0c00 0100 0000 0f00 0c00 0d00 0000 0100  ................
00000180: 1000 0000 0200 110a                      ........

1.4 javap -verbose

jdk自带反解析工具

Classfile /Users/sunqiyuan/Desktop/Demo.class
  Last modified 2020年4月28日; size 391 bytes
  SHA-256 checksum 91497ea9c8db954d68c9206e1c17a2251658351718284cf92d73fac35c10e8d5
  Compiled from "Demo.java"
public class com.httpserver.Demo
  minor version: 0
  major version: 52
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #3                          // com/httpserver/Demo
  super_class: #4                         // java/lang/Object
  interfaces: 0, fields: 1, methods: 2, attributes: 1
Constant pool:
   #1 = Methodref          #4.#18         // java/lang/Object."<init>":()V
   #2 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值