黑马程序员-JAVA基础之枚举
2015-08-30 04:10
429 查看
——- android培训、java培训、期待与您交流! ———-
什么是枚举?
现实中有这么一类是事物,它们只能取有限固定的值,比如星期几、性别、交通灯等等。java就针对这类事物定义了一个新的特性——枚举,它是一种特殊的类。
比如要定义星期几或性别的变量,该怎么定义?假设用1—7分别表示星期一到星期日,但有人可能会写成:int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值的一个,否则编译器就会报错。枚举可以让编译器在编译时,就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标 。
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法 。
枚举的特点:
1.私有构造方法。
2.每个元素分别用一个共有的静态成员变量表示。
3.可以有若干个公有方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误
带构造方法的枚举
* 1、构造方法必须定义成私有的
* 2、如果有多个构造方法,该如何选择哪个构造方法?
* 3、枚举元素MON和MON()的效果一样,都是调用默认的构造方法
带方法的枚举
* 1、定义枚举的TrafficLamp
* 2、实现普通的Lamp方法
* 3、实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义
* 4、增加上表示时间的构造方法
枚举只有一个成员时,就可以作为一种单例的实现方式
枚举中定义的交通灯有RED,GREEN,YELLOW三个值,意味着enum中事先定义了3个交通灯对象,而且只有这3个交通灯对象,因为构造方法是私有的。由于这3个对象可以由枚举名直接获取,所以这3个对象是静态的。
枚举中可以定义抽象方法,这个抽象方法由其子类实现,枚举在建立3个对象时用内部类的形式继承带有抽象方法的枚举,实现抽象方法。
——- android培训、java培训、期待与您交流! ———-
什么是枚举?
现实中有这么一类是事物,它们只能取有限固定的值,比如星期几、性别、交通灯等等。java就针对这类事物定义了一个新的特性——枚举,它是一种特殊的类。
比如要定义星期几或性别的变量,该怎么定义?假设用1—7分别表示星期一到星期日,但有人可能会写成:int weekday=0;
枚举就是要让某个类型的变量的取值只能为若干个固定值的一个,否则编译器就会报错。枚举可以让编译器在编译时,就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标 。
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法 。
枚举的特点:
1.私有构造方法。
2.每个元素分别用一个共有的静态成员变量表示。
3.可以有若干个公有方法和抽象方法。
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后面有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误
带构造方法的枚举
* 1、构造方法必须定义成私有的
* 2、如果有多个构造方法,该如何选择哪个构造方法?
* 3、枚举元素MON和MON()的效果一样,都是调用默认的构造方法
带方法的枚举
* 1、定义枚举的TrafficLamp
* 2、实现普通的Lamp方法
* 3、实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义
* 4、增加上表示时间的构造方法
枚举只有一个成员时,就可以作为一种单例的实现方式
public class EnumTest { public static void main(String[] args) { WeekDay weekDay2=WeekDay.FRI; System.out.println(weekDay2); System.out.println(weekDay2.name()); System.out.println(weekDay2.ordinal()); System.out.println(WeekDay.valueOf("SUN")); System.out.println(WeekDay.values().length); new Date(300){}; } public enum WeekDay { //元素列表必须位于所有成分之前,元素列表后有其他方法,那么元素列表最后必须带分号 SUN(1),MON,TUE,WED,THI,FRI,SAT; //构造方法必须写成私有的 private WeekDay(){System.out.println("first");} private WeekDay(int day){System.out.println("second");} } }
枚举中定义的交通灯有RED,GREEN,YELLOW三个值,意味着enum中事先定义了3个交通灯对象,而且只有这3个交通灯对象,因为构造方法是私有的。由于这3个对象可以由枚举名直接获取,所以这3个对象是静态的。
public enum TrafficLamp{ RED,GREEN,YELLOW; } TrafficLamp tl = TrafficLamp.GREEN; System.out.println(tl);
枚举中可以定义抽象方法,这个抽象方法由其子类实现,枚举在建立3个对象时用内部类的形式继承带有抽象方法的枚举,实现抽象方法。
public enum TrafficLamp{ RED(20),GREEN(30),YELLOW(3); private TrafficLamp(){} private TrafficLamp(int time){ System.out.println(time); } } <span style="white-space:pre"> </span>public enum TrafficLamp{ RED(20) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return GREEN; } }, GREEN(30) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return YELLOW; } }, YELLOW(3) { @Override public TrafficLamp nextLamp() { // TODO Auto-generated method stub return RED; } }; private TrafficLamp(){} private TrafficLamp(int time){ System.out.println(time); } public abstract TrafficLamp nextLamp(); }
——- android培训、java培训、期待与您交流! ———-
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统