Java基础之枚举
Java基础之枚举
作为1.5才增加的特性,枚举的使用并不是很多。
枚举其实就是一个比较特殊的类,就如同注解其实也是个特殊的接口一样(注解反编译之后没有了@符号)。枚举使用enum
关键字声明,通过反编译自定义的枚举可以看到类似下面的代码:
//源代码
public enum Sex {
MAN,WOMAN;//如果下面需要定义方法,这里需要加一个分号
}
//反编译结果
public final class Sex extends Enum
{
public static final Sex MAN;
public static final Sex WOMAN;
private static final Sex $VALUES[];
public static Sex[] values(){
return (Sex[])$VALUES.clone();
}
public static Sex valueOf(String s){
return (Sex)Enum.valueOf(Sex, s);
}
private Sex(String s, int i){
super(s, i);
}
static {
MAN = new Sex("MAN", 0);
WOMAN = new Sex("WOMAN", 1);
$VALUES = (new Sex[] {
MAN, WOMAN
});
}
}
可以通过反编译结果看到:
- 自动继承了Enum类
- 编译器添加了构造方法并私有化
MAN,WOMAN
被声明为为静态自身类型常量,并且在静态代码块中实例化- 添加了
values()
和valueOf()
方法
同时,枚举中也可以定义构造方法、成员方法、成员变量、构造代码块、静态代码块等普通类所能定义的东西。但是构造方法必须私有(可以不加权限限定词但默认为private,构造方法既可以有参也可以无参)
常用方法:
- 继承自Enum类:
- name():返回枚举常量名称
- ordinal():返回枚举常量的序号
- 自身方法(静态):
- values():返回自身的常量数组
- valueOf():由字符串转化为枚举
枚举在switch中的注意事项:
Sex sex = Sex.MAN;
switch (sex) {
case MAN://注意这里,这里不能写Sex.MAN,而是用MAN
System.out.println("man");
break;
case WOMAN:
System.out.println("woman");
break;
default:
System.out.println("error");
}
实际上使用枚举可以很方便的构建单例模式:详见这篇博文。
Java基础之枚举的更多相关文章
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
- 黑马程序员:Java基础总结----枚举
黑马程序员:Java基础总结 枚举 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...
- Java基础之枚举类型Enum的使用
Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...
- Java 基础之-枚举
目录(?)[-] 用法一常量 用法二switch 用法三向枚举中添加新方法 用法四覆盖枚举的方法 用法五实现接口 用法六使用接口组织枚举 用法七关于枚举集合的使用 DK1.5引入了新的类型-- ...
- Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final
笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...
- Java基础_枚举类型
作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...
- java基础(十一) 枚举类型
枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
- Java基础之枚举妙用
对于枚举,初学Java的时候可能我们就已经接触过了,但是在毕业前,其实一直都不知道真正工作里面枚举是怎么用的,枚举有什么用?接下来,博主就介绍枚举在实际工作中的一种使用场景,本文只适合初级的小菜鸟看哈 ...
- java 基础之枚举
问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个 解决办法: 1) 在setGrade方法中做判断,不符合格式要求就抛出异常 2) 直接限定用户的选择,通过自定义类模拟枚举的 ...
随机推荐
- JS - 数组转字符串
var arr =['h','e','l','l','o'] var s = arr.join(""); console.log(s);
- bzoj 4487: [Jsoi2015]染色问题
先贴一个题解吧,最近懒得要死2333,可能是太弱的原因吧,总是扒题解,(甚至连题解都看不懂了),blog也没更新,GG http://blog.csdn.net/werkeytom_ftd/artic ...
- Python可视化 | Seaborn包—kdeplot和distplot
import pandas as pd import numpy as np import seaborn as sns import matplotlib import matplotlib.pyp ...
- spring mvc ,spring boot 整合swagger
https://blog.csdn.net/qq_35992900/article/details/81274436
- java 获取当前时间,前一天时间
java获取当前时间,并按一定格式输出 1.用Calendar获取Date Calendar calendar=Calendar.getInstance(); SimpleDateFormat for ...
- 图片FormData上传
var base64String = /*base64图片串*/; //这里对base64串进行操作,去掉url头,并转换为byte var bytes = window.atob(base64Str ...
- django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现
首先画图一张,用来展示今天要做的事情,读写分离,个人理解就是使用mysql主从备份的原理,让两个数据库同时为自己提供服务.其中主库负责数据保存,从库负责数据展示,可以一主一从,也可以一主多从.从而降低 ...
- java表单基础
一.表单 基本语法: <form method="表单提交方式(post/get)" action="表单提交地址"> </ ...
- mysql5.7修改账户密码
一.首次登录时,修改root账户的密码: vim /etc/my.cnf 在末尾添加 skip-grant-tables ,保存. service mysqld restart 再次登录时,不需要密码 ...
- mysql性能优化及 Comparison method violates its general contract
项目上嵌套结果集查询,查询的列表再根据每个id进行查询计算,嵌套的sql如下: SELECT SUM(IFNULL(t.out_rate,0)) totalOutRate, SUM(IF(IFNULL ...