[Java 基础]枚举

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java 基础]枚举相关的知识,希望对你有一定的参考价值。

概念

枚举(enum)是一个被命名的整型常量的集合。

enum相对于普通常量最明显的好处在于更有组织性。

尽管enum看起来像是一种新的数据类型,事实上,enum是一种受限制的类,并且具有自己的方法。

创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum

java.lang.Enum类声明

public abstract class Enum<E extends Enum<E>>

        implements Comparable<E>, Serializable {}

 

enum基本特性

enum中,提供了一些基本方法:

values()返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。

name()返回实例名。

ordinal()返回实例声明时的次序,从0开始。

getDeclaringClass()返回实例所属的enum类型。

可以使用==来比较enum实例,编译器会自动提供equals()hashCode()方法。此外,java.lang.Enum实现了ComparableSerializable接口,所以也提供compareTo()方法。

例:展示enum的基本特性

注:有个小细节,如果枚举中没有定义方法,可以在最后一个实例后面加逗号或分号或什么符号都不加

enum Color {

    RED, GREEN, BLUE

    // 如果枚举中没有定义方法,也可以在最后一个实例后面加逗号或分号

    // RED, GREEN, BLUE,

    // RED, GREEN, BLUE;

};

 

public class EnumDemo {

    public static void main(String args[]) {

        for (Color c : Color.values()) {

            System.out.println(c + " ordinal: " + c.ordinal());

            System.out.print(c.compareTo(Color.GREEN) + " ");

            System.out.print(c.equals(Color.GREEN) + " ");

            System.out.println(c == Color.GREEN);

            System.out.println(c.getDeclaringClass());

            System.out.println(c.name());

            System.out.println("===================================");

 }

    }

};

输出:

RED ordinal: 0

-1 false false

class com.notes.enumeration.Color

RED

===================================

GREEN ordinal: 1

0 true true

class com.notes.enumeration.Color

GREEN

===================================

BLUE ordinal: 2

1 false false

class com.notes.enumeration.Color

BLUE

===================================

 

enum具有类的特性

enum不能为实例赋值

CC++语言中的enum,可以为实例直接赋值,但是Java不能用“=”为enum实例赋值

例:CC++语言中的enum初始化

#include "stdafx.h"

#include <iostream>

using namespace std;

typedef enum{

    ONE = 1,

    TWO,

    THREE = 3,

    TEN = 10

} Number;

 

int _tmain(int argc, _TCHAR* argv[])

{

    cout << Number::ONE << endl;

    cout << Number::TWO << endl;

    cout << Number::THREE << endl;

    cout << Number::TEN << endl;

    return 0;

}

输出:

1

2

3

10

 

添加方法

Java虽然不能直接为实例赋值,但是它有更优秀的解决方案:为enum添加方法。

除了不能继承自一个enum外,基本上可以将enum看做一个常规的类(因为enum都继承自类,且Java不支持多重继承,所以enum不能再继承其他类)。

创建新的enum时,可以为其添加多种方法,甚至可以为其添加构造方法。

注意一个细节:如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。

例:列举一个错误码的枚举,全面展示如何在枚举中定义普通方法、静态方法、抽象方法、构造方法

public enum ErrorCode {

    OK(0) {

        public String getName() {

            return "成功";

        }

    },

    ERROR_A(100) {

        public String getName() {

            return "错误A";

        }

    },

    ERROR_B(200) {

        public String getName() {

            return "错误B";

        }

    };

 

    private ErrorCode(int number) { // 构造方法

        this.number = number;

    }

 

    private int number;

    public int getNumber() { // 普通方法

        return number;

    }

 

    public abstract String getName(); // 抽象方法

 

    public static String getAll() { // 静态方法

        String result = "[";

        for(ErrorCode code : ErrorCode.values()){

            result以上是关于[Java 基础]枚举的主要内容,如果未能解决你的问题,请参考以下文章

Java注解基础概念总结

Java基础08内部类枚举类日期和时间MathRandom

我奶奶都能懂java枚举类型

我奶奶都能懂java枚举类型

JAVA基础枚举

Java基础教程:枚举类型

(c)2006-2024 SYSTEM All Rights Reserved IT常识