1.定义:

2.枚举类和普通类的区别:

  • 枚举类的默认修饰符是 public static final
  • 每一个枚举值是
  • 枚举值是枚举值所属的类的数据类型,枚举值是指向本类的对象
  • 枚举类的默认构造是private,可以自定义,但必须private
  • 可以定义抽象方法,但是必须用枚举值实现
  • 枚举值必须在自定义成员变量之前

使用要点

  • 在switch..case..中使用,case后面只需要枚举值不需要类.枚举值的形式

2.1枚举类的简单构建:

package com.company.project.enumTest;
//SeasonEnum.java
public enum SeasonEnum {
SPRING, SUMMER, FALL, WINTER;
}
package com.company.project.enumTest;
//EnumPrint.java
public class EnumPrint {
public void judge(SeasonEnum s){
switch(s){
case SPRING:
{
System.out.println("Season is SPRING");
break;
}
case SUMMER:
{
System.out.println("Season is SUMMER");
break;
}
case FALL:
{
System.out.println("Season is FALL");
break;
}
case WINTER:
{
System.out.println("Season is WINTER");
break;
}
}
} public static void main(String[] args){
//Enumeration class has the default values method, which returns all instances of the enumeration class
for(SeasonEnum s : SeasonEnum.values()){
System.out.println("Enum.values :" + s);
} //
new EnumPrint().judge(SeasonEnum.FALL);
}
}

2.2枚举类的成员变量、方法和构造

枚举类的成员变量:

//Gender.java
public enum Gender {
MALE,FEMALE;
public String name;
}
//GenderTest.java
public class GenderTest { public static void main(String[] args) {
//通过valueOf获取枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "MALE");
g.name = "男";
System.out.println(g + "的枚举值是" + g.name);
}
}

上述代码修改完善:

//Gender.java
public enum Gender {
MALE,FEMALE;
//definde a var
//public String name;
private String name; public String getName() {
return this.name;
} public void setName(String name) {
switch(this){
case MALE:
{
if (name.equals("男")) {
this.name = name;
}
else{
System.out.println("Error!");
}
break;
}//case MALE
case FEMALE:{
if (name.equals("女")) {
this.name = name;
} else {
System.out.println("Error!");
}
break;
}//case FEMALE
}
}
}
//GenderTest.java
public class GenderTest { public static void main(String[] args) {
//通过valueOf获取枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "MALE");
//g.name = "nan";
g.setName("男");
System.out.println(g + " Express " + g.getName());
g.setName("女");
} }

最终的修改版本:枚举类通常应该被设计为不可改变的类,也就是说他的成员变量应该不可改变,建议将成员变量都用private final修饰:

//Gender.java
public enum Gender {
//这里的男和女赋值,是直接调用了构造,只不过枚举类中的构造不需要new关键字,也不需要显示的构造调用
MALE("男"),FEMALE("女");
//定义为私有不可变
private final String name;
//类的构造
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
//GenderTest.java
public class GenderTest { public static void main(String[] args) {
//通过valueOf获取枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "MALE");
System.out.println(g + "的枚举值是" + g.getName());
}
}

2.3实现接口的枚举类

//InterfaceGender.java
public interface InterfaceGender {
void Info();
}
//Gender.java
public enum Gender implements InterfaceGender{
//这里的男和女赋值,是直接调用了构造,只不过枚举类中的构造不需要new关键字,也不需要显示的构造调用
MALE("男"),FEMALE("女");
//定义为私有不可变
private final String name;
//类的构造
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
} //接口方法
@Override
public void Info() {
// TODO Auto-generated method stub
System.out.println("接口的方法");
}
}
//GenderTest.java
public class GenderTest { public static void main(String[] args) {
//通过valueOf获取枚举类的枚举值
Gender g = Enum.valueOf(Gender.class, "MALE");
System.out.println(g + "的枚举值是" + g.getName());
g.Info();
}
}
//Gender.java
public enum Gender implements InterfaceGender{
//这里的男和女赋值,是直接调用了构造,只不过枚举类中的构造不需要new关键字,也不需要显示的构造调用
//并且用了匿名内部类来实现Info方法的重写
MALE("男"){
public void Info(){
System.out.println("男性的重写方法实现");
}
}, FEMALE("女"){
public void Info(){
System.out.println("女性的重写方法实现");
}
};
//定义为私有不可变
private final String name;
//类的构造
private Gender(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}

main方法中的实现不变

2.4包含抽象方法的枚举类

//Calculate.java
public enum Calculate {
PLUS{
public double CalculateNum(double a, double b){
return a + b;
}
},
MINUS{
public double CalculateNum(double a, double b){
return a - b;//do not check num
}
},
TIMES{
public double CalculateNum(double a, double b){
return a * b;
}
},
DIVIDE{
public double CalculateNum(double a, double b){
return a / b;//do not check num
}
};
public abstract double CalculateNum(double a, double b);
}
//CalculatePrint.java
public class CalculatePrint { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Calculate.PLUS.CalculateNum(1, 2));
System.out.println(Calculate.MINUS.CalculateNum(1, 2));
System.out.println(Calculate.TIMES.CalculateNum(1, 2));
System.out.println(Calculate.DIVIDE.CalculateNum(1, 2));
} }

11.枚举类.md的更多相关文章

  1. FastJson转换自定义枚举类

    在项目中有些状态需要采用枚举类型,在数据库中保存的是name(英文),而前台需要显示的是text(中文). 所以这就需要自己去实现序列. 例如对象: import java.util.Date; im ...

  2. python基础——枚举类

    python基础——枚举类 当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单 ...

  3. Java中使用 Long 表示枚举类

    Java中使用 Long 表示枚举类 在日常的开发过程中,很多时候我们需要枚举类(enum)来表示对象的各种状态,并且每个状态往往会关联到指定的数字,如: private enum Color { R ...

  4. Java基础15:深入剖析Java枚举类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. Java 枚举类 详解

    1.枚举是什么? Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象.比如一个季节类有春.夏.秋.冬四个对象:一个星期有星期一到星期日七个对象.这些明显都是固定的 ...

  6. java常量类的实现方式_枚举类_项目实践

    前言 众所周知,系统里有很多比如订单状态.审核状态:性别.结算方式.交易类型等属性,这些属性只有几个值,一般用0.1.2.3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状 ...

  7. 【python】使用枚举类

    当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份: JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12 好处是简单,缺点是类型是int,并且仍 ...

  8. 夯实Java基础系列14:深入理解Java枚举类

    目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...

  9. 【C/C++开发】C++之enum枚举量声明、定义、使用与枚举类详解与枚举类前置类型声明

    众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法. ...

随机推荐

  1. 使用命名管道的OVERLAPPED方式实现非阻塞模式编程 .

    命令管道是进程间通讯的一种常用方式,对于命令管道的介绍可以参考别的资料和书籍,这里推荐一个<VC++下命名管道编程的原理及实现>这篇博文,写得比较清楚.但是都是介绍了阻塞模式的编程,我这里 ...

  2. Visual Studio 20年

    这是一个暴露年龄的话题,如果一个程序员从第一个版本开始使用Visual Studio的话,现在应该是40多岁的中年大叔了.我的程序员生涯是从Visual basic 6.0 (vb6)开始的,一晃就过 ...

  3. 评委打分系统最新版,采用Flash展示双屏技术,望大家测试,多提意见.

    最新版结合应用了 Flash展示技术,PPT展示技术,移动端云打分技术等. 详细视频见土豆视频:http://www.tudou.com/programs/view/NUN2lUzkPRI 放大查看上 ...

  4. ThinkPHP5调用PHPExcel类实现导入导出

    注意:extend是放置第三方类的地方,不要乱配置命名空间那些,引起不必要的类错误 代码如下 <?php namespace app\index\controller; use think\Co ...

  5. Django中常用命令

    Django 基本命令 熟练使用Django常用命令能让你事半功倍!!!! 1. 新建一个 django project django-admin.py startproject project-na ...

  6. [SHOI2012]信用卡凸包(计算几何)

    /* 考验观察法?? 可以发现最终答案等于所有作为圆心的点求出凸包的周长加上一个圆的周长 向量旋转 (x1, y1) 相较于 (x2, y2) 旋转角c 答案是 (dtx * cosc - dty * ...

  7. Django之Models进阶操作(字段属性)

    字段属性详细介绍 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列, ...

  8. tomcat7.0安装笔记

    1. 解压,新增系统环境变量CATALINA_HOME,值为tomcat所在目录,如E: tomcat7.0 PS:安装JAVA时没有配置系统变量JAVA_HOME,导致报错无法启动tomcat,新建 ...

  9. JS控制函数执行次数(可带参数)

    //真正要执行的函数 var sayHi = function () { console.log('Hi'); }; //控制器 var timer = function (fn, num) { fo ...

  10. raw格式和qcow2格式

    Raw: "raw" 镜像格式是最最简单的,并且是被 KVM 和 Xen 原生支持的格式,你 可以想象裸格式镜像和块设备文件是二进制位相当的,就好像从块设备拷 贝过来的,比方说,使 ...