Java 外部枚举类是隐式静态的吗?
在阅读有关枚举的信息时。我是通过邮局来的, 其中外部枚举隐式回答为静态 我创建了一个枚举,当我检查字节码时,枚举是最终的,但不是静态的Java 外部枚举类是隐式静态的吗?,java,Java,在阅读有关枚举的信息时。我是通过邮局来的, 其中外部枚举隐式回答为静态 我创建了一个枚举,当我检查字节码时,枚举是最终的,但不是静态的 final class practice.Enums extends java.lang.Enum<practice.Enums> { public static final practice.Enums FRIEND; static {}; Code: 0: new #1
final class practice.Enums extends java.lang.Enum<practice.Enums> {
public static final practice.Enums FRIEND;
static {};
Code:
0: new #1 // class practice/Enums
3: dup
4: ldc #12 // String FRIEND
6: iconst_0
7: invokespecial #13 // Method "<init>":(Ljava/lang/String;I)V
10: putstatic #17 // Field FRIEND:Lpractice/Enums;
13: iconst_1
14: anewarray #1 // class practice/Enums
17: dup
18: iconst_0
19: getstatic #17 // Field FRIEND:Lpractice/Enums;
22: aastore
23: putstatic #19 // Field ENUM$VALUES:[Lpractice/Enums;
26: return
public static practice.Enums[] values();
Code:
0: getstatic #19 // Field ENUM$VALUES:[Lpractice/Enums;
3: dup
4: astore_0
5: iconst_0
6: aload_0
7: arraylength
8: dup
9: istore_1
10: anewarray #1 // class practice/Enums
13: dup
14: astore_2
15: iconst_0
16: iload_1
17: invokestatic #27 // Method java/lang/System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
20: aload_2
21: areturn
public static practice.Enums valueOf(java.lang.String);
Code:
0: ldc #1 // class practice/Enums
2: aload_0
3: invokestatic #35 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
6: checkcast #1 // class practice/Enums
9: areturn
}
final class practice.Enums扩展了java.lang.Enum{
公共静态最终实践。枚举朋友;
静态{};
代码:
0:新#1//课堂练习/列举
3:dup
4:ldc#12//String FRIEND
6:iconst_0
7:invokespecial#13//Method“”:(Ljava/lang/String;I)V
10:putstatic#17//Field-FRIEND:lpracce/Enums;
13:iconst_1
14:anewarray#1//课堂练习/列举
17:dup
18:iconst_0
19:getstatic#17//Field-FRIEND:lpracce/Enums;
22:aastore
23:putstatic#19//字段ENUM$值:[lpracce/Enums;
26:返回
公共静态实践。枚举[]值();
代码:
0:getstatic#19//字段枚举$VALUES:[Lpractice/Enums;
3:dup
4:astore_0
5:iconst_0
6:aload_0
7:排列长度
8:dup
9:istore_1
10:anewarray#1//课堂练习/列举
13:dup
14:astore_2
15:iconst_0
16:iload_1
17:invokestatic#27//Method java/lang/System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
20:aload_2
21:轮到你了
public static practice.Enums valueOf(java.lang.String);
代码:
0:ldc#1//课堂练习/列举
2:aload_0
3:invokestatic#35//方法java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
6:checkcast#1//课堂练习/列举
9:轮到你了
}
请帮助我理解如果外部枚举是静态的,为什么它们不以字节码声明?类本身不是静态的,但所有枚举成员都固有地声明为public、static和final 有关如何模拟静态类的信息,请参见