当前位置: 首页 > news >正文

Java枚举详解

一.枚举

  1.为什么有枚举?

如果我们的程序需要表示固定的几个值:

比如季节:spring (春),summer(夏),autumn(秋),winter(冬)

用常量表示:

        public static final int SEASON_SPRING = 1;public static final int SEASON_SUMMER = 2;public static final int SEASON_AUTUMN = 3;public static final int SEASON_WINTER = 4;

用常量表示季节的弊端

 1.代码不够简洁

 2.不同类型的数据是通过名字区分的

 3.不安全,由于是数字类型,就有可能使用这几个值做一些运算操作;比如:

SEASON_SPRING + SEASON_SUMMER

为了间接的表示一些固定的值,Java就给我们提供了枚举。

2.枚举的格式

概念:

       枚举:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。

格式:

      public  enum  s {

                       枚举项1,枚举项2,枚举项3;

       }

定义枚举类要用关键字enum

练习:

   定义一个枚举类,用来表示春,夏,秋,冬这四个固定值

package com.gch.d5_enum.demo1;/**定义枚举类*/
public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}

3.枚举的特点

   1.所有枚举类都是Enum的子类
   2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项

   3.每一个枚举项其实就是该枚举的一个对象
   4.枚举也是一个类,也可以去定义成员变量
   5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,
      但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
   6.枚举类可以有构造器,但必须是private的,它默认也是private的。
      枚举项的用法比较特殊:枚举("");
   7.枚举类也可以有抽象方法,但是枚举项必须重写该方法。

   8.如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造,如果想让它不        报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}

package com.gch.d5_enum.demo2;/**定义枚举类*/
public enum Season {// 5.枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,//   但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略// 如果枚举项的后面什么都不写,那么此时它就默认调用枚举项的空参构造// 如果想让它不报错,只有让每一个枚举项去调用有参构造:枚举项(参数1,参数2){}SPRING("春"){// 如果枚举类中有抽象方法// 那么在枚举项中必须要全部重写@Overridepublic void show() {System.out.println(this.name);}},SUMMER("夏"){@Overridepublic void show() {System.out.println(this.name);}},AUTUMN("秋"){@Overridepublic void show() {System.out.println(this.name);}},WINTER("冬"){@Overridepublic void show() {System.out.println(this.name);}};//    4.枚举也是一个类,也可以去定义成员变量public String name;// 空参构造
//    private Season(){}// 有参构造private Season(String name){this.name = name;}// 抽象方法public abstract void show();
}
package com.gch.d5_enum.demo2;public class EnumDemo {public static void main(String[] args) {// 第二个特点的演示// 2.我们可以通过"枚举类名.枚举项名称"去访问指定的枚举项System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);// 第三个特点的演示//  3.每一个枚举项其实就是该枚举的一个对象Season spring = Season.SPRING;}
}

 4.枚举的方法

  1. String name() 获取枚举项的名称
  2. int ordinal() 返回枚举项在枚举类中的索引值, 枚举项在枚举类中它也是有索引的
  3. int compareTo(E o) 比较两个枚举项,返回的是索引值的差值
  4. String toString() 返回枚举常量的名称
  5. static <T> T valueOf(Class<T> type,String name)

                                          字节码文件对象  枚举项的名称
           ,它是一个静态方法,获取指定枚举类中的指定名称的枚举值

     6. values()  获得所有的枚举项

package com.gch.d5_enum.demo3;/**定义枚举类*/
public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
}
package com.gch.d5_enum.demo3;public class EnumDemo {public static void main(String[] args) {// String name() 获取枚举项的名称String name = Season.SPRING.name();System.out.println(name); // SPRINGSystem.out.println("---------------------");// int ordinal() 返回枚举项在枚举类中的索引值int index1 = Season.SPRING.ordinal();int index2 = Season.SUMMER.ordinal();int index3 = Season.AUTUMN.ordinal();int index4 = Season.WINTER.ordinal();// 枚举项在枚举类中它也是有索引的System.out.println(index1); // 0System.out.println(index2); // 1System.out.println(index3); // 2System.out.println(index4); // 3System.out.println("----------------------");// int compareTo(E o) 比较两个枚举项,返回的是索引值的差值int result = Season.SPRING.compareTo(Season.WINTER);System.out.println(result); // 0 - 3 = -3System.out.println("-----------------------");// String toString() 返回枚举常量的名称String s = Season.SPRING.toString();System.out.println(s); // SPRINGSystem.out.println("------------------");// static <T> T valueOf(Class<T> type,String name)//                      字节码文件对象  枚举项的名称// 它是一个静态方法,获取指定枚举类中的指定名称的枚举值Season spring = Enum.valueOf(Season.class, "SPRING");System.out.println(spring); // SPRINGSystem.out.println(Season.SPRING == spring); // trueSystem.out.println("--------------------------");// values()  获得所有的枚举项Season[] values = Season.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}}
}

http://www.lryc.cn/news/24331.html

相关文章:

  • 虚拟机上安装openKylin详细步骤总结
  • 夜天之书 #74 企业开源的软件协议模型实践(Part 2)
  • 2.webpack实时打包
  • KingbaseES V8R3 表加密
  • 2 为社么软件架构很重要?
  • Python 之 Pandas merge() 函数、set_index() 函数、drop_duplicates() 函数和 tolist() 函数
  • MySQL实战之深入浅出索引(下)
  • (二分查找)leetcode1539. 第 k 个缺失的正整数
  • yaml文件格式详解及实例
  • AOP在PowerJob中的使用,缓存锁保证并发安全,知识细节全总结
  • 对账平台设计
  • JavaEE进阶第五课:SpringBoot的创建和使用
  • 我带过的一名C++实习生——Z同学
  • 面试题13. 机器人的运动范围
  • LeetCode189_189. 轮转数组
  • java Files和Paths的使用详解 附有使用demo
  • 如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞
  • js中的定时器 setTimeout()和setInterval()
  • 【吃透Js】深入学习浅拷贝和深拷贝
  • AUTOSAR为啥要开发新的社区商业模式?
  • 数据结构和算法面试常见题必考以及前端面试题
  • 一文解决Python所有报错
  • LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】
  • 【C语言】结构体进阶
  • 全志T3+FPGA国产核心板——Pango Design Suite的FPGA程序加载固化
  • 深度学习之 imgaug (图像增强)学习笔记
  • mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
  • 一个关于事件溯源Event Sourcing的小荔枝,Golang实现
  • Vue3 组合式函数,实现minxins
  • 什么是钉钉消息推送?