标签:TrafficLamp2 return Enumeration 枚举 time Override Java public
之前并没有注意到枚举这个知识点,因为之前在项目中并没有使用过枚举,可能是项目并不是很复杂的原因吧,今天看张孝祥老师的讲解,觉得,这个枚举真的有很多值得学习的地方,探究一下枚举的设计原理,底层到底是怎么回事。
一、枚举的介绍
1、枚举用于表示编程语言中的一组命名常量
例如,一副牌中的四个套装可以是四个名为Club,Diamond,Heart和Spade的枚举器,属于名为Suit的枚举类型。其他示例包括天然枚举类型(例如行星,星期几,颜色,方向等)。 当我们在编译时知道所有可能的值时使用枚举,例如菜单上的选择,舍入模式,命令行标志等。枚举类型中的常量集不必始终固定。
2、在Java中(从1.5开始),枚举使用枚举数据类型表示
Java枚举比C / C ++枚举更强大。在Java中,我们还可以向其中添加变量,方法和构造函数。枚举的主要目标是定义我们自己的数据类型(enumer数据类型)。
二、枚举的使用
简单的使用,一般都是直接定义一些值,其实本质是一个个的对象,但是其实枚举也有复杂的使用方法,下面是一个复杂的使用方法的例子:
其实从内部类就可以看出来,定义的那些值真的是enum关键字修饰的对象,重写了父类的抽象方法,注意:定义的对象必须放在最上面
1 public enum TrafficLamp { 2 3 RED(30) { 4 5 @Override 6 public TrafficLamp nextLamp() { 7 return GREEN; 8 } 9 }, 10 GREEN(45) { 11 12 @Override 13 public TrafficLamp nextLamp() { 14 return YELLOW; 15 } 16 }, 17 YELLOW(5) { 18 19 @Override 20 public TrafficLamp nextLamp() { 21 return RED; 22 } 23 }; 24 25 public abstract TrafficLamp nextLamp(); 26 27 private int time; 28 29 private TrafficLamp(int time){ 30 this.time = time; 31 } 32 }
三、枚举的原理
在第二个中其实已经介绍了一些枚举类的实际本质的东西,张孝祥老师用class类实现枚举,其中用到了内部类的概念,在编译之后,会形成四个class文件,内部类被编译成class文件。
1 public abstract class TrafficLamp2 { 2 3 /** 4 * 红灯 等待30秒 5 */ 6 public final static TrafficLamp2 RED = new TrafficLamp2(30) { 7 8 @Override 9 public TrafficLamp2 nextLamp() { 10 return GREEN; 11 } 12 13 @Override 14 public String toString() { 15 return "RED"; 16 } 17 }; 18 19 /** 20 * 绿灯 等待45秒 21 */ 22 public final static TrafficLamp2 GREEN = new TrafficLamp2(45) { 23 24 @Override 25 public TrafficLamp2 nextLamp() { 26 return YELLOW; 27 } 28 29 @Override 30 public String toString() { 31 return "GREEN"; 32 } 33 }; 34 35 /** 36 * 黄灯 等待5秒 37 */ 38 public final static TrafficLamp2 YELLOW = new TrafficLamp2(5) { 39 40 @Override 41 public TrafficLamp2 nextLamp() { 42 return RED; 43 } 44 45 @Override 46 public String toString() { 47 return "YELLOW"; 48 } 49 }; 50 51 public abstract TrafficLamp2 nextLamp(); 52 53 public abstract String toString(); 54 55 private int time; 56 57 /** 58 * 私有化构造方法 59 * 60 * @param time 61 */ 62 private TrafficLamp2(int time) { 63 this.time = time; 64 } 65 }
标签:TrafficLamp2,return,Enumeration,枚举,time,Override,Java,public 来源: https://www.cnblogs.com/ssh-html/p/10629409.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。