1、枚举是什么?

  Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期有星期一到星期日七个对象。这些明显都是固定的,且有限个。

2、枚举类和普通类的区别

  ①、使用 enum 定义的枚举类默认继承 java.lang.Enum 类,即枚举类是不能再继承别的类了。而普通类的一般父类默认是 Object

  ②、枚举类的构造器只能使用 private 定义,而普通类的还可以用 public 修饰

  ③、枚举类的所有实例必须在枚举类中显示列出(,分隔   ;结尾),列出的实例系统会默认自动添加 public static final 修饰

  ④、所有的枚举类都提供了一个 values() 方法,可以用来遍历枚举值

3、怎么用枚举?

   首先我们看,以一个季节类有春、夏、秋、冬四个对象为例:在 JDK 1.5以前是怎么表示的呢?

   创建一个 季节类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Season {
    //属性不能修改,用 final 修饰
    private final String name;
    private final String desc;
     
    //因为枚举类的对象是有限的,即我们不能再外面 new Season(),所以构造器私有化
    private Season(String name,String desc) {
        this.name = name;
        this.desc = desc;
    }
     
    //不能再外面new Season(),那么内部必须创建出对象
    //外界直接通过类名来访问,用 static 修饰
    //外界不能修改,用 final 修饰
    public static final Season SPRING = new Season("春天""春暖花开");
    public static final Season SUMMER = new Season("夏天""炎炎盛夏");
    public static final Season FALL = new Season("秋天""秋高气爽");
    public static final Season WINTER = new Season("冬天""大雪纷飞");
 
    @Override
    public String toString() {
        return "Season [name=" + name + ", desc=" + desc + "]";
    }
     
     
}

  测试:

1
2
3
4
5
6
7
8
9
public class SeasonTest {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.SUMMER);
        System.out.println(Season.FALL);
        System.out.println(Season.WINTER);
    }
 
}

  结果为:

1
2
3
4
Season [name=春天, desc=春暖花开]
Season [name=夏天, desc=炎炎盛夏]
Season [name=秋天, desc=秋高气爽]
Season [name=冬天, desc=大雪纷飞]

  

使用 Enum 来表示季节类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum SeasonEnum {
 
    //必须在第一行写出有哪些枚举值
    SPRING("春天""春暖花开"),
    SUMMER("夏天""炎炎盛夏"),
    FALL("秋天""秋高气爽"),
    WINTER("冬天""大雪纷飞");
     
    private final String name;
    private final String desc;
     
    private SeasonEnum(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
     
     
}

  测试:

1
2
3
4
5
6
7
8
public static void main(String[] args) {
         
        System.out.println(SeasonEnum.SPRING); //SPRING
        //用 values() 来获取所有的枚举值
        for(SeasonEnum s : SeasonEnum.values()){
            System.out.println(s);
        }
    }

  

枚举类还能实现接口:

第一步:定义一个接口,方法是返回季节的月份

1
2
3
4
5
public interface SeasonEnumImpl {
    //用来返回季节的月份
    String getMonth();
 
}

第二步:季节类实现接口,并实现接口中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public enum SeasonEnum implements SeasonEnumImpl{
 
    //必须在第一行写出有哪些枚举值
    SPRING("春天""春暖花开"){
        @Override
        public String getMonth() {
            return "12-2";
        }
    },
    SUMMER("夏天""炎炎盛夏"){
        @Override
        public String getMonth() {
            return "3-5";
        }
    },
    FALL("秋天""秋高气爽"){
        @Override
        public String getMonth() {
            return "6-8";
        }
    },
    WINTER("冬天""大雪纷飞"){
        @Override
        public String getMonth() {
            return "9-11";
        }
    };
     
    private final String name;
    private final String desc;
     
    private SeasonEnum(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
}  

测试:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
         
        System.out.println(SeasonEnum.SPRING); //SPRING
         
        //用 values() 来获取所有的枚举值
        for(SeasonEnum s : SeasonEnum.values()){
            System.out.println(s.getMonth());
        }
    } 

结果为:

1
2
3
4
5
SPRING
12-2
3-5
6-8
9-11

  

  

注意:

①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)

②、如果枚举类的对象只有一个,那么可以作为单例模式的实现

作者:YSOcean

Java 枚举类 详解的更多相关文章

  1. Java 枚举类详解

    1. 枚举类定义 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象,这种实例有限而且固定的类,在Java里被称为枚举类. 2. 早期实现枚举的方式 public static f ...

  2. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  3. java枚举使用详解,整理的很好,只能收下。。。

    java枚举使用详解 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素 ...

  4. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  5. C++之enum枚举量声明、定义、使用与枚举类详解

    C++之enum枚举量声明.定义.使用与枚举类详解 学习一个东西,首先应该指导它能做什么,其次去知道它怎么去做,最后知道为什么去这么做. 知其然知其所以然.不能冒进 ,一步一步的慢慢来.

  6. java枚举使用详解

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...

  7. java枚举使用详解(转)

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...

  8. java 枚举使用详解

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...

  9. java Random类详解

    java Random类位于java.util包下,主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家 Random类 (java.util) Random类中实现的随机算法是伪随 ...

随机推荐

  1. spring MVC初始化过程学习笔记1

    如果有错误请指正~ 1.springmvc容器和spring的关系? 1.1 spring是个容器,主要是管理bean,不需要servlet容器就可以启动,而springMVC实现了servlet规范 ...

  2. mui longtap 事件无效

    1.mui  的部分事件默认是关闭的 需要在init中单独配置事件开关 mui.init({ gestureConfig: { longtap: true, //默认为false } })

  3. 钩子函数mounted:

    1.钩子函数 钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息.事件进行过滤,访问在正常情况下无法访问的消息.钩子的本质是一段用以处理系统消息的程序,通过 ...

  4. Android DevArt5:如何在Android中创建多线程?

    本篇内容: 如何在Android中创建多进程?查看进程的三种方式有哪些? 多进程模式的运行机制?- 演示了多进程出现问题中的两种情况: 静态成员失效 Application多次创建 IPC基础概念介绍 ...

  5. 自定义 mapper的实现

    json格式,要想好看直接百度,json,将字符放进去就可 一步:将mapper复制一份,名字加一个Custom自定义 二步:mpper.xml也是一样,设置里面的namespace映射关系 自定义m ...

  6. C#自定义控件:如果定义控件的事件

    我做了一个控件: 在控件上面添加了一个 richTextBox1 系统控件 我想要的效果时,如果点击我的控件,就执行 用户自定义的 控件的 onClick 事件 而控件的工作过程时,如果点击我的控件, ...

  7. 吴裕雄 python神经网络(7)

    import numpy as npnp.random.randint(0,49,3) # -*- coding:utf-8 -*-import kerasfrom keras.models impo ...

  8. 三种方法让Response.Redirect在新窗口打开

    通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开,下面为大家介绍三种具体的实现方法 Response.Rederect在默认情况下是在本页跳转 ...

  9. workerman channel组件集群推送

    <?phpuse Workerman\Worker; require_once '../../web/Workerman/Autoloader.php';require_once '../../ ...

  10. html页面嵌套---分享功能

    1.使用原因 项目中用到了thymeleaf去渲染模板,但是我们这有一个分享的页面,分享出去的页面要加上与生成模板不一样的内容.因为重新再加一套模板又会引起内容的重复与资源浪费.这里就用到了JS的lo ...