【1】枚举·一:为什么要有枚举 (1)问题:定义星期几或性别的变量,该这么定义? 假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday =0; (2) 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时.就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
二 : 用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
-私有的构造方法 -每个元素分别用一个公有的静态成员变量表示 -可以有若干公有方法或抽象方法例如,要提供nextDay方法必须是抽象的。
采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。
(1)这个类所定义出来的值 不是基本类型的 而是 对象类型,也只能是这里规定的那么几个值。不然会报错。
【2】java5的枚举
(1)枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。(2)枚举元素必须位于枚举体重的最开始的部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法和变量等放在枚举元素的前面,编译器报告错误。
【1】带构造方法的枚举
-构造方法必须定义成私有的-如果有多个构造方法,该如何选择哪个构造方法?-枚举元素MON和MON()的效果一样,都是调用默认构造方法。 【2】实现带有构造方法的枚举(1)元素列表必须位于枚举中所有内容的之前,也就是元素列表必须在最前面
(2)构造方法必须是私有的private
(3)在枚举元素的后面加上()指定构造时候要调用的构造方法【3】带方法的枚举-定义枚举TrafficLamp-实现普通的next方法-实现抽象的next方法:每个元素分别是由枚举类的子类来生产的实例对象,这些子类采用类似内部类的方式进行定义。-增加上表示时间的构造方法红灯过后就是绿灯,绿灯过后是黄灯,黄灯过后是红灯·枚举只有一个成员时,就可以作为一种单例的实现方式。【3】Enum
Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。 3.Enum默认实现了java.lang.Comparable接口。 4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”. 5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。 6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。 7.Enum还有一个oridinal的方法.这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。
别忘了:枚举定义为 静态的 只要一加载 类 就会调用 构造方法。
注意:利用 abstract 抽象方法,可以避免使用大量的if,else 语句,是程序更加的健壮与美观,和灵活,便于扩展(具有扩展性)
这样 让 nextDay()方法 分别由子类来完成,而不是由父类去逐一的实现。
如果想在 一个类中编写完各种枚举类和测试用类,那么可以将枚举类定义成调用类的 内部类。
SUN
----------上面是 星期天-----------------
frist
second -------->(调用 带参数的构造方法)
frist
frist
frist
frist
frist
+++++++++ 最后执行 ++++++++++++
FRI
---------------又来了一个---------------------
FRI
5
SUN
7
实现带有抽象方法的枚举:
实现抽象的next()方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用 类似 内部类的方式进行定义。
每个元素是这个类的实例对象,这个实例对象现在不能拿着 这个类TrafficLamp 直接去new 了。
只能拿这个类的子类对象去new 并且 把这个对象的名字叫为:REN,GREEN,YELLOW.
应该 在哪里 定义 子类的实现代码呢???
REN 是 TrafficLamp类的子类的 实例对象。
枚举只有一个成员时,就可以作为一种单例的实现方式。
分享到:
相关推荐
Java高新技术_java5的枚举的基本应用
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
java 枚举类总结 enum
java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>
简单总结java枚举类型,适合java初学者
java枚举小例子,简单了解枚举的用法,适合初学者使用。
主要介绍了Java手动方式创建枚举类,结合实例形式分析了java创建枚举类的方法及相关操作技巧,需要的朋友可以参考下
java高级编程 Enum枚举 包括枚举的例子,问题 及一些文档,是复习的好资源
java基础,反射枚举基础,自己总结的笔记。
列举java 枚举相关信息列举java 枚举相关信息列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息 列举java 枚举相关信息
我想几乎每一个学习Java语言的人在学习枚举的时候首先的一个疑问就是“为什么不用static final字段替代?”,有这个疑问就说明你已经摸索到了枚举类型的最主要功能......
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { SPRING, SUMMER, AUTUMN, WINTER } 定义了一个季节枚举类型。 在本例中,对于Season.SPRING这个...
如有侵权请联系删除,欢迎批评指正 java枚举,起初在网上抄了一部分,然后自己加了点示例,做一个记录,也算是为以后留个备份,技术小白一个,还在努力成长
JAVA枚举JAVA枚举
关于java枚举的总结: 从入门介绍到项目使用的实际经验归纳总结得出! 从jdk5到jdk8!
java 枚举ppt 枚举定义 用普通类模拟枚举 带构造方法的枚举 带抽象方法的枚举 单例与枚举 枚举与类集
java枚举状态机
java 课件 数组、枚举及注解 java 课件 数组、枚举及注解 java 课件 数组、枚举及注解 java 课件 数组、枚举及注解
【Java面试】枚举从使用到原理