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,欢迎读者订阅. 前言 你代 ...
随机推荐
- VUE 元素拖拽、移动
元素拖拽 作者:一粒尘土 时间:2019-10-30 使用范围:两个元素位置交换,移动元素到指定位置 涉及函数 属性 解释 draggable 是否允许元素进行拖拽 dragstart 拖拽开始触发的 ...
- java的输入流中的两个坑
1.输入流的所有实例中的read()方法皆是阻塞的. 输入流只会在发生错误或者异常关闭的时候回返回-1,如果流中没有数据,不会返回-1而是一直阻塞. 2.BufferedReader的readLine ...
- SAP ETL DS
如何设置Dataservices使用FTP传输方式_连接SAP系统 [如果DS的目标数据库选择使用Oracle,请务必确认以下数据库设置] If SAP R3 contents CJK charact ...
- Spring Boot配置多数据源并实现Druid自动切换
原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...
- windows RabbitMQ Server 环境配置中的一些坑
原文:https://blog.csdn.net/lindonglian/article/details/55805637 RabbitMQ的服务端基于Erlang语言编写,要在机器上安装Rabbit ...
- Codeforces Round #524 (Div. 2) Masha and two friends矩形
题目 题意: 给一个n*m块大的黑白相间的矩形,在这个举行中操作,要先把第一个矩形(左下角坐标(x1,y2),右上角坐标(x2,y2)) 全部涂成白色,再把第二个矩形(左下角坐标(x3,y3), ...
- vscode java是否合适??
https://blog.csdn.net/luoaki/article/details/79138028 Language support for Java ™ for Visual Studio ...
- P1363 幻象迷宫[搜索]
题目描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...
- python_面向对象——多继承
1.多继承 class Shenxian: def fly(self): print('神仙会飞~') class Monkey: def eat_peach(self): print('猴子喜欢吃桃 ...
- 分页器,序列化组件,bulk_create,choices字段
分页器 <!--前端--> {% for book in page_queryset %} <p>{{ book.title }}</p> {% endfor %} ...