目录
一、方法列表
二、举例说明
以Enumeration03中的Season2为例
package enum_;
/**
* @author gqq
* @version 1.0
* 演示 Enum 类的各种方法的使用
*/
public class EnumMethod {
public static void main(String[] args) {
//使用 Season2 枚举类, 来演示各种方法
Season2 autumn = Season2.AUTUMN;
//1.name方法:输出枚举对象的名称
System.out.println(autumn.name());
//2.ordinal:得到当前枚举常量的次序,即编号(从0开始)
System.out.println(autumn.ordinal());//是第四个,所以输出3
//3.从反编译中可以看到values方法
//public static enum_.Season2[] values();
//返回一个Season2数组,包含所有枚举对象
Season2[] values = Season2.values();
System.out.println("===遍历取出枚举对象(增强for)===");
for(Season2 season : values){
System.out.println(season);
}
//4.valueOf方法,隐藏方法
//public static enum_.Season2 valueOf(java.lang.String);
//将字符串转换成对象,要求字符串必须为已有的常量名,否则报异常
//1.根据输入的AUTUMN到 Season2 的枚举对象去查找
//2.如果找到了, 就返回, 如果没有找到, 就报错
Season2 season2 = Season2.valueOf("AUTUMN");
System.out.println("season2=" + season2);
//Season2中不存在对象 GQQ ,运行就会报错
// Season2 season21 = Season2.valueOf("GQQ");
// System.out.println(season21);
//5.compareTo: 比较两个枚举常量, 比较的就是编号
//Season2.AUTUMN的编号为3,Season2.SPRING编号为0,最后返回的就是3-0,即3;
/*
public final int compareTo(E o) {
return self.ordinal - other.ordinal;
}
Season2.AUTUMN 的编号[3] - Season2.SPRING 的编号[0]
*/
System.out.println(Season2.AUTUMN.compareTo(Season2.SPRING));
//增强for循环
// int[] arr = {1,2,9};
// System.out.println("====演示增强for循环===");
// for(int i : arr){
// System.out.println(i);
// }
}
}
二、课堂练习
声明 Week 枚举类, 其中包含星期一至星期日的定义; MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY, SUNDAY;使用 values 返回所有的枚举数组, 并遍历 , 输出左图效果
package enum_;
public class EnumExercise02 {
public static void main(String[] args) {
Week[] values = Week.values();
System.out.println("==所有星期的信息如下==");
//增强for循环格式 :for(变量数据类型 变量名:数组名)
for(Week week:values){
System.out.println(week);
}
}
}
enum Week{
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
THURSDAY("星期四"),FRIDY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");
public String date;
private Week(String date) {
this.date = date;
}
public String getDate() {
return date;
}
@Override
public String toString() {
return date;
}
}
注意事项:
1.需要使用values方法,接收返回枚举常量的数组
2.使用强循环,输出枚举常量
3.输出的是对象的属性,而不是枚举常量名,所以需要在枚举类中重写toString方法,然后需要根据输出的内容,修改toString方法中return的内容
三、enum使用细节
1) 使用 enum 关键字后, 就不能再继承其它类了, 因为 enum 会隐式继承 Enum, 而 Java 是单继承机制。
2) 枚举类和普通类一样, 可以实现接口, 如下形式。
enum 类名 implements 接口 1, 接口 2{}
package enum_;
public class EnumDetail {
public static void main(String[] args) {
Season3.CLASSICMUSIC.playing();
}
}
class A{
}
//1.使用 enum 关键字后, 就不能再继承其它类了, 因为 enum 会隐式继承 Enum, 而 Java 是单继承机制。
//2.枚举类和普通类一样, 可以实现接口
interface IA{
void playing();
}
enum Season3 implements IA{ //extends A{
CLASSICMUSIC;
@Override
public void playing() {
System.out.println("播放好听的音乐...");
}
}