黑马程序员——java高新技术学习日记(4)
来源:互联网 发布:java认证考试报名 编辑:程序博客网 时间:2024/06/05 14:58
-------android培训、java培训、期待与您交流! ----------
为什么要有枚举
·问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;
·枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
·私有构造方法
·每个元素分别用一个公有的静态成员变量
·可以有若干公有方法或抽象方法,例如,要提供nextDay方法必须是抽象的。
枚举的基本应用
·举例:定义一个weekday的枚举。
·扩展:枚举类的values,valueof,name,toString,ordinal等方法
·总结:枚举是一种特殊的类,其中的每个元素都是该类的一个对象,例如可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName();
为了可以更好理解枚举,先用普通类来模仿一下枚举,这可以参照java.awt.color类
public abstract class WeekDay {
}
--------------------------------------------------------------------------------------------
public class Enum {
}
采用抽象方法定义nextDay就将大量的if else语句转移成一个个独立的类。
如果想在一个类中编写完各个枚举类和测试调用类,那么可以讲枚举类定义成调用类的内部类。
public abstract class WeekDay {
}
枚举类例子:
public class Enum {
}
枚举类型的构造方法
枚举的构造方法必须位于参数列表后面,并且必须是private类型的,上面定义了2个构造方法,一个带参数,一个不带参数。默认情况下执行的是不带参数的,如果想执行带参数的,可以再上面的某个参数后面带一个参数,例如SUN(1),其中MON()没带参数,依然执行第一个构造方法。
总结:
·枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
·枚举元素必须位于枚举体重的最开始部分,枚举元素列表的后要有分号与其他成员分割。把枚举中的成员方法或变量等放在枚举元素的前面,编译器会报错。
·带构造方法的枚举
1.构造方法必须定义成私有的
2.如果有多个构造方法,该如何选择哪个构造方法?前面已有介绍
3.枚举元素MON和MON()效果是一样的,都是调用默认的构造方法。
·枚举只有一个成员时,就可以作为一种单例的实现方式。
·举例子带方法的枚举
1.定义枚举TrafficLamp
2.实现普通的next方法
3.实现抽象的next方法,每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部了的方式进行定义。
4.增加表示时间的构造方法
public enum TrafficLamp {
代码解释:YELLOW表示枚举中的一个对象。后面的大括弧表示此对象有TrafficLamp的子类去实现。YELLOW(5)带参数是因为,这里有一个带参数的构造方法。
- 黑马程序员——java高新技术学习日记(4)
- 黑马程序员——java高新技术学习日记(1)
- 黑马程序员——java高新技术学习日记(2)
- 黑马程序员——java高新技术学习日记(3)
- 黑马程序员-学习日记24(java高新技术 4 )
- 黑马程序员——学习日记20 java高新技术(上)
- 黑马程序员——学习日记21 java高新技术(中)
- 黑马程序员——学习日记22 java高新技术(下)
- 黑马程序员-学习日记21(java高新技术 1 )
- 黑马程序员-学习日记22(java高新技术2)
- 黑马程序员-学习日记23(java高新技术 3 )
- 黑马程序员-学习日记24(java高新技术 5 )
- 黑马程序员—Java高新技术4
- 黑马程序员—java高新技术(一)
- 黑马程序员—java高新技术(1)
- 黑马程序员—java高新技术(2)
- 黑马程序员—java高新技术
- 黑马程序员——Java基础学习日记(4)
- spoj 375 (树链剖分)
- mysql常用技巧
- Oracle12cR1 RAC安装CRS
- node.js protocol buffer与json
- PHP date函数参数详解
- 黑马程序员——java高新技术学习日记(4)
- 中移动TD-LTE及对终端的要求
- webservice的定义、描述和用途详解
- 一个fork的面试题
- HDU 1085
- exit、check、stop和return
- hdu3290 DFS
- thinkphp 前台html调用函数 格式化输出
- hdu1238 Substrings (暴力)