枚举详解 自定义方法 EnumSet,EnumMap 的应用
2017-08-17 00:00
686 查看
枚举使用详解
http://www.cnblogs.com/hyl8218/p/5088287.htmlJava源码分析--Enum
http://blog.csdn.net/qiuchengjia/article/details/52910948/** * @author hollis */ public final class Color extends Enum<Color> { 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 "<init>":(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 "<init>":(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.C7fe0
onstructor
相关文章推荐
- 详解iOS应用中自定义UIBarButtonItem导航按钮的创建方法
- iOS UISearchBar 属性、方法详解及应用(自定义搜索框样式)
- C++ explicit关键字应用方法详解(转转转)
- JavaSE第六十讲 EnumSet与EnumMap详解
- Java枚举应用方法
- Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法
- Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法
- C++ explicit关键字应用方法详解
- [置顶] 自定义View之Layout方法详解
- 内网端口映射应用案例及设置方法详解
- C++ explicit关键字应用方法详解
- VS2005自定义ActiveX控件在asp.net中应用方法
- 一种基于自定义代码记录用户访问日志在Sharepoint网站的应用方法!
- MySQL数据库之布尔类型、枚举类型和集合类型的应用场景详解
- Canvas类的最全面详解 - 自定义View应用系列
- Android应用盈利广告平台的嵌入方法详解
- 黑马程序员:ClassLoader介绍、自定义ClasLoader的应用及模板方法设计模式
- 详解企业移动门户之子应用嵌入实现方法