I学霸官方免费教程二十五:Java基础教程之枚举 enum
2015-08-11 19:01
471 查看
枚举
枚举简单的说就是将需要的常量值一个一个的列举出来,并封装成一个整体。语法格式:[public] enum 枚举名{ //值列表 }
声明格式:枚举名 变量名;
赋值格式:变量名 = 枚举名.值
其中的列举的每个值要符合标识符命名规则,不可随意编写
实例: package enumdemo.simple; /** * 创建枚举类型的Week 注意:这里创建的是枚举,即数据类型是enum,而不是类 * @author 学霸联盟 - 赵灿 */ public enum Week { // 列举出周的值,中间用英文格式的逗号隔开 // 枚举中没有类型之分,直接列举需要的值即可 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 } package _enum.simple; /** * 测试枚举的使用 * @author 学霸联盟 - 赵灿 */ public class Test { public static void main(String[] args) { // 在switch中的应用;这样week代表的就是星期三 Week week = Week.星期三; // 这里传入了枚举类型的变量week switch (week) { // 这里的case值直接使用枚举中存在的值,不能使用其他值 case 星期一: System.out.println("周一"); break; case 星期二: System.out.println("周二"); break; case 星期三: System.out.println("周三"); break; case 星期四: System.out.println("周四"); break; case 星期五: System.out.println("周五"); break; case 星期六: System.out.println("周六"); break; case 星期日: System.out.println("周日"); break; } } } 输出结果: 周三
以下内容初学者可选读
public enum Week{ //这些值会被转换成Week类型的属性(变量)名 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 } //下面代码是枚举Week转换成类以后的代码 //枚举中列举的每个值都要符合标识符命名规则;这是因为枚举属于引用类型,在底层处理时,枚举Week会被转换成 public final class Week extends java.lang.Enum<Week>{ public static final Week 星期一; public static final Week 星期二; public static final Week 星期三; public static final Week 星期四; public static final Week 星期五; public static final Week 星期六; public static final Week 星期日; public static final Week[] $VALUES; static{ 星期一 = new Week(); 星期二 = new Week(); 星期三 = new Week(); 星期四 = new Week(); 星期五 = new Week(); 星期六 = new Week(); 星期七 = new Week(); $VALUES = {星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期七} } public static Week[] values(){ return (Week[])($VALUES. clone()); } public static Week valueOf(String name){ return (Week)(super. valueOf(Week.class, name)); } }
可以看到转换后的Week类中,所有成员都是静态的,所以提现出来的是值类型的特性
注意:虽然枚举在底层会被转换成类;但在使用时,不需要使用new去创建对象。需要传递时也都是值传递的特性
另外,枚举中可以有属性和方法,包括构造方法;
例1: public enum Week{ //MON会被转换成一个Week类型的属性,在创建Week对象是调用Week的无参构造 MON( ) } public enum Week{ //由于声明了带一个String类型参数的构造方法,所以此处这样写时也要带参数 //注意:属性、方法、构造方法的声明都必须放在枚举值之后 MON("星期一") //在枚举Week中声明一个带参数的构造方法 //注意:枚举中声明构造方法只能使用private修饰或者不写,不能使用public和protected private Week(String value){ //枚举中也可以使用this关键字 this.value = value; } //属性和方法可以使用所有的访问修饰符修饰 private String value; //声明一个获取value的方法 public String getValue(){ //没有局部变量和属性value冲突,关键字this可以省略 return value; } } public class Test{ public static void main(String[] args) { //输出MON的值 System.out.println(Week.MON.getValue()); } } 输出结果:星期一
例2: /** * 枚举Week * @author 学霸联盟 - 赵灿 */ enum Week { /* * 枚举值 * 因为该枚举中声明了带一个int类型参数的构造方法 * 所以枚举值后需要加小括号()中带一个int类型的值 * 这个值会传递给构造方法中的形参value */ MON(1), TUE(2), WED(3), THU(4), FRI(5), //SAT(6){}这样写作用类似匿名内部类 SAT(6) { // 重写getValue方法 @Override public int getValue() { return 60; } }, SUN(7) { @Override public int getValue() { return 70; } }; // 枚举的属性 private int value; // 该枚举的构造方法 Week(int value) { this.value = value; } // 该枚举的普通方法 public int getValue() { return value; } } /** * EnumTest类:用于测试枚举的使用 * @author 学霸联盟 - 赵灿 */ public class EnumTest { public static void main(String[] args) { System.out.println("EnumTest.FRI 的 value = " + Week.FRI.getValue()); System.out.println("EnumTest.SAT 的 value = " + Week.SAT.getValue()); } } 运行结果: EnumTest.FRI 的 value = 5 EnumTest.SAT 的 value = 60
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- eclipse loading com.android......adt
- 智渔课堂官方免费教程二十四:Java常用类之随机数 Math类和Random类
- I学霸官方免费教程二十四:Java常用类之随机数 Math类和Random类
- Spring事务处理的原理
- 智渔课堂官方免费教程二十三:Java常用类之日期类 Date类 SimpleDateFormat类 Calendar类
- I学霸官方免费教程二十三:Java常用类之日期类 Date类 SimpleDateFormat类 Calendar类
- 单点登录原理和java实现简单的单点登录
- eclipse开发,设置函数提示
- 智渔课堂官方免费教程二十二:Java常用类之接收控制台输入 Scanner类
- I学霸官方免费教程二十二:Java常用类之接收控制台输入 Scanner类
- java 设计模式----工厂模式---待修改
- 反射机制
- Spring中的p标签
- 智渔课堂官方免费教程二十一:Java常用类之包装类 自动装箱 自动拆箱
- I学霸官方免费教程二十一:Java常用类之包装类 自动装箱 自动拆箱
- File对象的基本操作学习
- java 写文件的三种方法比较
- java restful 服务端搭建
- eclipse properties中文乱码
- java 让程序定时运行