廖雪峰Java2面向对象编程-6Java核心类-5枚举类
1.直接定义常量
class Weekday {
//定义int常量
public static final int SUN = 0;
public static final int MON = 1;
public static final int TUE = 2;
public static final int WED = 3;
public static final int THU = 4;
public static final int FRI = 5;
public static final int SAT = 6;
//定义String常量
public static final String RED = "r";
public static final String GREEN = "g";
public static final String BLUE = "b";
}
public class Main {
public static void main(String[] args){
int day = 5;
String color = "a";
if(day == Weekday.FRI){
System.out.println(day);
}
if(color.equals(Weekday.BLUE)){
System.out.println(color);
}
}
}
直接定义常量的缺点:编译器无法检查常量的内容。常量发生改变,如r变成R,很多逻辑会报错。因此Java提供了枚举类型。
2.通过enum定义常量
- 通过enum关键字可以定义常量类型
- 常量本身带有类型信息
- 使用 == 比较 if(day == Weekday.FRI){...}

enum定义的类型实际上是class:
- enum继承自java.lang.Enum
- 不能通过new创建实例
- 所有常量都是唯一类型(引用类型):每个常量在JVM中是唯一的,因此可以使用==
- 可以用于switch语句
public enum Weekday{
SUN,MON,TUE,WED,THU,FRI,SAT
}
public class Main {
public static void main(String[] args){
for(Weekday day:Weekday.values()){
//Weekday.value()获取所有常量的数组
System.out.println(day.name());//打印常量的name
}
Weekday fri = Weekday.FRI;//获取某个常量的引用类型
System.out.println("FRI.name() = " + fri.name());//获取name
System.out.println("FRI.ordinal() = " + fri.ordinal());//获取编号
System.out.println(Weekday.valueOf("FRI").name());//Weekday.valueOf(String)获取某个指定的常量
System.out.println(Weekday.valueOf("ABC"));
}

package com.csj2018.lxf;
public enum Weekday {
SUN("星期日"),
MON("星期一"),
TUE("星期二"),
WEN("星期三"),
THR("星期四"),
FRI("星期五"),
SAT("星期六");
private String chinese;
private Weekday(String chinese) {
this.chinese = chinese;
}
public String getChinese() {
return chinese;
}
}
package com.csj2018.lxf;
import org.junit.Test;
public class ForWeekday {
@Test
public void test() {
Weekday sun = Weekday.SUN;
System.out.println(sun.getChinese());
}
}

3. 总结:
- enum可以定义常量类型,它被编译器编译为:final class Xxx extends Enum{...}
- name()获取常量定义的字符串,注意不要使用toString(),toString()是可以被覆写的
- ordinal()返回常量定义的顺序(无实质意义)
- 可以为enum类编写构造方法、字段和方法。enum的构造方法必须是private
- 构造方法申明为private
廖雪峰Java2面向对象编程-6Java核心类-5枚举类的更多相关文章
- 廖雪峰Java2面向对象编程-6Java核心类-3包装类型
Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...
- 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder
字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...
- 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码
Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean
1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
1.classpath 1.1classpath定义 classpath是一个环境变量 classpath指示JVM如何搜索class classpath设置的搜索路径与操作系统相关 * window ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
随机推荐
- SQL经常使用的一些词
sp_helptext: 例:exec sp_helptext proc_name(查看存储过程的定义) sp_rename: 例:exec sp_rename 'proc_name1','proc_ ...
- mysql 常用函数-locate 和 instr 和 regexp
★1 -- 表级锁 情况SHOW STATUS LIKE 'table%';-- 行级锁 情况SHOW STATUS LIKE 'innodb_row_lock%'; -- 进程列表SHOW PROC ...
- 【BZOJ1823】【JSOI2010】满汉全席
差点忘了2-sat…… 原题: 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉 ...
- Mybaits代码生成使用
https://jingyan.baidu.com/album/00a07f3869881082d028dc98.html PS:根据数据库中的表 生成代码
- nginx实现集群高可用
大家知道NGINX作为反向代理服务器可以实现负载均衡,同时也可以作为静态文件服务器,它的特点就是并发支持大,单机可同时支持3万并发,现在很多网站都把NGINX作为网关入口来统一调度分配后端资源.但是如 ...
- Android蓝牙学习笔记
一 Bluetooth基本概念 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备.计算机及其终端设备.各种数字数据系统.甚至家用电器采用无线方式联接起来.它的传输距离为10cm-10m,如果增加 ...
- lapis 项目添加prometheus 监控集成grafana
操作很简单,主要是进行界面的配置以及prometheus 服务的配置, 可以和https://www.cnblogs.com/rongfengliang/p/10074044.html &&a ...
- Coding kata: get the top two teams in one group
In this week, we did a coding kata, the subject is to select the top two teams of football group mat ...
- 02c语言指针基础
& 用来取一个变量的地址 * 用来取一个地址的值 例如: (1)&n 获取n的地址 int *p=&n; *p就等于p的值 (2) 假设 int n=10; *(&n) ...
- 你不知道的JavaScript(下卷) (Kyle Simpson 著)
第一部分 起步上路 第1章 深入编程 1.1 代码 1.2 表达式 1.3 实践 1.3.1 输出 1.3.2 输入 1.4 运算符 1.5 值与类型 1.6 代码注释 1.7 变量 1.8 块 1. ...