java枚举类型季节实例_Java之枚举类
目录
一、为何引入枚举类型(为了替代魔法值)
什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值
那么为什么不用静态变量来替换魔法值呢?
有时候,变量的取值只在一个有限的集合内。例如一年中只有春、夏、秋、冬四季,销售服装只有小、中、大、特大四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4或者S、M、L、X。可能,我们有疑问,为何不用静态全局常量来替代呢?以一年四季为例
public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FALL = 3;
public static final int SEASON_WINTER = 4;
但是这样存在着一定的隐患
1.静态常量类型不安全
若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
currentSeason.setSeason(需要传入一个整型参数,即季节编码);
currentSeason.setSeason(SEASON_SPRING);//传入春季整型编码
//那既然setSeason接收一个整型数据,那么我就可以向其传入其他整型数据
currentSeason.setSeason(0);
//那么此处的0,又代表什么呢?
2. 没有命名空间
开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
二、枚举类型初识
先看一个简单的枚举类
public enum SeasonEnum {
SPRING,SUMMER,FALL,WINTER;
}
1.enum和class、interface的地位一样
2.比较同一枚举类中不同值直接= =
因为枚举类型的值是固定的,不需要发生改变,在比较两个不同值时可以直接使用"= ="就可以了
3.默认继承了java.lang.Enum
enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。但是,Enum是继承了Object类。枚举类可以实现一个或多个接口
4.所有实例都必须放在第一行展示
枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
5.不可以被继承
使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承
6.构造器只能是私有的
因为枚举类型的值是固定的,不需要发生改变,因此枚举被设计成是单例模式。即枚举类型会由JVM在加载的时候,实例化枚举对象,你在枚举类中定义了多少个就会实例化多少个,JVM为了保证每一个枚举类元素的唯一实例,是不会允许外部进行new的,所以会把构造函数设计成private,防止用户生成实例,破坏唯一性。
三、枚举类添加属性和构造器
枚举类内也可以定义属性和方法,可是是静态的和非静态的。但是,构造器一定是私有的,前面已经说过了,枚举类型被设计成了单例模式。构造器需定义成私有的,这样就不能在别处申明此类的对象了。它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。
实际上在第一行写枚举类实例的时候,默认是调用了构造器,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。
public enum SeasonEnum {
SPRING("1","春天"),SUMMER("2","夏天"),FALL("3","秋天"),WINTER("4","冬天");
private final int code;
private final String name;
private SeasonEnum(int code,String name)
{
this.code= code;
this.name = name;
}
public String getName() {
return name;
}
public String getCode() {
return code;
}
}
四、枚举类实现接口
枚举类可以实现一个或多个接口。与普通类一样,实现接口的时候需要实现接口中定义的所有方法,若没有完全实现,那这个枚举类就是抽象的,只是不需显式加上abstract修饰,系统化会默认加上。
public enum Operation {
PLUS{
@Override
public double eval(double x, double y) {
return x + y;
}
},
MINUS{
@Override
public double eval(double x, double y) {
return x - y;
}
},
TIMES{
@Override
public double eval(double x, double y) {
return x * y;
}
},
DIVIDE{
@Override
public double eval(double x, double y) {
return x / y;
}
};
/**
* 抽象方法,由不同的枚举值提供不同的实现。
* @param x
* @param y
* @return
*/
public abstract double eval(double x, double y);
}
五、其他API
1. 返回指定名称和指定类的某个枚举类
static Enum valueOf(Class enumClass, String name)
2.返回枚举常量名
String toString()
3.返回枚举常量的序数
int ordinal()
4.返回枚举的所有值
static T[] values()
标签:Java,int,double,final,枚举,return,public
来源: https://blog.csdn.net/mmake1994/article/details/88683017
java枚举类型季节实例_Java之枚举类相关推荐
- java枚举类型enum用法_java枚举类型enum用法和原理介绍【传智播客】
Enum枚举类型 Enum的全写是Enumeration,这个词的翻译是列举.逐条陈述.细目.在程序语言中,枚举类型是一种特殊的数据类型(常用的数据类型比如字符串.整型),这种数据类型的变量值限定在固 ...
- java枚举类构造方法默认是,枚举类型的构造方法_Java语言程
枚举类型的构造方法_Java语言程 6.6.4 枚举类型的构造方法 枚举类型既然是类,那么就可以有构造方法.只不过只能是私有的(private),不能有公有的(public)构造方法,这是为了避免直接 ...
- 枚举类型enum用法_Java枚举深度解读,看这篇就够了
作者 | 涛GuoGuo的跟屁虫丶博Ke 来源 | urlify.cn/aaamQf 66套java从入门到精通实战课程分享 Java枚举 1.枚举类概念的理解与定义 一个类的对象是有限个,确定的,我 ...
- Java--枚举类型(枚举类型介绍 定义枚举类型 枚举类型的使用 枚举类型的注意事项 遍历枚举项)
01: Java–枚举类型(枚举类型介绍 & 定义枚举类型 & 枚举类型的使用 & 枚举类型的注意事项 & 遍历枚举项) 02: Java–枚举类型(枚举类型实现接口 ...
- 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素...
建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义.比如: enum Week{Monday,Tuesday,Wednesday,Th ...
- php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍
本篇文章给大家带来的内容是关于python枚举类型是什么?python枚举类型的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:枚举类型的定义 二:枚举类和普通类的区别 ...
- 在java中关于枚举类型的特性_java枚举类型小结
JDK5.0之前,我们一般选择使用 interface 来保存常量组,以此来弥补 JDK 中没有枚举类型的缺陷,从JDK5.0开始,Sun引进了一个全新的关键字 enum 来定义一个枚举类.同inte ...
- java 枚举类型 取值_java枚举类型
一: 有时候变量的取值是在有限的集合内,比如说服务器状态:上线.下线.报废等. 可以将这些装备标记为:1.2.3 但是这种情况,我们在给变量赋值的有时候赋值为错误的值比如:0 或者true 这时候就出 ...
- java枚举类型enum用法_Java枚举类型——Enum的简单用法
枚举类型是Java1.5的新特性,是指由一组固定的常量组成合法的类型.Java中由关键字enum来定义一个枚举类型.我们可以使用枚举来取代用public final static修饰的一批相关数据.如 ...
最新文章
- misc高阶 攻防世界_攻防世界 Misc 进阶题(一)
- 大剑无锋之post那么多优点,为什么还用get
- [css] css如何消除字体的锯齿?
- match和exec的对比
- python中的数据成员有两类_Python类和对象
- Windows下载FFmpeg最新版(踩了一上午的坑终于成功)
- 《数据结构题集》习题解析
- java调用win32_java调用win32api操作windows窗口
- IDM 扩展安装版本冲突解决(Chrome尝试对扩展程序进行降级处理)
- 第一节课 opencv图像处理,对图片进行叠加处理
- TD阵营折大将 芯片商凯明将面临倒闭[转]
- 使用 Kubernetes Ingress 对外暴露服务
- 玩了下朋友刚买的iphone4s,太鸡冻了,太幸福了
- 全球5G市场最新进展及未来展望
- 从一个CFS调度案例谈Linux系统卡顿的根源
- 2022最新云存储网盘系统/文件分享存储系统
- 雅思阅读真经总纲_想提高雅思阅读?这是你一定要知道的8本书
- 6 Babylonjs基础入门 光源
- SocketTools库版,资源重定向的处理
- Flink Watermark相关概念(窗口、水位线、迟到事件)
热门文章
- 基于SPI协议的Flash驱动控制-数据普通读操作
- 二进制,CPU,操作系统
- MCS51单片机的输入/输出接口应用
- 简单理解云桌面的模板,桌面池和虚拟机的概念
- 初识C语言 | C语言零基础入门(第一天)
- bat命令实现游戏存档自动备份
- Android ImageView: resolveUri failed on bad bitmap uri
- 朴素贝叶斯(西瓜数据集分类,社区恶意留言分类,垃圾邮件分类,新浪新闻分类),AODE分类器 代码实现
- 遥感图像处理:最小噪声分离变换(Minimum Noise Fraction Rotation,MNF Rotation)
- 如何将零碎信息结构化并做到有序安放,以实现知识积累?