实例有限且固定的类成为枚举类

枚举类的实现

  • 早期时候的实现形式:
public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FAIL = 3;
public static final int SEASON_WINTER = 4;
  • 这种方式虽然实现简单,但存在很多问题:
    ①类型不安全(二者可运算)
    ②没有命名空间
    ③打印输出的意义不明确

如今的枚举实现:

  • Java5以后增加了enum关键字(与class、interface地位相同)来定义枚举。可以拥有成员变量、方法,可以实现一个或多个接口,也可定义构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须和该枚举类的类名相同
  • 枚举类与普通类的区别:
    • 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
    • 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类
    • 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private
    • 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远不能产生实例
  • 枚举类默认提供了一个value()方法,该方法可以很便捷的遍历所有的枚举值
public enum SeasonEnum{SPRING,SUMMER,FAIL,WINTER;
}
  • 在使用时候可以这样:SeasonEnum.SPRING。在switch使用时可直接用SPRING
  • java.lang.Enum类提供了以下方法:
    • int compareTo (E o):该方法用于与指定枚举对象比较顺序,同一个枚举实例只能和相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;如果该枚举对象位于指定枚举对象之前,则返回负数,否则返回零
    • String name():返回枚举实例的名称
    • int ordinal():返回枚举值在枚举类中的索引值
    • String toString():返回枚举常量的名称
    • public static <T extends Enum<T>>T valueOf(Class<T> enumType,String name):返回指定枚举类中指定名称的枚举值

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

public enum Gender {MALE,FEMALE;// 定义一个public修饰的实例变量public String name;
}
public enum Gender{MALE,FEMALE;private String name;public void setName(String name){switch (this){case MALE:if (name.equals("男")){this.name = name;}else{System.out.println("参数错误");return;}break;case FEMALE:if (name.equals("女")){this.name = name;}else{System.out.println("参数错误");return;}break;}}public String getName(){return this.name;}
}
public enum Gender{// 此处的枚举值必须调用对应构造器来创建MALE("男"),FEMALE("女");private final String name;// 枚举类的构造器只能使用private修饰private Gender(String name){this.name = name;}public String getName(){return this.name;}
}
  • 其实也就相当于以下代码:
public static final Gender MALE = new Gender("男");
public static final Gender FEMALE = new Gender("女");

实现接口的枚举类

public enum Gender implements GenderDesc{// 此处的枚举值必须调用对应构造器来创建MALE("男")// 花括号部分实际上是一个类体部分{public void info(){System.out.println("这个枚举值代表男性");}},FEMALE("女"){public void info(){System.out.println("这个枚举值代表女性");}};private final String name;// 枚举类的构造器只能使用private修饰private Gender(String name){this.name = name;}public String getName(){return this.name;}// 增加下面的info()方法,实现GenderDesc接口必须实现的方法public void info(){System.out.println("这是一个用于用于定义性别的枚举类");}
}
  • 以上就是由匿名子类实现的

包含抽象方法的枚举类

public enum Operation{PLUS{public double eval(double x , double y){return x + y;}},MINUS{public double eval(double x , double y){return x - y;}},TIMES{public double eval(double x , double y){return x * y;}},DIVIDE{public double eval(double x , double y){return x / y;}};// 为枚举类定义一个抽象方法// 这个抽象方法由不同的枚举值提供不同的实现public abstract double eval(double x, double y);public static void main(String[] args){System.out.println(Operation.PLUS.eval(3, 4));System.out.println(Operation.MINUS.eval(5, 4));System.out.println(Operation.TIMES.eval(5, 4));System.out.println(Operation.DIVIDE.eval(5, 4));}
}

转载于:https://www.cnblogs.com/cj5785/p/10664845.html

Java学习笔记-枚举类相关推荐

  1. JAVA学习笔记(类的学习)

    JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...

  2. Java学习笔记1——类和对象

    面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...

  3. Java学习笔记——Calendar类

    Java中的日期类主要包括:Date类和Calendar类,本文中将对Calendar类进行讲解. 一.Calendar类的简介 Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,只需 ...

  4. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  5. Head First Java学习笔记(2):类与对象

    类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...

  6. Java学习笔记——Number类

    目录 ​ 一.xxxValue() 二.compareTo() 三.equals() 四.valueOf() 五.toString() 六.parsexxx() 七.代码 Java中的抽象类Numbe ...

  7. Java学习笔记----File类与IO流

    第五章:File类与IO流 第一节:File类 1.1 概述 java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 Java把电脑中的文件和文件夹(目录) ...

  8. Java学习笔记——实体类(ENTITY,VO,DTO,BO)

    最近在写代码的时候,对于Entity.VO.DTO.BO的概念有些混淆,不太了解具体的用途以及作用,所以想梳理一下. 阿里巴巴Java开发手册中的分层领域模型规约: DO(Data Object):此 ...

  9. Java学习笔记——Scanner类

    目录 一.Scanner类的简介 二.Scanner类的常用方法 (一)nextxxx() (二)hasNextxxx() 三.代码 一.Scanner类的简介 Scanner类主要用于扫描用户从控制 ...

  10. (JAVA学习笔记) 关于类的封装

    封装 该露的露,该藏的藏 我们程序设计要追求高内聚,低耦合.高内聚就是类的内部数据操作细节自己完成,不允许外部干涉:低耦合就是仅暴露少量的方法 给外部使用. 封装(数据的隐藏) 通常,应禁止直接访问一 ...

最新文章

  1. Apache下实现禁止目录浏览
  2. 学习笔记--Spark
  3. 如果有一个类是 myClass , 关于下面代码正确描述的是?
  4. 100. 增减序列【差分 / 思维】
  5. 什么牌子的平板电脑好_台式电脑哪个牌子好
  6. go读取email正文_Go语言库系列之email
  7. 微软想通了?Windows 11恢复一键改变默认浏览器功能
  8. 在linux中常用的shell备份脚本(波大帅哥)
  9. sin x 的值python_sin(x)/x的数值积分
  10. OCR文字识别软件在线如何操作?
  11. Dynamics AX 2012 的工业物联网解决方案
  12. 史上最详细的PID教程——理解PID原理及优化算法
  13. Centos ansible部署,启动服务失败
  14. 牛客 · 奇♂妙拆分
  15. Vue动态组件、组件缓存、组件激活和非激活、组件插槽、组件name
  16. 创建视图时--ora-01731:出现循环的视图定义
  17. matlab绘制累计频率曲线图,累积频率曲线怎么画,怎么画累计曲线图
  18. HM-16.0编码过程:将YUV文件编码成HEVC格式的码流
  19. SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
  20. HDU - 1613 Ecological Bin Packing

热门文章

  1. 某一天,忽然发现自己坚持不下去了。(无关计算机,只是一些自己的困惑和感想)
  2. 11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Access Name)
  3. CentOS 修改默认语言
  4. Python脚本控制的WebDriver 常用操作 十八 获取测试对象的css属性
  5. Zabbix 监控之 修改管理员用户密码
  6. 【配置关系】—Entity Framework实例详解
  7. Sniffer安全技术从入门到精通
  8. linux驱动目录在哪里,详细讲解Linux驱动程序
  9. mysql特效_Cocos2d-x学习笔记(16)(常见22种特效)
  10. Nginx源码分析 - 基础数据结构篇 - 数组结构 ngx_array.c(03)