因为你的javap没有加-private参数 。默认情况下javap不显示private成员。加了参数之后的结果如下,可以看到该常量被引用了:
$ javap -private -v Test
Classfile /Users/zhb/Projects/gradle2/Test.class
Last modified 18 Jun 2019; size 395 bytes
MD5 checksum a7c2626b775843eab2e5bf6b6bdd5c0e
Compiled from "Test.java"
public class Test
minor version: 0
major version: 55
flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: #5 // Test
super_class: #6 // java/lang/Object
interfaces: 0, fields: 1, methods: 2, attributes: 1
Constant pool:
#1 = Methodref #6.#18 // java/lang/Object."":()V
#2 = Class #19 // java/util/HashMap
#3 = Methodref #2.#18 // java/util/HashMap."":()V
#4 = Fieldref #5.#20 // Test.m:Ljava/util/HashMap;
#5 = Class #21 // Test
#6 = Class #22 // java/lang/Object
#7 = Utf8 m
#8 = Utf8 Ljava/util/HashMap;
#9 = Utf8 Signature
#10 = Utf8 Ljava/util/HashMap;
#11 = Utf8
#12 = Utf8 ()V
#13 = Utf8 Code
#14 = Utf8 LineNumberTable
#15 = Utf8
#16 = Utf8 SourceFile
#17 = Utf8 Test.java
#18 = NameAndType #11:#12 // "":()V
#19 = Utf8 java/util/HashMap
#20 = NameAndType #7:#8 // m:Ljava/util/HashMap;
#21 = Utf8 Test
#22 = Utf8 java/lang/Object
{
private static java.util.HashMap m;
descriptor: Ljava/util/HashMap;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Signature: #10 // Ljava/util/HashMap;
public Test();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
LineNumberTable:
line 4: 0
static {};
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: new #2 // class java/util/HashMap
3: dup
4: invokespecial #3 // Method java/util/HashMap."":()V
7: putstatic #4 // Field m:Ljava/util/HashMap;
10: return
LineNumberTable:
line 6: 0
}
SourceFile: "Test.java"