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

JAVA补充知识01之枚举enum

目录

1. 枚举类的使用

1.1 枚举类的理解

1.2 举例

1.3 开发中的建议:

1.4 Enum中的常用方法

1.5 熟悉Enum类中常用的方法

1.6 枚举类实现接口的操作

1.7 jdk5.0之前定义枚举类的方式 (了解即可)

1.8 jdk5.0之后定义枚举类的方式 

1.8.1 jdk5.0前后的变化


1. 枚举类的使用

1.1 枚举类的理解

         枚举类型本质上也是一种类,只不过是这个类的对象是有限的、固定的几个,不能让用户随意创建。

1.2 举例

- `星期`:  Monday(星期一)......Sunday(星期天)
- `性别`:  Man(男)、Woman(女)
- `月份`:  January(1月)......December(12月)
- `季节`:  Spring(春节)......Winter(冬天)
- `三原色`:  red(红色)、green(绿色)、blue(蓝色)
- `支付方式`:  Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)

- `就职状态`:  Busy(忙碌)、Free(空闲)、Vocation(休假)、Dimission(离职)
- `订单状态`:  Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、Checked(已确认收货)、Return(退货)、Exchange(换货)、Cancel(取消)
- `线程状态`:  创建、就绪、运行、阻塞、死亡

1.3 开发中的建议:

> 开发中,如果针对于某个类,其实例是确定个数的。则推荐将此类声明为枚举类

> 如果枚举类的实例只有一个,则可以看做是单例的实现方式。

  •  JDK5.0 之前如何自定义枚举类 (了解)--见代码1.7 jdk5.0之前定义枚举类的方式 (了解即可)
  •  JDK5.0中使用enum定义枚举类  -- 见代码 1.8 jdk5.0之后定义枚举类的方式 

1.4 Enum中的常用方法

  1.  使用enum关键字定义的枚举类,默认其父类是java.lang.Enum类
  2.  使用enum关键字定义的枚举类,不要再显示的定义其父类。否则报错。

1.5 熟悉Enum类中常用的方法

  1.     String toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
  2.     (关注) static 枚举类型[ ] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
  3.     (关注) static 枚举类型 valueOf(String name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
  4.     String name():得到当前枚举常量的名称。建议优先使用toString()。
  5.     int ordinal():返回当前枚举常量的次序号,默认从0开始

1.6 枚举类实现接口的操作

    情况1:枚举类实现接口,在枚举类中重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是同一个方法。  

   情况2:让枚举类的每一个对象重写接口中的抽象方法。当通过不同的枚举类对象调用此方法时,执行的是不同的实现的方法。

    //1. 必须在枚举类的开头声明多个对象。对象之间使用,隔开SPRING("春天","春暖花开"){public void show(){System.out.println("春天在哪里?");}},SUMMER("夏天","夏日炎炎"){public void show(){System.out.println("宁静的夏天");}},AUTUMN("秋天","秋高气爽"){public void show(){System.out.println("秋意浓");}},WINTER("冬天","白雪皑皑"){public void show(){System.out.println("大约在冬季");}};

1.7 jdk5.0之前定义枚举类的方式 (了解即可)

public class SeasonTest {public static void main(String[] args) {// Season.SPRING = null;System.out.println(Season.SPRING);System.out.println(Season.SUMMER.getSeasonName());System.out.println(Season.SUMMER.getSeasonDesc());}
}//jdk5.0之前定义枚举类的方式
class Season{//2. 声明当前类的对象的实例变量,使用private final修饰private final String seasonName;//季节的名称private final String seasonDesc;//季节的描述//1. 私有化类的构造器private Season(String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//3. 提供实例变量的get方法public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4. 创建当前类的实例,需要使用public static final修饰public static final Season SPRING = new Season("春天","春暖花开");public static final Season SUMMER = new Season("夏天","夏日炎炎");public static final Season AUTUMN = new Season("秋天","秋高气爽");public static final Season WINTER = new Season("冬天","白雪皑皑");@Overridepublic String toString() {return "Season{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';}
}

1.8 jdk5.0之后定义枚举类的方式 

1.8.1 jdk5.0前后的变化

类似于接口Interface默认省略 public abstract  但枚举enum的对象必须省略 public static final 及 new 类名

    // JDK5.0 前 public static final Season SPRING = new Season("春天","春暖花开");public static final Season SUMMER = new Season("夏天","夏日炎炎");public static final Season AUTUMN = new Season("秋天","秋高气爽");public static final Season WINTER = new Season("冬天","白雪皑皑");// JDK5.0 后//1. 必须在枚举类的开头声明多个对象。对象之间使用,隔开SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","白雪皑皑");

public class SeasonTest1 {public static void main(String[] args) {//      System.out.println(Season1.SPRING.getClass());//      System.out.println(Season1.SPRING.getClass().getSuperclass());//      System.out.println(Season1.SPRING.getClass().getSuperclass().getSuperclass());//测试方法//1. toString()System.out.println(Season1.SPRING);System.out.println(Season1.AUTUMN);//2. name()System.out.println(Season1.SPRING.name());//3. vlaues()Season1[] values = Season1.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}//4. valueOf(String objName):返回当前枚举类中名称为objName的枚举类对象。//如果枚举类中不存在objName名称的对象,则报错。String objName = "WINTER";
//        objName = "WINTER1";Season1 season1 = Season1.valueOf(objName);System.out.println(season1);//5.ordinal()System.out.println(Season1.AUTUMN.ordinal());//通过枚举类的对象调用重写接口中的方法Season1.SUMMER.show();}
}interface Info{void show();
}//jdk5.0中使用enum关键字定义枚举类
enum Season1 implements Info{//1. 必须在枚举类的开头声明多个对象。对象之间使用,隔开SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎"),AUTUMN("秋天","秋高气爽"),WINTER("冬天","白雪皑皑");//2. 声明当前类的对象的实例变量,使用private final修饰private final String seasonName;//季节的名称private final String seasonDesc;//季节的描述//3. 私有化类的构造器private Season1(String seasonName,String seasonDesc){this.seasonName = seasonName;this.seasonDesc = seasonDesc;}//4. 提供实例变量的get方法public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}@Overridepublic String toString() {return "Season1{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';}@Overridepublic void show() {System.out.println("这是一个季节");}
}
http://www.lryc.cn/news/7212.html

相关文章:

  • jenkins下配置maven
  • 春季开学即将到来!大学生活必备数码清单奉上
  • ubuntu18.04 天选2 R95900hx 3060显卡驱动安装
  • Harbor安装部署实战详细手册
  • 华为OD机试真题JAVA实现【箱子之形摆放】真题+解题思路+代码(20222023)
  • 华为OD机试 - 事件推送(Python)| 真题+思路+考点+代码+岗位
  • 【Linux】信号量
  • android-java同步方法和异步方法
  • Flask入门(5):请求和响应
  • 记进组后第五次组会汇报
  • nil Foundation的Placeholder证明系统(2)
  • QHash源码解读
  • 【Unity细节】RigidBody中Dynamic和Kinematic的区别
  • 【C++、数据结构】哈希 — 闭散列与哈希桶的模拟实现
  • vue 开发环境 卸载node 版本 切换新的 node 版本 mac电脑
  • 在Linux和Windows上安装Nacos-2.1.1
  • 解决QML debugging is enabled.Only use this in a safe environment.警告
  • 华为OD机试真题JAVA实现【N进制减法】真题+解题思路+代码(20222023)
  • ACM第一周---周训---题目合集.
  • SCI学术论文的基本架构,以及Results、Discussion、Conclusion这三者的区别
  • 二叉树性质
  • 二维数组操作示例
  • Spring Boot邮件发送(powernode CD2207)(内含教训视频+源代码)
  • FortiTalk | “三英论安全”之OT安全热门话题解读
  • 前端开发:关于diff算法详解
  • 如何为报表开发工具 FastReport .NET 设置 Apache 2 Web 服务器?
  • 华为OD机试真题JAVA实现【出租车计费】真题+解题思路+代码(20222023)
  • MySQL 查看版本的 5 种方法
  • 【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~
  • Leetcode:198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III(C++)