公司网站空间域名建设,域名注册后怎么使用,做一个自己的免费网站,网站移动终端建设枚举类的使用前言一、何为枚举类#xff1f;二、自定义枚举类#xff08;JDK1.5之前#xff09;1、实现1.1 属性1.2 构造器2、代码演示三、用关键字enum定义枚举类#xff08;JDK 1.5#xff09;1、实现1.1 属性1.2 构造器2、代码演示四、Enum类的方法五、实现接口的枚举类…
枚举类的使用前言一、何为枚举类二、自定义枚举类JDK1.5之前1、实现1.1 属性1.2 构造器2、代码演示三、用关键字enum定义枚举类JDK 1.51、实现1.1 属性1.2 构造器2、代码演示四、Enum类的方法五、实现接口的枚举类1、特性2、代码演示前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识有兴趣的小伙伴可以关注博主 也许一个人独行可以走的很快但是一群人结伴而行才能走的更远让我们在成长的道路上互相学习欢迎关注 一、何为枚举类 ⭕ 类的对象只有有限个确定的。举例如下 ● 星期Monday(星期一)、…、Sunday(星期天) ● 性别Man(男)、Woman(女) ● 季节Spring(春节)…Winter(冬天) ● 支付方式Cash现金、WeChatPay微信、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡) ● 就职状态Busy、Free、Vocation、Dimission ● 订单状态Nonpayment未付款、Paid已付款、Delivered已发货、Return退货、Checked已确认Fulfilled已配货 ● 线程状态创建、就绪、运行、阻塞、死亡 ⭕ 当需要定义一组常量时强烈建议使用枚举类 二、自定义枚举类JDK1.5之前 1、实现 若枚举只有一个对象, 则可以作为一种单例模式的实现方式。 1.1 属性 ⭕ 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰 。 ⭕private final修饰的属性应该在构造器中为其赋值。 1.2 构造器 ⭕ 私有化类的构造器保证不能在类的外部创建其对象。 ⭕ 在类的内部创建枚举类的实例。声明为public static final。 ⭕ 对象如果有实例变量应该声明为private final并在构造器中初始化。 ⭕ 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。 2、代码演示 //自定义枚举类
class Season{//1.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}//3.提供当前枚举类的多个对象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(冬天,冰天雪地);//4.其他诉求1获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4.其他诉求1提供toString()Overridepublic String toString() {return Season{ seasonName seasonName \ , seasonDesc seasonDesc \ };}
}
public class SeasonTest {public static void main(String[] args) {Season spring Season.SPRING;System.out.println(spring);}三、用关键字enum定义枚举类JDK 1.5 1、实现 ⭕ 使用 enum 定义的枚举类默认继承了 java.lang.Enum类而且是一个final类因此不能再继承其他类可以用javap工具来演示 ⭕ 必须在枚举类的第一行声明枚举类对象。 ⭕ JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。 ⭕ 如果使用无参构造器创建枚举对象则实参列表和小括号都可以省略 1.1 属性 ⭕ 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。 ⭕ 列出的实例系统会自动添加 public static final 修饰。 1.2 构造器 ⭕ 枚举类的构造器只能使用 private 权限修饰符。 2、代码演示 //使用enum关键字枚举类
enum Season1 implements Info{//1.提供当前枚举类的对象多个对象之间用,隔开末尾对象;结束SPRING(春天,春暖花开){Overridepublic void show() {System.out.println(春天在哪里);}},SUMMER(夏天,夏日炎炎){Overridepublic void show() {System.out.println(宁夏);}},AUTUMN(秋天,秋高气爽){Overridepublic void show() {System.out.println(秋天不回来);}},WINTER(冬天,冰天雪地){Overridepublic void show() {System.out.println(大约在冬季);}};//2.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//3.私有化类的构造器,并给对象属性赋值private Season1(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}//4.其他诉求1获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}}四、Enum类的方法 主要方法作用values()返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值valueOf(String str)可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是会有运行时异常IllegalArgumentExceptiontoString()返回当前枚举类对象常量的名称五、实现接口的枚举类 1、特性 ⭕ 和普通 Java 类一样枚举类可以实现一个或多个接口。 ⭕ 若每个枚举值在调用实现的接口方法呈现相同的行为方式则只要统一实现该方法即可。 ⭕ 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法。 2、代码演示 public class SeasonTest1 {public static void main(String[] args) {Season1 summer Season1.SUMMER;//toString():返回枚举类对象的名称System.out.println(summer.toString());//Season1{seasonName夏天, seasonDesc夏日炎炎}System.out.println(Season1.class.getSuperclass());//class java.lang.Enum//values():返回所有的枚举类对象构成的数组Season1[] values Season1.values();for(int i 0;i values.length;i){System.out.println(values[i]);values[i].show();}/*** Season1{seasonName春天, seasonDesc春暖花开}* 春天在哪里* Season1{seasonName夏天, seasonDesc夏日炎炎}* 宁夏* Season1{seasonName秋天, seasonDesc秋高气爽}* 秋天不回来* Season1{seasonName冬天, seasonDesc冰天雪地}* 大约在冬季*/Thread.State[] values1 Thread.State.values();for (int i 0; i values1.length; i) {System.out.println(values1[i]);}/*** NEW* RUNNABLE* BLOCKED* WAITING* TIMED_WAITING* TERMINATED*///valueOf(String objName):返回枚举类中对象名是objName的对象。Season1 winter Season1.valueOf(WINTER);//如果没有objName的枚举类对象则抛异常IllegalArgumentException
// Season1 winter Season1.valueOf(WINTER1);System.out.println(winter);//Season1{seasonName冬天, seasonDesc冰天雪地}winter.show();//大约在冬季}
}interface Info{void show();
}//使用enum关键字枚举类
enum Season1 implements Info{//1.提供当前枚举类的对象多个对象之间用,隔开末尾对象;结束SPRING(春天,春暖花开){Overridepublic void show() {System.out.println(春天在哪里);}},SUMMER(夏天,夏日炎炎){Overridepublic void show() {System.out.println(宁夏);}},AUTUMN(秋天,秋高气爽){Overridepublic void show() {System.out.println(秋天不回来);}},WINTER(冬天,冰天雪地){Overridepublic void show() {System.out.println(大约在冬季);}};//2.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//3.私有化类的构造器,并给对象属性赋值private Season1(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}//4.其他诉求1获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4.其他诉求2提供toString()Overridepublic String toString() {return Season1{ seasonName seasonName \ , seasonDesc seasonDesc \ };}Overridepublic void show() {System.out.println(这是一个季节);}
}