枚举
发表于:2022-06-25 | 分类: 后端
字数统计: 926 | 阅读时长: 3分钟 | 阅读量:

枚举

枚举的定义

枚举类的使用enum(它与class、interface关键字地位相同)关键字定义。一个java源文件中只能有一 个public修饰的枚举类,且java源文件也必须和枚举类的类名相同。 下面来定义一个枚举类:

public enum TestDemo{ 	
SPRING,SUMMER,FALL,WINTER 
}

枚举的好处

  • 定义枚举的语法更为简洁。
  • 枚举更为安全,一个枚举类型的变量,它的值要么为null,要么为枚举值之一,不可能为其他值,但使用整形变量,它的值就没有办法强制,值可能就是无效的。
  • 枚举类型自带很多便利方法(如values, valueOf, toString等),易于使用。

基本实现原理

枚举类型实际上会被Java编译器转换为一个对应的类,这个类继承了Java API中的java.lang.Enum类。

Enum类有两个实例变量name和ordinal,在构造方法中需要传递,name(), toString(), ordinal(), compareTo(), equals()方法都是由Enum类根据其实例变量name和ordinal实现的。

枚举类和普通类的区别

  1. 枚举类可以实现一个或多个接口,使用eunm定义的类默认继承了java.lang.Enum类,而不是默认 继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了 java.lang.Serializable和java.lang.Comparable接口

  2. 非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。

  3. 枚举类的构造器只能使用private修饰,如果省略,系统默认使用private修饰。

  4. 枚举类的每一个实例必须显示声明,每个实例使用逗号隔开。

枚举类默认有如下方法

values()方法   该方法可以很方便的遍历所有的枚举值
/**
 * @Author Gw_gw
 * @Date 2021/6/12 18:50
 * @Version 1.0
 */
public class  TestDemo{
	public static void main(String[] args) {
		//使用values()方法来遍历枚举类的值
		for(Season i : Season.values()){
			System.out.println(i);
		}
	}
}
/**
 * 枚举类表示四季
 */
enum Season{
	/**
	 * 春夏秋冬
	 */
	SPRING,SUMMER,FALL,WINTER;
}
ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。

public class  TestDemo{
	public static void main(String[] args) {
		//使用values()方法来赋值
		Season[] season = Season.values();
		for(Season i : season){
			System.out.println(i+"的索引是"+i.ordinal());
		}
	}
}

valueOf()方法返回指定字符串值的枚举常量。不存在的会报错 IllegalArgumentException

public class  TestDemo{
	public static void main(String[] args) {
		// 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
		System.out.println(Season.valueOf("SPRING"));
		//error  IllegalArgumentException
		System.out.println(Season.valueOf("asd"));
	}
}

compareTo(E o)方法  指定枚举对象的比较顺序。如果枚举对象在指定枚举对象之后返回正整数,之
前返回正整数,否则返回0

public class  TestDemo{
	public static void main(String[] args) {
		//返回-1
		System.out.println(Season.SPRING.compareTo(Season.SUMMER));
	}
}
String name() :返回此枚举实例的名称
String toString():返回枚举常量的名称
toString()方法更常用

public class  TestDemo{
	public static void main(String[] args) {
		System.out.println(Season.SPRING.name());
		System.out.println(Season.SPRING.toString());
		//实质就是调用toString()方法
		System.out.println(Season.SPRING);
	}
}

枚举类的成员变量和构造器

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所 以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都 必须实现它。

上一篇:
二分排序
下一篇:
Java异常
本文目录
本文目录