Java枚举知识点
近几天从单例模式及阿里开发手册中遇到枚举,之前没怎么关注过。
便学习一下,此次看了多方资料,并写Demo实现,记录下知识点,方便之后巩固。
枚举的两个优点:
1. 保证了类型安全:调用者无法随意传一个 int或者String 等值;
2. 代码可读性非常高;
举个例子:
package com.wzf.study03.test03;
enum LangEnum {
JAVA, JS, PYTHON
}
public class EnumDemo1 {
public static void main(String[] args) {
LangEnum lan = LangEnum.JAVA;
switch (lan){
case JS:
System.out.println("JS");
break;
case JAVA:
System.out.println("JAVA");
break;
case PYTHON:
System.out.println("PYTHON");
break;
default:
}
}
}
这是枚举常用的方法,根据业务整理稳定的数据集,写成枚举。便于读取理解,并可以用作判断。
理解枚举
枚举也是个class类,可以在类内/外定义。
特性:
1,不可在方法内定义。
2.它不能有public的构造函数,以保证私有,无法手动创建实例。
3,枚举不能在继承其它类了,因为它默认继承了java.lang.Enum
4. 常量值地址唯一,可以用==直接对比,性能会有提高.
5,Enum的values方法,可方便的遍历所有的枚举值。
6.Enum的oridinal方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定。
package com.wzf.study03.test03; /**
* @author wzf
* @date 2019/7/26
*/
public enum LanguageEnum { /** JAVA */
JAVA(1,"JAVA"),
/** JS */
JS(2,"JS"),
/** PYTHON */
PYTHON(3,"PYTHON"); /** 我们可以理解成
* public static final LanguageEnum JAVA = new LanguageEnum(1,"JAVA");
* public static final LanguageEnum JS = new LanguageEnum(2,"JS");
* public static final LanguageEnum PYTHON = new LanguageEnum(3,"PYTHON");
* 每个元素为静态不可变的实例对象,那下面就很好理解了
*/
private Integer num;
private String type; LanguageEnum(Integer i, String type) {
this.num = i;
this.type = type;
} /**
* 根据类型返回枚举实例
*/
public static LanguageEnum getEnumByType(String type){
for (LanguageEnum language : LanguageEnum.values()) {
if(type.equals(language.type)){
return language;
}
}
return null;
} public Integer getNum() { return num; }
public void setNum(Integer num) { this.num = num; }
public String getType() { return type; }
public void setType(String type) { this.type = type; }
}
贴个阿里开发手册关于枚举的截图:

ps:单例模式有个枚举实现的方式很好,有时间跟大家分享。
Java枚举知识点的更多相关文章
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- Java进阶知识点: 枚举值
Java进阶知识点1:白捡的扩展性 - 枚举值也是对象 一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...
- Java 面试知识点解析(二)——高并发编程篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java基础知识点(四)
前言:记录Java基础知识点,方便熟悉与掌握. 1.面向对象的"六原则一法则" “六原则一法则”:单一职责原则.开闭原则.依赖倒转原则.里氏替换原则.接口隔离原则.合成聚合复用原则 ...
- Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...
- Java面试知识点之线程篇(二)
前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...
- Java基础知识点总结
前言 本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结.Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其 ...
- java枚举和constant使用区别
本文结合<Effective Java>第六章前半部分关于枚举的介绍和自己的理解及实践,讲解了Java枚举的知识点.文章发布于专栏Effective Java,欢迎读者订阅. 前言 你代 ...
随机推荐
- cocos动画没有cc.Sprite.spriteFrame属性
对于新人来说总是有那么多的坑等着你. 新建动画节点的时候千万别[新建空节点]!!! 上面这个就是新建了空的节点,导致没有cc.Sprite.spriteFrame属性. 正确姿势: 粗略试了一下除了空 ...
- c# 接口使用
- 每日一题-——LeetCode(46)全排列
题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列.输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ...
- PAT基础级-钻石段位样卷2-7-1 心理阴影面积 (5 分)
这是一幅心理阴影面积图.我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线).由红.蓝线围出的面积,就是我们在做作业时的心理阴影面积. 现给出 ...
- git 在不同服务器主机上同步 git 仓库
git 在不同服务器主机上同步 git 仓库 参考链接:https://opentechguides.com/how-to/article/git/177/git-sync-repos.html 1. ...
- CQOI2005 三角形面积并 和 POJ1177 Picture
1845: [Cqoi2005] 三角形面积并 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 1664 Solved: 443[Submit][Stat ...
- 金蝶二次开发C#
1 建立C#类库项目 2 引用EBOS组建Kingdee.K3.BOS.PlugInModel 3 示例代码 usingSystem; usingSystem.Collections.Generic; ...
- layui table 跨页记忆选择
layui 表格功能目前默认不支持跨页记忆选择 下面来实现layui table跨页记忆选择实现 基于layui版本 1.4.5 表格跨页通用方法 //表格分页复选框 layui.define(['j ...
- 007——转载-MATLAB读取文件夹下的文件名
(一)参考文献:https://blog.csdn.net/liutaojia/article/details/84899923 (二)第一步:获取文件夹下某类型数据的所有文件名 主要包括三个步骤: ...
- 005_simulink建立条件子系统
1. 条件执行子系统 a) 使能子系统:是控制信号大于零时执行的子系统.在控制信号穿越零点由负变正的时步点上,使能子系统开始执行.只要子系统的控制信号保持正值,使能子系统就会保持在执行的状态 b) ...