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