Java 枚举类 详解
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
|
SPRING12-23-56-89-11 |
注意:
①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)
②、如果枚举类的对象只有一个,那么可以作为单例模式的实现
Java 枚举类 详解的更多相关文章
- Java 枚举类详解
1. 枚举类定义 在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象,这种实例有限而且固定的类,在Java里被称为枚举类. 2. 早期实现枚举的方式 public static f ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- java枚举使用详解,整理的很好,只能收下。。。
java枚举使用详解 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素 ...
- Java String类详解
Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...
- C++之enum枚举量声明、定义、使用与枚举类详解
C++之enum枚举量声明.定义.使用与枚举类详解 学习一个东西,首先应该指导它能做什么,其次去知道它怎么去做,最后知道为什么去这么做. 知其然知其所以然.不能冒进 ,一步一步的慢慢来.
- java枚举使用详解
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...
- java枚举使用详解(转)
在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...
- java 枚举使用详解
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...
- java Random类详解
java Random类位于java.util包下,主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家 Random类 (java.util) Random类中实现的随机算法是伪随 ...
随机推荐
- 容器viewController添加或者删除子viewController
假设有一个viewControllerA,我们想在viewControllerA中添加viewControllerB,需要执行以下方法: [viewControllerA addChildViewCo ...
- 剑指offer例题——跳台阶、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有 ...
- Oracle快速导入数据工具
sqlldr是oracle自带的快速导入批量数据的工具,常用于性能测试.考虑手工构造控制文件较为繁琐,因此使用脚本完成批量数据的自动导入. 基本知识 sqlldr命令语法 sqlldr dbname/ ...
- webpack 自动发现 entry 的配置和引用方式
假定我们的项目目录为如下的样子: - root/ - assets/ - app/ - global.js - index/ - index.js - auth/ - login.js - regis ...
- [jPlayer]一分钟部署jPlayer
---------------------------------------------------------------------------------------------------- ...
- easyUi onLoadSuccess:、onChange这些事件不能嵌套使用!!!!
easyUi onLoadSuccess:.onChange这些事件不能嵌套使用!!!!
- Arcgis map export or print Error: Cannot map metafile into memory. Not enough memory
Arcgis map export or print Error: Cannot map metafile into memory. Not enough memory Link: https:/ ...
- Redis入门及主从配置
1.Redis入门简介 Redis是一个开源的使用ANSI C语音编写.支持网络.可基于内存亦可持久化的日志型,Key-Value数据库.支持存储的value类型包括 string(字符串).list ...
- 关于池化(pooling)理解!!!
网上看到一个池化的解释是: 为了描述大的图像,可以对不同位置的特征进行聚合统计,如计算平均值或者是最大值,即mean-pooling和max-pooling 我的想法是,图像做卷积以后,将图像信息(特 ...
- JVM G1GC参数配置
https://www.oracle.com/technetwork/articles/java/g1gc-1984535.html 主要这两个参数需要设置下,ParallelGCTh ...