java枚举map定义_枚举详解 自定义方法 EnumSet,EnumMap 的应用

枚举使用详解

Java源码分析--Enum

/**

* @author hollis

*/

public final class Color extends Enum {

public static final Color[] values() { return (Color[])$VALUES.clone(); }

public static Color valueOf(String name) { ... }

private Color(String s, int i) { super(s, i); }

public static final Color RED;

public static final Color BLUE;

public static final Color GREEN;

private static final Color $VALUES[];

static {

RED = new Color("RED", 0);

BLUE = new Color("BLUE", 1);

GREEN = new Color("GREEN", 2);

$VALUES = (new Color[] { RED, BLUE, GREEN });

}

}

public static void main(String[] args) {

Color blue = Color.blue;

}

enum Color {

red,blue;

Color() {

System.out.println("无参构造");

}

}

控制台输出:

无参构造

无参构造

疑问?????   枚举类什么时候调用Color类的无参构造方法

2017年10月30日21:14:21添加

public final class com.edu.zql.Color extends java.lang.Enum{

public static final com.edu.zql.Color red;

public static final com.edu.zql.Color blue;

public static com.edu.zql.Color[] values();

Code:

0: getstatic #1; //Field $VALUES:[Lcom/edu/zql/Color;

3: invokevirtual #2; //Method "[Lcom/edu/zql/Color;".clone:()Ljava/lang/Object;

6: checkcast #3; //class "[Lcom/edu/zql/Color;"

9: areturn

public static com.edu.zql.Color valueOf(java.lang.String);

Code:

0: ldc_w #4; //class com/edu/zql/Color

3: aload_0

4: invokestatic #5; //Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;

7: checkcast #4; //class com/edu/zql/Color

10: areturn

static {};

Code:

0: new #4; //class com/edu/zql/Color

3: dup

4: ldc #10; //String red

6: iconst_0

7: ldc #11; //String 123

9: invokespecial #12; //Method "":(Ljava/lang/String;ILjava/lang/String;)V ****

12: putstatic #13; //Field red:Lcom/edu/zql/Color;

15: new #4; //class com/edu/zql/Color

18: dup

19: ldc #14; //String blue

21: iconst_1

22: invokespecial #15; //Method "":(Ljava/lang/String;I)V

25: putstatic #16; //Field blue:Lcom/edu/zql/Color;

28: iconst_2

29: anewarray #4; //class com/edu/zql/Color

32: dup

33: iconst_0

34: getstatic #13; //Field red:Lcom/edu/zql/Color;

37: aastore

38: dup

39: iconst_1

40: getstatic #16; //Field blue:Lcom/edu/zql/Color;

43: aastore

44: putstatic #1; //Field $VALUES:[Lcom/edu/zql/Color;

47: return

}

****标记的地方或许可以解释为什么会调用Color中声明的无参构造

以下是个人的理解:编译器在编译enum时,会将在enum中声明的所有构造方法中的参数前添加两个参数(String,int) 构造方法中都先调用super(string, i)

枚举类不能实例化的原因

java.lang.reflect.Constructor

4a166140d55b8348856e9b57c71c3dc8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值