三、Java字节码文件结构

本文解析了Java类Son的字节码文件结构,详细介绍了Son类继承自Father并实现Animal接口的字节码信息,包括类的版本、常量池、接口、字段、方法及属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

son.java原Java文件

package 字节码分析;
public class Son extends Father implements Animal {
    private String name;//私有成员
    static int IQ = 150;//静态属性  
    String sex;//默认属性权限 
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 重写父类方法
     */
    @Override
    public void run(){
        System.out.println("儿子花式跑步");
    }

    /**
     * 重载子类重写父类的方法
     */
    public void run(String str){
        System.out.println(str);
    }

    @Override
    public void jump() {
        System.out.println("实现Animal的jump方法");
    }   
}

Son.class的字节码文件结构

Java Bytecode Editor下的Java字节码结构

General Information //普通class信息
Constant Pool //常量池
Interface //接口
Fields //域
Methods //方法区
Attributes


General Information:

Minor version: 0
Major version: 52
Constant pool count: 50
Access flags: 0x0021[ public ]
This class: cp info #1 <字节码分析/Son>
Super class: cp info #3 <字节码分析/Father>
Interfaces count: 1
Fields count: 3
Methods count: 7
Attributes count: 1

Constant Pool:

[01] Class_info: 字节码分析/Son
[02] Utf8_info: 字节码分析/Son
[03] Class_info: 字节码分析/Father
[04] Utf8_info: 字节码分析/Father
[05] Class_info: 字节码分析/Animal
[06] Utf8_info: 字节码分析/Animal
[07] Utf8_info: name
[08] Utf8_info: Ljava/lang/String;
[09] Utf8_info: IQ
[10] Utf8_info: I
[11] Utf8_info: sex
[12] Utf8_info:
[13] Utf8_info: ()V
[14] Utf8_info: Code
[15] Fieldref_info: 字节码分析/Son/IQ I
[16] NameAndType_info: IQI
[17] Utf8_info: LineNumberTable
[18] Utf8_info: LocalVariableTable
[19] Utf8_info:
[20] Methodref_info: 字节码分析/Father/()V
[21] NameAndType_info: ()V
[22] Utf8_info: this
[23] Utf8_info: L字节码分析/Son;
[24] Utf8_info: getName
[25] Utf8_info: ()Ljava/lang/String;
[26] Fieldref_info: 字节码分析/Son/name Ljava/lang/String;
[27] NameAndType_info: nameLjava/lang/String;
[28] Utf8_info: setName
[29] Utf8_info: (Ljava/lang/String;)V
[30] Utf8_info: run
[31] Fieldref_info: java/lang/System/out Ljava/io/PrintStream;
[32] Class_info: java/lang/System
[33] Utf8_info: java/lang/System
[34] NameAndType_info: outLjava/io/PrintStream;
[35] Utf8_info: out
[36] Utf8_info: Ljava/io/PrintStream;
[37] String_info: 儿子花式跑步
[38] Utf8_info: 儿子花式跑步
[39] Methodref_info: java/io/PrintStream/println(Ljava/lang/String;)V
[40] Class_info: java/io/PrintStream
[41] Utf8_info: java/io/PrintStream
[42] NameAndType_info: println(Ljava/lang/String;)V
[43] Utf8_info: println
[44] Utf8_info: str
[45] Utf8_info: jump
[46] String_info: 实现Animal的jump方法
[47] Utf8_info: 实现Animal的jump方法
[48] Utf8_info: SourceFile
[49] Utf8_info: Son.java

Interfaces

Interface 0

Fields

name
IQ
sex

Methods

<clinit>
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
<init>
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
getName
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
setName
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
run
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
run
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable
jump
|__ [0] Code
   |__ [0] LineNumberTable
   |__ [1] LocalVariableTable

Attributes

[0] SourceFile

CMD窗口输出的Son.class字节码信息

C:\Users\ljj\Desktop>javap -c Son.class
Compiled from "Son.java"
public class 字节码分析.Son extends 字节码分析.Father implements 字节码分析.Animal {
  static int IQ;

  java.lang.String sex;

  static {};
    Code:
       0: sipush        150
       3: putstatic     #15                 // Field IQ:I
       6: return

  public 字节码分析.Son();
    Code:
       0: aload_0
       1: invokespecial #20                 // Method 字节码分析/Father."<init>":()V
       4: return

  public java.lang.String getName();
    Code:
       0: aload_0
       1: getfield      #26                 // Field name:Ljava/lang/String;
       4: areturn

  public void setName(java.lang.String);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #26                 // Field name:Ljava/lang/String;
       5: return

  public void run();
    Code:
       0: getstatic     #31                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #37                 // String 儿子花式跑步
       5: invokevirtual #39                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return

  public void run(java.lang.String);
    Code:
       0: getstatic     #31                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: aload_1
       4: invokevirtual #39                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       7: return

  public void jump();
    Code:
       0: getstatic     #31                 // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #46                 // String 实现Animal的jump方法
       5: invokevirtual #39                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值