Java枚举解读
来源:互联网 发布:淘宝面条机 编辑:程序博客网 时间:2024/06/16 10:40
先看下面的一段代码:
public enum Color {
RED{
public String getName(){
return"红色";
}
}
,GREEN{
public String getName(){
return"绿色";
}
}
,YELLOW{
public String getName(){
return"黄色";
}
};
public abstract String getName();
}
从上面的代码中,如果认为RED等是Color类的一个static final实例对象的话,那上面的代码就让人费解了,为什么枚举类型Color中的抽象方法,实例对象RED可以重写枚举类型的方法呢?
先看一下上面的方法的值吧!
public class TestColor {
public static void main(String[] args) {
System.out.println(Color.RED.getName());//红色
System.out.println(Color.GREEN.getName());//绿色
System.out.println(Color.YELLOW.getName());//黄色
//class com.enumtest.test.Color$1
System.out.println(Color.RED.getClass());
//class com.enumtest.test.Color
System.out.println(Color.RED.getClass().getSuperclass());
//class java.lang.Enum
System.out.println(Color.RED.getClass().
getSuperclass().getSuperclass());
System.out.println(Color.class.getModifiers());//17409
System.out.println(Color.RED.getClass().
getClassLoader());//sun.misc.Launcher$AppClassLoader@5ab8df17
System.out.println(TestColor.class.getClassLoader());//sun.misc.Launcher$AppClassLoader@5ab8df17
System.out.println(ClassLoader.class.getClassLoader());//null
System.out.println(Class.class.getClassLoader());//null
}
}
从上面的测试结果可以看出,枚举类型类其实是Enum(抽象类)的一个子类(可以是抽象的,也可以是不抽象的,主要根据里面有没有抽象方法),然后枚举值是枚举类型的一个匿名子类创建的对象。其实可以这么解读:
RED{
public String getName(){
return"红色";
}
}
相当于下面这样:
publicstatic final Color RED = new Color(){
public String getName(){
return "红色";
}
}
所以Java编译器在就是按这种方式编译的,所以我们在调用Color.RED.getName()就是在调用Color.RED实例对象的getName方法。
- Java枚举解读
- 枚举类完美解读
- JAVA 枚举
- java枚举
- java枚举
- Java 枚举
- Java 枚举
- Java 枚举
- java 枚举
- java 枚举
- java枚举
- java枚举
- java枚举
- java枚举
- Java枚举
- java枚举
- java 枚举
- java枚举
- ZOJ3166【找环值最小】
- 如何在textarea内通过代码来换行?
- rabbit svn命令行常用命令
- JDK之Hashset源码解析
- 求空地的个数
- Java枚举解读
- 跳台阶
- SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析
- 根据汉字获取拼音
- csrf漏洞攻击手段和影响详解
- 操作系统启动简介
- MFS分布式文件系统
- #630 – PreviewTextInput 和TextInput 事件(PreviewTextInput and TextInput Events)
- cake1190