1.定义:

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

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

使用要点

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

2.1枚举类的简单构建:

  1. package com.company.project.enumTest;
  2. //SeasonEnum.java
  3. public enum SeasonEnum {
  4. SPRING, SUMMER, FALL, WINTER;
  5. }
  1. package com.company.project.enumTest;
  2. //EnumPrint.java
  3. public class EnumPrint {
  4. public void judge(SeasonEnum s){
  5. switch(s){
  6. case SPRING:
  7. {
  8. System.out.println("Season is SPRING");
  9. break;
  10. }
  11. case SUMMER:
  12. {
  13. System.out.println("Season is SUMMER");
  14. break;
  15. }
  16. case FALL:
  17. {
  18. System.out.println("Season is FALL");
  19. break;
  20. }
  21. case WINTER:
  22. {
  23. System.out.println("Season is WINTER");
  24. break;
  25. }
  26. }
  27. }
  28. public static void main(String[] args){
  29. //Enumeration class has the default values method, which returns all instances of the enumeration class
  30. for(SeasonEnum s : SeasonEnum.values()){
  31. System.out.println("Enum.values :" + s);
  32. }
  33. //
  34. new EnumPrint().judge(SeasonEnum.FALL);
  35. }
  36. }

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

枚举类的成员变量:

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

上述代码修改完善:

  1. //Gender.java
  2. public enum Gender {
  3. MALE,FEMALE;
  4. //definde a var
  5. //public String name;
  6. private String name;
  7. public String getName() {
  8. return this.name;
  9. }
  10. public void setName(String name) {
  11. switch(this){
  12. case MALE:
  13. {
  14. if (name.equals("男")) {
  15. this.name = name;
  16. }
  17. else{
  18. System.out.println("Error!");
  19. }
  20. break;
  21. }//case MALE
  22. case FEMALE:{
  23. if (name.equals("女")) {
  24. this.name = name;
  25. } else {
  26. System.out.println("Error!");
  27. }
  28. break;
  29. }//case FEMALE
  30. }
  31. }
  32. }
  1. //GenderTest.java
  2. public class GenderTest {
  3. public static void main(String[] args) {
  4. //通过valueOf获取枚举类的枚举值
  5. Gender g = Enum.valueOf(Gender.class, "MALE");
  6. //g.name = "nan";
  7. g.setName("男");
  8. System.out.println(g + " Express " + g.getName());
  9. g.setName("女");
  10. }
  11. }

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

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

2.3实现接口的枚举类

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

main方法中的实现不变

2.4包含抽象方法的枚举类

  1. //Calculate.java
  2. public enum Calculate {
  3. PLUS{
  4. public double CalculateNum(double a, double b){
  5. return a + b;
  6. }
  7. },
  8. MINUS{
  9. public double CalculateNum(double a, double b){
  10. return a - b;//do not check num
  11. }
  12. },
  13. TIMES{
  14. public double CalculateNum(double a, double b){
  15. return a * b;
  16. }
  17. },
  18. DIVIDE{
  19. public double CalculateNum(double a, double b){
  20. return a / b;//do not check num
  21. }
  22. };
  23. public abstract double CalculateNum(double a, double b);
  24. }
  1. //CalculatePrint.java
  2. public class CalculatePrint {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. System.out.println(Calculate.PLUS.CalculateNum(1, 2));
  6. System.out.println(Calculate.MINUS.CalculateNum(1, 2));
  7. System.out.println(Calculate.TIMES.CalculateNum(1, 2));
  8. System.out.println(Calculate.DIVIDE.CalculateNum(1, 2));
  9. }
  10. }

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. (转)SQL知识_Sql日期时间格式转换

    原文地址:http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599690.html sql server2000中使用convert来取得dat ...

  2. 10 sed命令的基本用法

    grep灵活的关联正则表达式实现文件过滤,而sed是一个数据流的编辑器,或者说是一个行编辑器,它将文件一行一行的数据放入到内存中进行编辑,而awk是一个报告生成器,这个我们以后再说: 之前我们介绍过g ...

  3. 用Python进行人脸识别

    本文的模型使用了C++工具箱 dlib 基于深度学习的最新人脸识别方法,基于户外脸部数据测试库Labeled Faces in the Wild 的基准水平来说,达到了99.38%的准确率. dlib ...

  4. Centos7使用pxe安装KVM虚拟机

    Centos7使用pxe安装KVM虚拟机 一.安装服务所需的软件 [root@localhost ~]yum install nginx dhcp vsftpd syslinux -y [root@l ...

  5. Django中的ORM相关操作:F查询,Q查询,事物,ORM执行原生SQL

    一    F查询与Q查询: 1 . F查询: 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的 ...

  6. oracle取出多个字段列中的最大值和最小值

    greatest 函数和least函数 select serverid, greatest(e.core0, e.core1, e.score2 ) from e

  7. qtftp 客户端

    今天上午看了看FTP网络,但是当添加头文件时发现qt creater并不包括此头文件,于是找了一下资料发现:在QT5上将QFtp去掉了,建议使用QNetworkAccessManager,但是后者并没 ...

  8. 销售人员的分析,也可以用类似RFM的思路吗?

    本文转自知乎 作者:接地气的陈老师 ————————————————————————————————————————————————————— 有同学问:“销售人员的分析,也可以用类似RFM的思路吗, ...

  9. ribbbitMq 教程,详细

    https://blog.csdn.net/hellozpc/article/details/81436980

  10. PHP实现防sql注入

    在查询数据库时需要防止sql注入 实现的方法: PHP自带了方法可以将sql语句转义,在数据库查询语句等的需要在某些字符前加上了反斜线.这些字符是单引号(').双引号(").反斜线(\)与 ...