Java中的枚举--Enumeration

  之前并没有注意到枚举这个知识点,因为之前在项目中并没有使用过枚举,可能是项目并不是很复杂的原因吧,今天看张孝祥老师的讲解,觉得,这个枚举真的有很多值得学习的地方,探究一下枚举的设计原理,底层到底是怎么回事。

一、枚举的介绍

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 }

原文地址:https://www.cnblogs.com/ssh-html/p/10629409.html

时间: 2024-11-13 21:06:20

Java中的枚举--Enumeration的相关文章

JAVA中的枚举(一)

在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集".在Java中想表示这种数据集最容易想到的写法可能是这样,我们以表示一周五天的工作日来举例: public class WeekDay {         public static final int MONDAY = 1;   

说说Java中的枚举(一)

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”.在Java中想表示这种数据集最容易想到的写法可能是这样,我们以表示一周五天的工作日来举例: Java代码 public class WeekDay {         public static final int MONDAY = 1;         public static final in

Java中Enum枚举的使用

注意项: 1.在switch中使用枚举能使代码的可读性更强. 2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例. 3.所有的枚举都继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象不能再继承其他类. 4.如果想让枚举对应值,那么要写构造方法,也可以再覆盖toString()方法

Java中的枚举类型

枚举类型可以限定只能取特定值中的某一个. 这个是在编译器就可以限定的. 记住一个原则,错误越早发现越好,尽量在编译器发现. 枚举使用enum(小写)关键字 是java.lang.Enum类型,since jdk1.5 语法 public enum MyColor { red, green, blue };//限定了,用户如果要使用MyColor类型的话,就只能呢使用red,green或者blue三者之一. { MyColor m = MyColor.red; switch(m) {//枚举类型的

java中的枚举enum

个人感觉,枚举类和普通的java类区别不是很大,接下来简单的回忆一下枚举类 1.创建一个枚举类 Gender public enum Gender { } 和普通的测试类 GenderTest public class GenderTest { } 2.枚举类介绍 ①在枚举类中添加两个变量 public enum Gender { male,female; } 在测试类中直接输出 @Test public void test(){ Gender male = Gender.male; Syste

浅谈java中的枚举类型(转)

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YELLOW, RED } pu

java中的枚举类

枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一个public的enum类. 枚举类终究不是普通类,它与普通类有什么区别呢? enum默认继承的是java.lang.Enum类,而不是Object类.enum类不能显式继承其他父类. 使用enum定义.非抽象的枚举类默认会使用final修饰,因此enum类不能被继承(不能派生子类). 枚举类的构造器只能使用priva

Java中的枚举类为何不能有public构造器

声明:本博客为原创博客.未经同意.不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/27262809. 从Java 5開始有了枚举类,须要注意的是enum定义的类默认继承的是java.lang.Enum类而不是Object类. 同一时候注意枚举类不能派生子类(类的默认修饰符为final).其原因基于它仅仅有private构造器.那为什么要设计成这样呢? 事实上非常easy想明确,所谓枚举类就是有包括有固定数量实例(而且实例的值也固

Java中自定义枚举(Enum)项的值,可设置为指定的值

一.代码 package base.lang; /** * ClassName: StateEnum  * @Description: TODO * @author fuming * @date 2016年11月27日 */ public enum StateEnum{//添加枚举的指定常量online(10),offline(20); //必须增加一个构造函数,变量,得到该变量的值private int  mState=0;private StateEnum(int value){mState