【Java基础05】枚举类

编程入门 行业动态 更新时间:2024-10-11 17:22:15

【Java<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础05】枚举类"/>

【Java基础05】枚举类

【Java基础系列】
【Java基础01】基础概述
【Java基础02】常用类
【Java基础03】时间类
【Java基础04】异常
【Java基础05】枚举类
【Java基础06】泛型
【Java基础07】注解
【Java基础08】反射
【Java基础09】代理
【Java基础10】IO流

枚举类

文章概述:总结描述Java基础中枚举类的定义和使用,包括枚举类的定义、枚举类的常用方法、枚举类的参数和方法、枚举实现单例模式。

一、枚举的定义

枚举(Enum):枚举类型是由一组固定的常量组成的。Java中由关键字enum来定义一个枚举类型。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

//首先枚举是一个特殊的class
//这个class相当于final static修饰,不能被继承
//他的构造方法强制被私有化,下面有一个默认的构造方法private ColorEnum();
//所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类
public enum ColorEnum {//每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来。//每个成员变量都是final static修饰RED, GREEN, BLANK, YELLOW;
}

枚举特点:

  • 使用关键字enum
  • 一串允许的值,比如上面定义的各类颜色
  • 枚举可以单独定义在一个文件中,也可以嵌在其它Java类中
  • 枚举可以实现一个或多个接口(Interface),不能被继承
  • 可以定义新的变量和方法

二、枚举的常用方法

public static void main(String[] args) {// values 将枚举的所有成员以数组形式返回for (ColorEnum value : ColorEnum.values()) {// ordinal 获取枚举的下标值System.out.println("索引" + value.ordinal() + ",值:" + value);}// valueOf 通过字符串获取单个枚举对象System.out.println(ColorEnum.valueOf("RED"));// compareTo 比较枚举成员所在位置System.out.println(GREENpareTo(BLANK));
}

三、枚举中参数和方法

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。SeasonEunm.SPRING获得的对象相当于调用私有构造方法。

@Getter
public enum SeasonEunm {//每一个枚举变量都是枚举类SeasonEunm的实例化//SeasonEunm.SPRING获得的对象相当于new SeasonEunm("春","春困");获得的对象SPRING("春","春困"),SUMMER("夏","夏睡"),AUTUMN("秋","秋乏"),WINTER("冬","冬眠");//强制私有化的构造方法,因为枚举类默认继承Eunm类,被final static修饰,不能被继承//由于被强制private,所以不能使用new去生成枚举对象//在SeasonEunm.SPRING获得对象,隐式调用了下面的构造方法// 构造方法 ,赋值给成员变量private SeasonEunm(String name, String value) {this.name = name;this.value = value;}//添加成员变量的原因是,方便够着方法赋值,使用SeasonEunm.SPRING.getName就能获取对应的值private String name;private String value;//覆盖方法  :只能使用toString方法来输出枚举变量值@Overridepublic String toString() {return "SeasonEunm{" +"name='" + name + '\'' +", value='" + value + '\'' +'}';}
}

四、枚举实现单例

单例模式:确保对象的唯一性。

实现单例模式的方法有很多,后面可以详细见【设计模式】单例模式处,这里先具体说明下枚举类实现单例模式。

这借助 JDK1.5 中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建 新的对象。这种方式是 Effective Java 作者 Josh Bloch 提倡的方式,他说单元素的枚举类型已经成为实现Singleton的最佳方法。

public enum Singleton8 {INSTANCE; //属性public void sayOK() {System.out.println("ok~");}
}

Java虚拟机会保证枚举类型不能被反射枚举对象的唯一性,因此每一个枚举类型和定义的枚举变量在JVM中都是唯一的。

public class Singleton9 {private Singleton9(){}public static enum SingletonEnum {SINGLETON;private Singleton9 instance = null;private SingletonEnum(){instance = new Singleton9();}public Singleton9 getInstance(){return instance;}}public static void main(String[] args) {Singleton9 instance1 = SingletonEnum.SINGLETON.getInstance();Singleton9 instance2 = SingletonEnum.SINGLETON.getInstance();System.out.println(instance1 == instance2);}
}

输出:true

更多推荐

【Java基础05】枚举类

本文发布于:2024-02-06 02:17:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745776.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!