enum 枚举
枚举的实例对象是固定的,实例是自动new,每个枚举类会自动继承java.lang.Enum 抽象类
如何声明枚举?
所有枚举类都是java.lang.Enum
的子类,无需用extends来继承,如下是枚举类拥有的常用方法
方法名称 | 说明 |
---|---|
int compareTo(E e) | 比较两个枚举量大小,其实声明顺序的下标索引 |
boolean equals(Object o) | 比较两个枚举常量是否相等 |
int hashCode() | 返回枚举常量的hashCode |
String name() | 返回枚举常量的名字 |
int ordinal() | 返回枚举常量在枚举类声明的序号,第一个枚举常量序号为0 |
String toString() | 枚举常量转换字符串 |
static T valueOf(Class enumType,String name) | 把字符串转换成枚举常量 |
static T[] values() | 返回本类所有枚举常量数组 |
static T valueOf(String name) | 通过枚举常量的名称字符串返回T枚举常量 |
枚举也可以叫枚举类,而枚举其实就是多例是有限个数的,一个类有多个实例,但实例的个数不是无穷的。
/*
* Copyright (c) 2017, 2023, zxy.cn All rights reserved.
*
*/
package cn.practice2;
/**
* <p>Description:</p>
* <p>Enum:ColorEnum</p>
* 首先枚举是一个特殊的Class
* 这个class相当于final static修饰,不能被继承
* 他的构造方法强制被私有化,下面有一个默认的构造方法private ColorEnum();
* 所有的枚举都继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象不能再继承其他类
* <p>Powered by zxy On 2023/5/22 17:18 </p>
*
* @author zxy [zxy06291@163.com]
* @version 1.0
* @since 17
*/
public enum ColorEnum {
//每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来
//每个成员变量都是final static修饰
RED, GREEN, BLACK, YELLOW;
public void ColorTest() {
//ordinal返回枚举变量的序号
for(ColorEnum color:ColorEnum.values()){
System.out.println(color+",ordinal:"+color.ordinal()+",name:"+color.name());
}
}
}
/*
* Copyright (c) 2017, 2023, zxy.cn All rights reserved.
*
*/
package cn.practice2;
/**
* <p>Description:</p>
* <p>Enum:</p>
* <p>Powered by zxy On 2023/5/22 17:35 </p>
*
* @author zxy [zxy06291@163.com]
* @version 1.0
* @since 17
*/
public class EnumDemo {
enum en1 {a, b, c}
enum color {RED, GREEN, BLUE}
enum num {
SUCCESS(200, "成功"), FAIL(400, "失败"), NOTFOUND(404, "未知"), ERROR(300, "错误");
public int code;
public String message;
num(int code, String message) {
this.code = code;
this.message = message;
}
public static num fromCode(int code) {
num nn = null;
for (num v : num.values()) {
if (v.code == code) {
nn = v;
break;
}
}
return nn;
}
public static num valueFrom(String name) {
return num.valueOf(name);
}
}
public static void main(String[] args) {
num n = num.SUCCESS;
System.out.println(n);
System.out.println(n.message);
System.out.println(n.code);
num err = num.fromCode(404);
System.out.println(err.message);
System.out.println(num.valueFrom("ERROR"));
System.out.println(num.valueOf("ERROR"));
}
}
注意,定义枚举类的关键字是enum,而不是Enum,所有关键字都是小写的!枚举类继承了java.lang.Enum类
其中FRONT、BEHIND、LEFT、RIGHT都是枚举项,它们都是本类的实例,本类一共就只有四个实例对象。
在定义枚举项时,多个枚举项之间使用逗号分隔,最后一个枚举项后需要给出分号!但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号!建议不要省略分号!
不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项。
之间使用逗号分隔,最后一个枚举项后需要给出分号!但如果枚举类中只有枚举项(没有构造器、方法、实例变量),那么可以省略分号!建议不要省略分号!
不能使用new来创建枚举类的对象,因为枚举类中的实例就是类中的枚举项,所以在类外只能使用类名.枚举项。