美文网首页
Java基础-枚举

Java基础-枚举

作者: 16325 | 来源:发表于2020-02-19 15:25 被阅读0次

一、枚举类型

enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}

枚举类的常用方法

  • name(); 返回enum实例声明时的名字。
  • ordinal(); 返回一个int值,表示enum实例在声明的次序。
  • equals(); 返回布尔值,enum实例判断相等
  • compareTo() 比较enum实例与指定对象的顺序
  • values(); 返回enum实例的数组
  • valueOf(String name) 由名称获取枚举类中定义的常量

枚举类的真面目

用javap查看一个枚举类的字节码

Compiled from "Shrubbery.java"
public final class enumtest.Shrubbery extends java.lang.Enum<enumtest.Shrubbery> {
  public static final enumtest.Shrubbery GROUND;
  public static final enumtest.Shrubbery CRAWLING;
  public static final enumtest.Shrubbery HANGING;
  public static enumtest.Shrubbery[] values();
  public static enumtest.Shrubbery valueOf(java.lang.String);
  static {};
}
  • Shrubbery枚举变成了一个final修饰的类,也就是说,它不能被继承啦。
  • Shrubbery是java.lang.Enum的子类。
  • Shrubbery定义的枚举值都是public static final修饰的,即都是静态常量。
  • 当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化过程都是线程安全的。

向枚举中添加新的方法

因为枚举本质上就是Enum的子类,所以可以给他添加任意的方法。

public enum OrderStatusEnum {
    UNPAID(0, "未付款"), PAID(1, "已付款"), SENDED(2, "已发货"), FINISH(3, "已完成"),;

    //成员变量
    private int index;
    private String desc;

    //get方法
    public int getIndex() {
        return index;
    }

    public String getDesc() {
        return desc;
    }

    //构造器方法
     OrderStatusEnum(int index, String desc) {
        this.index = index;
        this.desc = desc;
    }

    //普通方法
    public static OrderStatusEnum of(int index){
        for (OrderStatusEnum temp : values()) {
            if (temp.getIndex() == index) {
                return temp;
            }
        }
        return null;
    }
}

枚举实现接口

所有枚举类都继承于java.lang.Enum,所以枚举不能再继承其他类了。但是枚举可以实现接口

public interface ISeasonBehaviour {

    void showSeasonBeauty();

    String getSeasonName();
}

public enum SeasonEnum implements ISeasonBehaviour {
    SPRING(1,"春天"),SUMMER(2,"夏天"),FALL(3,"秋天"),WINTER(4,"冬天"),
    ;

    private int index;
    private String name;

    SeasonEnum(int index, String name) {
        this.index = index;
        this.name = name;
    }

    public int getIndex() {
        return index;
    }
    public String getName() {
        return name;
    }

    //接口方法
    @Override
    public void showSeasonBeauty() {
        System.out.println("welcome to " + this.name);
    }

    //接口方法
    @Override
    public String getSeasonName() {
        return this.name;
    }
}

枚举类比较是用==还是equals

不管用==还是equals,都是可以的。其实枚举的equals方法,就是用==比较的.

枚举实现的单例

  • 枚举单例写法简单
  • 枚举可解决线程安全问题
  • 枚举可解决反序列化会破坏单例的问题
public class SingletonEnumTest {
   public enum SingletonEnum {
        INSTANCE,;
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static void main(String[] args) {
        SingletonEnum.INSTANCE.setName("jay@huaxiao");
        System.out.println(SingletonEnum.INSTANCE.getName());
    }
}

相关文章

  • 【Java基础】- 枚举

    枚举应用场景 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便 枚举与静态类 枚举类更加直观...

  • Java基础-枚举

    一、枚举类型 枚举类的常用方法 name(); 返回enum实例声明时的名字。 ordinal(); 返回一个...

  • Java枚举基础

    1. 枚举 枚举是一个引用类型枚举是一个规定了取值范围的数据类型 1.1 示例 定义枚举使用 enum 关键字 枚...

  • java基础

    JAVA基础 基本类型 enum 枚举Size { SMALL , MEDIUM , LARGE , EXTRA ...

  • 枚举

    枚举 [TOC] java.lang.Enum 类 如果没有显式地声明基础类型的枚举,那么意味着它所对应的基础类型...

  • 学习路线

    Java Se基础 Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱...

  • java基础系列之枚举<三>

    在java基础系列之枚举<二>中进一步将枚举分类/分组实现枚举的枚举,则需要将其代码进一步修改,以达到如下要求:在...

  • Java基础类型

    Java基础类型 Java除了8个基础类型和枚举类型外,其他的都是引用类型 整型(默认值0) 浮点型(默认值0.0...

  • Java基础系列-Enum深入解析

    原创文章,转载请标注出处:《Java基础系列-Enum深入解析》 一、概述 枚举就是一个语法糖效果。 定义一个枚举...

  • ##Java学习笔记之基础类库笔记

    Java学习笔记之基础类库笔记 Object 所有类,数组,枚举类的父类 Objects(Java7新增) 工具类...

网友评论

      本文标题:Java基础-枚举

      本文链接:https://www.haomeiwen.com/subject/kirafhtx.html