java的枚举
来源:互联网 发布:js select 选中事件 编辑:程序博客网 时间:2024/06/05 15:05
1.枚举的定义
枚举是从Java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合.
定义格式:[修饰符] enum 枚举类名
{
常量A,常量B,常量C;
}
enum Weekday {MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}
2.枚举类的特点
枚举特点① 枚举的直接父类java.lang.Enum,但是不能显示继承Enum。
enum Weekday extends Enum //报错{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}② 枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法。
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;public void doWork(){System.out.println("普通方法");};}③ 默认私有构造方法,即使不写访问权限也是private((假构造器,底层没有无参数构造器)。
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;Weekday(){System.out.println("无参数构造方法");}}
④ 每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字。
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday week = new Weekday(); //尝试创建对象,结果报错: 无法实例化枚举类型}}⑤ 枚举实例必须位于枚举体中的最开始部分,枚举实例列表最后要有分号与其他成员相分隔。
错误写法:
enum Weekday{void doWork(){System.out.println("其他方法");};MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY; //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错}正确写法:
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY; //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错void doWork(){System.out.println("其他方法");};}
⑥ 枚举实例后有花括号时,该实例是枚举类的匿名内部类对象(查看编译后的class文件)。
3.枚举的使用
1):枚举中都是全局公共的静态常量,可以直接使用枚举类名调用.Weekday day = Weekday.SATURDAY;
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday day = Weekday.SUNDAY;System.out.println(day); //SUNDAY}}
2):因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.
String name = 枚举对象.name(); //返回枚举对象的常量名称
int ordinal = 枚举对象.ordinal();//返回枚举对象的序号,从0开始.
String str = 枚举对象.toString():返回 枚举对象的常量名称
3):编译器生成的枚举类的静态方法(从反编译代码中查看):
枚举类型[] values();
Weekday[] ws = Weekday.values();:返回当前枚举类型所有的常量,使用一个数组封装起来.
枚举类型 valueof(String name);
Weekday day = Weekday.valueOf("MONDAY");//把一个指定名称字符串转换为当前枚举类中同名的常量.
enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday sunday = Weekday.SUNDAY;String day = sunday.name();int ordinal = sunday.ordinal();String day2 = sunday.toString();System.out.println(day); //SUNDAYSystem.out.println(ordinal); //6System.out.println(day2); //SUNDAYWeekday[] ws = Weekday.values();for(Weekday weekday: ws){System.out.println(weekday); //MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}}}
4):从java5开始出现枚举,switch也支持操作枚举类型.
switch只支持int类型,支持枚举是因为底层使用的枚举对象的ordinal,而ordinal的类型依然是int类型.
阅读全文
0 0
- Java 枚举--枚举的作用
- java的枚举
- Java 的枚举使用
- JAVA枚举的应用
- Java的枚举类型
- Java枚举的详解
- java的枚举
- java枚举的使用
- Java 枚举 的学习
- java枚举的使用
- Java枚举的使用
- java枚举的使用
- 学习java的枚举
- Java枚举的使用
- java 枚举的用法
- Java枚举的应用
- java枚举的使用
- Java枚举的应用
- 分布式系统的架构思路
- iview Badge组件count传值
- 计算机网络基础知识和体系结构
- 在angularJs的ui-view无法使用ng-click的问题
- 自顶向下深入分析Netty(三)--Bootstrap
- java的枚举
- True (False) Positives (Negatives) 相关概念
- 面试题9:变态跳台阶
- tox、subunit和testr
- day03
- RMI工作原理
- http://liulinxia02.blog.163.com/blog/static/268687720111129103740947/
- G2O 与rgbdslam在ubuntu16.04下安装
- MySQL插入性能测试