hi,我是逸尘,一起学java吧
枚举是信息的标志和分类
当一个变量有几种固定可能的取值时,就可以将它定义为类型的枚举。
优点:代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术!建议使用!
缺点:只能代表标识不能是数据(具体值),这个时候用常量,且常量会简单一些
修饰符 enum 枚举名称{
第一行都是罗列枚举类实例的名称}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER;}
使用逗号 , 来分割
反编译的
枚举类都是继承了枚举类型:java.lang.enum
枚举都是最终类,不可以被继承。
构造器的构造器都是私有的,枚举对外不能创建对象。
枚举类的第一行默认都是罗列枚举对象的名称的。
package com.yd.yc;
import java.util.Scanner;
public class TestOne {
public static void main(String[] args) {
System.out.println("请输入季节"+"\n"+"SPRING"+"\n"+"SUMMER"+"\n"+"AUTUMN"+"\n"+"WINTER");
Scanner sr =new Scanner(System.in);
String seasons= sr.next();
//该方法方法的作用就是返回【名称为String name的】【枚举类T中的】枚举值;
// 该方法形参只要一个String类型的值即可,并且该String值为枚举值对应的名称,
change(Season.valueOf(seasons));
}
private static void change(Season o) {
switch (o){
case SPRING:
System.out.println("春天万物复苏又是...");
break;
case SUMMER:
System.out.println("夏天吃冰棒");
break;
case AUTUMN:
System.out.println("秋天天高气爽");
break;
case WINTER:
System.out.println("冬天是玩雪人");
break;
}
}
}
枚举一般用在的场景是:状态码
enum定义的枚举类默认继承了java.lang.Enum类,并实现了java.lang.Serializable和java.lang.Comparable接口。
方法
有如下的方法
- values():返回枚举类中所有的值
- valueOf():返回指定字符串值的枚举常量
- name():返回实例名
- ordinal():查找枚举常量的索引
- equals():判断是否是同一对象,也可使用==比较
- getDeclaringClass():返回实例所属的enum类型
特性
枚举不能继承,但可以看做一个常规的类;
不允许使用“=”为枚举常量赋值,可使用方法显示赋值;
enum可以添加普通方法、静态方法、抽象方法、构造方法;
enum可以实现接口,但无法继承,因为enum继承java.lang.Enum类,Java不允许多继承,所以 enum无法继承其他类。