博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java枚举分析
阅读量:6272 次
发布时间:2019-06-22

本文共 3508 字,大约阅读时间需要 11 分钟。

hot3.png

java枚举简单分析

    enum全称为enumeration,是JDK1.5中引入的新特性,位于包java.lang中。

    在JDK1.5以前,我们通常使用接口来定义常量:

public interface IConstants {    String ONE= "one";    String TWO= "two";    String THREE= "three";}

    创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

    基本原理:

    首先编写一个简单的枚举示例: 

package com.anxpp.demo;public enum EasySingleton{    ONE,TWO,THREE;}

    这段代码实际上调用了3次 Enum(String name, int ordinal):

new Enum
("ONE",0);new Enum
("TWO",1);new Enum
("THREE",2);

    接下来,我们在控制台用javac命令编译EasySingleton.java:

javac C:\Users\u\Desktop\anxpp\Maven\Spring4Hibernate5MVC\src\test\java\com\anxpp\demo\SingleEnum.java

    得到class文件,在使用javap命令反编译(加上参数-c可以得到更详细的反编译结果):

C:\Users\u>javap C:\Users\u\Desktop\anxpp\Maven\Spring4Hibernate5MVC\src\test\java\com\anxpp\demo\SingleEnum.classCompiled from "SingleEnum.java"public final class com.anxpp.demo.SingleEnum extends java.lang.Enum
{ public static final com.anxpp.demo.SingleEnum ONE; public static final com.anxpp.demo.SingleEnum TWO; public static final com.anxpp.demo.SingleEnum THREE; public static com.anxpp.demo.SingleEnum[] values(); public static com.anxpp.demo.SingleEnum valueOf(java.lang.String); public static void main(java.lang.String[]); static {};}

    可以看到,枚举实际也是一个class,并且是继承了java.lang.Enum的,枚举常量都申明为public static final类型,只不过使用enum关键字后,看上去有点不一样,所以我们使用enum时时不能使用extends关键字的,因为java是单继承的。

 

    常用操作

public enum SingleEnum{    ONE,TWO,THREE;    public static void main(String args[]){        System.out.println("for循环遍历:");        for(SingleEnum singleEnum : SingleEnum.values()){            System.out.println(singleEnum);        }        System.out.println("switch的使用:");        SingleEnum singleEnum = SingleEnum.TWO;        switch(singleEnum){        case ONE:System.out.println("这是1");break;        case TWO:System.out.println("这是2");break;        case THREE:System.out.println("这是3");break;        default:System.out.println(singleEnum);break;        }    }}

    输出:

for循环遍历:ONETWOTHREEswitch的使用:这是2

 

    enum对象的常用方法:

    int compareTo(E o) 比较此枚举与指定对象的顺序。

    Class<E> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。

    String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。

    int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

    String toString() 返回枚举常量的名称,它包含在声明中。

    static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。

System.out.println(SingleEnum.ONE.compareTo(SingleEnum.TWO));//这里会输出-1,因为ONE在前面

 

    可以给enum自定义属性和方法:

public enum SingleEnum{    ONE(1),THREE(3){        @Override        public boolean isEven() {            return false;        }    },TWO(2){        @Override        public boolean isEven() {            return true;        }    };    private int value;    private SingleEnum(){}    private SingleEnum(int value){        this.value = value;    }    public int getValue(){        return value;    }    public boolean isEven(){        return false;    }    public static void main(String args[]){        for(SingleEnum singleEnum : SingleEnum.values()){            System.out.println(singleEnum + ":" + singleEnum.isEven() + singleEnum.getValue());        }    }}/*输出:ONE:false1THREE:false3TWO:true2*/

    单例模式最佳实现方式:

/** * 枚举实现单利模式 * @author u * */public enum EasySingleton{    INSTANCE;    /*     * 其他代码     */    //获取实例方式    //EasySingleton.INSTANCE}

 

    结论:

    enum就是一个普通类,经过了编译器的优化,可以很好的实现单例模式。

 

转载于:https://my.oschina.net/lvzunwei/blog/687839

你可能感兴趣的文章
GNOME 3.34 发布计划敲定,正式版将于9月11日推出
查看>>
使用Data Lake Analytics快速分析OSS上的日志文件
查看>>
《图解服务器端网络架构》笔记
查看>>
《叶问》第2期
查看>>
各业务Object概念(VO、 PO、DO、DTO、 BO、 QO、DAO、POJO)
查看>>
JavaScript对象继承方式
查看>>
Java 11中的新功能和API详解系列1
查看>>
网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
查看>>
第三章 导数与微分
查看>>
WPF编游戏系列 之二 图标效果
查看>>
设计模式-里氏替换原则
查看>>
react-native调试
查看>>
基于Excel2013的合并计算
查看>>
Qt学习笔记(二)-常用快捷键
查看>>
RStudio v1.2.1335 发布,R 语言的集成开发环境
查看>>
NutzWk 5.2.2 发布,Java 微服务分布式开发框架
查看>>
mybatis 自动生成代码(mybatis generator)
查看>>
Confluence 6 当前使用的数据库状态
查看>>
dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
查看>>
趣谈网络协议-笔记(1)
查看>>