class Person{
String name = "Person";
}
class Child extends Person {
String name = "Child";
}
public class duo {
public static void main(String[] args){
Person p = new Child();
Child c = new Child();
p.name = "zhangsan";
System.out.println(p.name);
System.out.println(c.name);
}
}
代码输出:
字节码解释执行之后的
F:\Java\Java_project\huawei\out\production\huawei>javap -v duo.class
Classfile /F:/Java/Java_project/huawei/out/production/huawei/duo.class
Last modified 2022-7-14; size 679 bytes
MD5 checksum 2068d0897329f87d88f8eff1d7149ff1
Compiled from "duo.java"
public class duo
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #10.#28 // java/lang/Object."<init>":()V
#2 = Class #29 // Child
#3 = Methodref #2.#28 // Child."<init>":()V
#4 = String #30 // zhangsan
#5 = Fieldref #31.#32 // Person.name:Ljava/lang/String;
#6 = Fieldref #33.#34 // java/lang/System.out:Ljava/io/PrintStream;
#7 = Methodref #35.#36 // java/io/PrintStream.println:(Ljava/lang/String;)V
#8 = Fieldref #2.#32 // Child.name:Ljava/lang/String;
#9 = Class #37 // duo
#10 = Class #38 // java/lang/Object
#11 = Utf8 <init>
#12 = Utf8 ()V
#13 = Utf8 Code
#14 = Utf8 LineNumberTable
#15 = Utf8 LocalVariableTable
#16 = Utf8 this
#17 = Utf8 Lduo;
#18 = Utf8 main
#19 = Utf8 ([Ljava/lang/String;)V
#20 = Utf8 args
#21 = Utf8 [Ljava/lang/String;
#22 = Utf8 p
#23 = Utf8 LPerson;
#24 = Utf8 c
#25 = Utf8 LChild;
#26 = Utf8 SourceFile
#27 = Utf8 duo.java
#28 = NameAndType #11:#12 // "<init>":()V
#29 = Utf8 Child
#30 = Utf8 zhangsan
#31 = Class #39 // Person
#32 = NameAndType #40:#41 // name:Ljava/lang/String;
#33 = Class #42 // java/lang/System
#34 = NameAndType #43:#44 // out:Ljava/io/PrintStream;
#35 = Class #45 // java/io/PrintStream
#36 = NameAndType #46:#47 // println:(Ljava/lang/String;)V
#37 = Utf8 duo
#38 = Utf8 java/lang/Object
#39 = Utf8 Person
#40 = Utf8 name
#41 = Utf8 Ljava/lang/String;
#42 = Utf8 java/lang/System
#43 = Utf8 out
#44 = Utf8 Ljava/io/PrintStream;
#45 = Utf8 java/io/PrintStream
#46 = Utf8 println
#47 = Utf8 (Ljava/lang/String;)V
{
public duo();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 9: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lduo;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=3, args_size=1
0: new #2 // class Child
3: dup
4: invokespecial #3 // Method Child."<init>":()V
7: astore_1
8: new #2 // class Child
11: dup
12: invokespecial #3 // Method Child."<init>":()V
15: astore_2
16: aload_1
17: ldc #4 // String zhangsan
19: putfield #5 // Field Person.name:Ljava/lang/String;
22: getstatic #6 // Field java/lang/System.out:Ljava/io/PrintStream;
25: aload_1
26: getfield #5 // Field Person.name:Ljava/lang/String;
29: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
32: getstatic #6 // Field java/lang/System.out:Ljava/io/PrintStream;
35: aload_2
36: getfield #8 // Field Child.name:Ljava/lang/String;
39: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
42: return
LineNumberTable:
line 11: 0
line 12: 8
line 13: 16
line 14: 22
line 15: 32
line 16: 42
LocalVariableTable:
Start Length Slot Name Signature
0 43 0 args [Ljava/lang/String;
8 35 1 p LPerson;
16 27 2 c LChild;
}
SourceFile: "duo.java"
划重点: