黑马程序员之Java--枚举类型
来源:互联网 发布:质量控制系统 php 编辑:程序博客网 时间:2024/04/29 23:33
------- android培训、java培训、期待与您交流! ----------
编译后成字节码文件,查看一下
枚举调用:
所有枚举类型都继承自Enum,其方法也可被使用
枚举类型是JDK5.0的新特性,也是一个特殊的类
现在定义个枚举
public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN }
编译后成字节码文件,查看一下
- final enum hr.test.Color {
- // 所有的枚举值都是类静态常量
- public static final enum hr.test.Color RED;
- public static final enum hr.test.Color BLUE;
- public static final enum hr.test.Color BLACK;
- public static final enum hr.test.Color YELLOW;
- public static final enum hr.test.Color GREEN;
- private static final synthetic hr.test.Color[] ENUM$VALUES;
- // 初始化过程,对枚举类的所有枚举值对象进行第一次初始化
- static {
- 0 new hr.test.Color [1]
- 3 dup
- 4 ldc <String "RED"> [16]
- 6 iconst_0
- 7 invokespecial hr.test.Color(java.lang.String, int) [17]
- 10 putstatic hr.test.Color.RED : hr.test.Color [21]
- ......... 枚举对象BLUE等与上同
- 102 return
- };
- // 私有构造器,外部不可能动态创建一个枚举类对象(也就是不可能动态创建一个枚举值)。
- private Color(java.lang.String arg0, int arg1){
- // 调用父类Enum的受保护构造器创建一个枚举对象
- 3 invokespecial java.lang.Enum(java.lang.String, int) [38]
- };
- public static hr.test.Color[] values();
- // 实现Enum类的抽象方法
- public static hr.test.Color valueOf(java.lang.String arg0);
- }
从字节码文件中可以得知:
枚举的构造方法必须是私有的,不对外提供构造,构造器只是在构造枚举的时候被调用;
默认是调用无参的构造器,也可提供有参的构造器
枚举值必须在构造器的前面,且必须有分号结束;
所有枚举值都是静态常量,且是Color的对象;
枚举类是final,是不可被继承的
枚举内部调用构造器,下面是带参数的构造器
- enum Color{
- RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
- //构造枚举值,比如RED(255,0,0)
- private Color(int rv,int gv,int bv){
- this.redValue=rv;
- this.greenValue=gv;
- this.blueValue=bv;
- }
- public String toString(){ //覆盖了父类Enum的toString()
- return super.toString()+"("+redValue+","+greenValue+","+blueValue+")";
- }
- private int redValue; //自定义数据域,private为了封装。
- private int greenValue;
- private int blueValue;
- }
枚举就是一个特殊的类,那么枚举中也可以有方法,用交通灯演示,红灯 下一个就是 绿灯,绿灯下一个是黄灯,黄灯下一个就是红灯(内部类)
enum LampLight{ RED{ @Override public LampLight next() { return GREEN; } },YELLOW{ @Override public LampLight next() { return RED; } },GREEN{ @Override public LampLight next() { return YELLOW; } }; public abstract LampLight next();//抽象方法,让枚举值各自实现}
枚举调用:
public class Test{ public static void main(String[] args){ Color c= Color.RED; System.out.println(c); LampLight l = LampLight.RED; System.out.println( l.next()); //输出 GREEN }}
所有枚举类型都继承自Enum,其方法也可被使用
1、 ordinal()方法: 返回枚举值在枚举中的顺序,这个根据枚举值声明的顺序而定
Color.RED.ordinal(); //返回结果:0
Color.GREEN.ordinal(); //返回结果:4
2、compareTo()方法:枚举实现了比较器接口,可以比较对象和指定对象的顺序,前提是两个枚举值必须是同个枚举类型
3、values()方法:静态方法,返回一个包含枚举值的数组
4、 toString()方法:返回枚举常量的名称
5.、valueOf()方法:这个和toString()对应,根据指定名称返回枚举类型的枚举常量
6、equals()方法:比较两个枚举对象的引用,这个还是使用object的方法
枚举在switch中的使用:
一般都是Color c = Color.RED;而在switch中比较特殊,不需要前面的枚举类型,直接是枚举值
switch( c){ case RED: break; default: break;}
------- android培训、java培训、期待与您交流! ----------
0 0
- 黑马程序员之Java--枚举类型
- 黑马程序员--java枚举类型
- 黑马程序员---java 枚举类型
- 黑马程序员-java的枚举类型
- 黑马程序员Java类之枚举(Enum)
- 黑马程序员---java高新技术之枚举
- 黑马程序员Java知识回顾之枚举
- 黑马程序员-JAVA基础之枚举
- 黑马程序员——Java之枚举
- 黑马程序员之枚举
- 黑马程序员_枚举类型
- 黑马程序员_Java枚举类型
- 黑马程序员-java-枚举
- 黑马程序员-java 枚举
- 黑马程序员java枚举
- 黑马程序员 Java枚举
- 黑马程序员-java枚举
- 黑马程序员---java枚举
- zynq中断入门
- SQL Tuning Advisor(STA) 到底做了什么?
- adb的基本操作
- restful理解
- cocos2d-x3.0 关于ScrollView的使用
- 黑马程序员之Java--枚举类型
- 关于EXPORT_SYMBOL
- Qt5官方Demo解析集1——Fortune Server/Client
- 史上最经典的Linux内核学习方法论
- 在iOS / Android的统一字体问题
- 黑马程序员_java_面向对象_异常
- 使用 DBMS_PROFILER 定位 PL/SQL 瓶颈代码
- compress、uncompress - zlib
- Memcached源码阅读之资源初始化