一、枚举

  1、概述

    枚举:JDK1.5引入的,类似于穷举,一一罗列出来

    Java 枚举:把某个类型的对象,全部列出来

    枚举类型的对象是有限、固定的几个常量对象。

  2、应用

    什么情况下会用到枚举类型?

    当某个类型的对象是固定的,有限的几个,那么就可以选择使用枚举。

    在整个系统的运行期间,有且只有这几个对象。

    例如: 性别类:只有两个对象:男,女

        季节类:有4个对象:春、夏、秋、冬

二、JDK1.5之前,实现枚举效果

  1、需要把构造器私有化:

      目的:在这个类的外面,无法随意的创建对象

  2、在本类中,提前创建好对象,供别人使用

      Demo:

 public class TestEnum {
public static void main(String[] args) {
//Gender g1 = new Gender(); 构造器私有化,无法使用 Gender nan1 = Gender.NAN;
Gender nan2 = Gender.NAN;
System.out.println(nan1 == nan2);//true
}
}
class Gender{
//public:使得外面可以直接访问
//static:使得可以使用“类名.”访问
//final:前调这个对象是不可变
public static final Gender NAN = new Gender("男");
public static final Gender NV = new Gender("女"); private String description; private Gender(String description){
this.description = description;
}
}

三、JDK1.5之后使用枚举

  1、定义格式

    (1)声明枚举类型

【修饰符】  enum 枚举类型名{
常量对象列表
}

    (2)声明枚举类型2

【修饰符】  enum 枚举类型名{
常量对象列表;
其他的成员列表
}

             说明

      ① 常量对象列表必须在枚举类型的首行;

      ② 如果常量对象列表后面还有其他的成员,那么需要在常量对象列表后面加 ;进行分割。

  2、枚举

    (1)枚举是一种类,是一种特殊的类,特殊在它的对象是有限的几个常量对象。

    (2)枚举类型不能继承其他类型,因为枚举类型有一个隐含的父类

       java.lang.Enum 是所有 Java 语言枚举类型的公共基本类。

  3、常用方法

    (1)构造方法

        Enum 类中有一个唯一的构造器

protected  Enum(String name, int ordinal)

         这个构造器不是程序员手动调用的,是编译器自动调用,在所有枚举类型的构造器的首行,并且自动传入 name 和 ordinal 的值。

        name:表示常量对象名称

        ordinal:表示常量对象的序号,其中初始常量序数为零

    (2)name() 与 ordinal() 方法

String name():返回 常量对象名称
int ordinal():返回 常量对象序数,即获取某个枚举对象的位置索引值,索引从0开始

    (3)toString() 方法

String toString():在Enum类中重写了Object类的toString方法,返回常量对象名

      自定义的枚举类型,eclipse不能自动生成 toSring 方法,但是可以手动重写。因为IDE认为,父类的 toString方法已经很完美了。

    (4)values() 与 valueof() 方法

枚举类型[] values():返回该枚举的所有枚举对象
枚举类型 valueOf(String name):根据name常量对象名返回枚举对象

     (5)compareTo() 方法

枚举对象.compareTo()  该方法用于比较两个枚举对象在定义时的顺序

      返回正值:代表方法中参数在调用该方法的枚举对象位置之前

       返回零:代表两个互相比较的枚举成员的位置相同

       返回负值:代表方法中参数在调用该方法的枚举对象位置之后

  

    Demo:

 public class TestEnum {
public static void main(String[] args) {
Season s = Season.SPRING;
System.out.println(s);//自动调用toString System.out.println(s.name());
System.out.println(s.ordinal());
System.out.println("-----------------"); Season[] all = Season.values(); //获取所有枚举对象
for (int i = 0; i < all.length; i++) {
System.out.println(all[i]);
} System.out.println("-----------------");
Season spring = Season.valueOf("SPRING");
System.out.println(spring);
}
}
enum Season{
//常量对象后面没有(值)就是调用无参构造
//常量对象后面有(值)就是调用有参构造
SPRING("春暖花开"),SUMMER,FALL,WINTER; private String description; private Season() { } private Season(String description) {
this.description = description;
}
// 手动重写 toString() 方法
public String toString(){
return name() + ":" + description;
} }

四、枚举类型的特点

  1、枚举类型有一个公共的基本的父类,是 java.lang.Enum 类型,所以不能再继承别的类型

  2、枚举类型的构造器必须是私有的

  3、枚举类型可以实现接口

         枚举实现接口要重写所有的抽象方法,所有对象可以都调用通用的重写方法,也可以调用各自重写的方法。

   Demo:

 public class TestEnum {
public static void main(String[] args) {
MyEnum a = MyEnum.A;
a.test(); MyEnum b = MyEnum.B;
b.test();
}
}
interface MyInter{
void test();
}
enum MyEnum implements MyInter{ //每个对象各自重写方法
A{
@Override
public void test() {
System.out.println("aaa");
}
},B{
@Override
public void test() {
System.out.println("bbb");
}
}
}
enum MyEnum1 implements MyInter{ //通用的方法
A,B; @Override
public void test() {
System.out.println("test");
}
}

五、父类 java.lang.Enum 类型

  1、构造器

protected Enum(String name, int ordinal):由编译器自动调用

  2、String name(): 常量对象名

  3、int ordinal(): 返回常量对象的序号,第一个序号是0

  4、String toString(): 返回常量对象名,如果子类想重写,需要手动重写

  5、int compareTo(Object obj): 按照常量对象的顺序比较

六、枚举类型的优势

    •   类型安全
    • 紧凑有效的数据定义
    • 可以和程序其他部分完美交互
    • 运行效率高

Java 之 枚举(Enum)的更多相关文章

  1. 关于Java中枚举Enum的深入剖析

    在编程语言中我们,都会接触到枚举类型,通常我们进行有穷的列举来实现一些限定.Java也不例外.Java中的枚举类型为Enum,本文将对枚举进行一些比较深入的剖析. 什么是Enum Enum是自Java ...

  2. C++和Java中枚举enum的用法

    在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的 ...

  3. 聊一聊Java的枚举enum

    一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二.. ...

  4. Java基础--枚举Enum

    Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...

  5. JAVA中枚举Enum详解

    1.关键字:enum.枚举可以定义成单独的文件,也可以定义在其他类内部. 枚举在类内部的示例: public class EnumInner { public static void main(Str ...

  6. java枚举enum

    http://www.cnblogs.com/wenruo/p/5349614.html java的枚举通过关键字enum实现.可以理解为一个类,不过这个类由编译器自动加了一些方法. static v ...

  7. Java枚举enum以及应用:枚举实现单例模式

    枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚 ...

  8. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  9. Java 枚举(enum) 详解4种常见的用法

    JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 大师兄我又加上自己的理解,来帮助各位理解一下. 用法一:常量 在JDK1.5 之前,我们定义常 ...

  10. Java中的Enum(枚举)用法介绍

    1. 关于Java Enum:学过C/C++等语言的人,应该都对Enum类型略知一二.Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保 ...

随机推荐

  1. 第17节-BLE安全管理概述

    安全管理是BLE中最复杂的内容,涉及LL层.SM层.GAP层 一.妈妈的担心 1. 白名单: 妈妈说,你只能跟A.B.C这3个好孩子玩:他们打电话给你,你才可以出去玩. A.B.C三人,就在妈妈的“白 ...

  2. 第14节_BLE协议ATT层

    下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,ATT层就是化验室,通过它可以得到各种检查结果──属性.这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由 ...

  3. 201871010121 王方 《面向对象程序设计(JAVA)》第七周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  4. Virtualbox 修改硬盘的序列号等信息 例

    Virtualbox 修改硬盘的序列号等信息 例 http://blog.csdn.net/eidolon8/article/details/42709365 原创 2015年01月14日 14:24 ...

  5. 史上最全的CSP-J/S 第一轮知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  6. [Algorithm] 617. Merge Two Binary Trees

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  7. Linux性能优化实战学习笔记:第四十二讲

    一.上节回顾 上一节,我们学习了 NAT 的原理,明白了如何在 Linux 中管理 NAT 规则.先来简单复习一下. NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 ...

  8. [LeetCode] 560. Subarray Sum Equals K 子数组和为K

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  9. docker搭建php环境

    前言 本文根据参考文章,自己动手试了搭建PHP环境,对里面的Dockerfile的编写 做了最新的修改,以此记录,完整代码查看传送门 说明: 镜像下载过慢,可使用国内镜像加速,具体可自行查询 根据此方 ...

  10. LInux 就该这么学 笔记分享

    看了Linux就该这么学的前部分书,觉得写的还可以,就在网上找了下面这个同学写的笔记,觉得很详细,所以保存地址,供以后查阅参看.这里对作者表示感谢!!! 博客地址: https://www.cnblo ...