枚举类
1.BigInteger与BigDecimal类2.Java字符集
3.枚举类
4.Java比较器Comparable与Comparator5.Java中System类6.Java中Math类7.Java内部类8.Java关键字:this、super、final9.Java代码块10.Java中继承性、多态性11.Java接口12.子类对象实例化的全过程13.static关键字14.Java中的关键字transient15.double转String结果为指数问题16.Java注解17.日期时间API18.String字符串函数19.Excepton异常类20.IO流21.Java反射机制22.JDK与JRE区别23.Java位运算24.Java方法重载25.Java属性赋值的先后顺序与对象的实例化过程枚举类
-
使用enum定义的枚举类默认继承了
java.lang.Enum
类,因此不能再继承其他类 -
枚举类的构造器只能使用
private
权限修饰符 -
枚举类的所有实例必须在枚举类中显式列出(','逗号分隔,';'分号结尾)。列出的实例系统会自动添加
public static final
修饰 -
必须在枚举类的第一行声明枚举类对象
在JDK1.5中可以在switch表达式中使用Enum定义的枚举类的对象最为表达式,case子句可以直接使用枚举值的名字,无需添加枚举类最为限定。
public enum SeasonEnum { SPRING("春天", "春风又绿江南岸"), SUMMER("夏天", "映日荷花别样红"), AUTUMN("秋天", "秋水共长天一色"), WINTER("冬天", "窗含西岭千秋雪") ; private final String seasonName; private final String seasonDesc; private SeasonEnum(String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; } public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } }
Enum类的主要方法
方法名 | 详细描述 |
---|---|
valueOf | 传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量 |
toString | 得到当前枚举常量的名称。你可以通过重写这个方法来使得到的结果更易读 |
equals | 在枚举类型中可以直接使用" == "来比较两个枚举常量是否相等。Enum提供的这个equals()方法,也是直接使用" == "实现的。它的存在是为了在Set、List和Map中使用。注意:equals()是不可变的。 |
hashCode | Enum实现了hashCode()来和equals()保持一致。它也是不可变的。 |
getDeclaringClass | 得到枚举常量所属枚举类型的Class对象。可以用它来判断两个枚举常量是否属于同一个枚举类型 |
name | 得到当前枚举常量的名称。建议优先使用toString()。 |
ordinal | 得到当前枚举常量的次序。 |
compareTo | 枚举类型实现了Comparable接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列) |
clone | 枚举类型不能被Clone。为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupportedException 异常的不变Clone()。 |
常用的三个方法
方法名 | 详细描述 |
---|---|
values() | 返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。 |
valueOf(String str) | 可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的"名字"。如不是,会有运行时异常:IllegalArgumentException 。 |
toString() | 返回当前枚举类对象常量的名称。 |
枚举类实现接口
和普通Java类一样,枚举类可以实现一个或多个接口
若每个枚举值在调用实现的接口方法呈现相同的行为方式,则统一实现该方法即可。
若需要每个枚举值在调用实现的接口方法呈现不同的行为方式,则可以让每个枚举值分别来实现该方法
🌰:
interface Info { void show(); }
public enum Season1 implements Info{ //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束 SPRING("春天","春暖花开"){ @Override public void show() { System.out.println("春天在哪里?"); } }, SUMMER("夏天","夏日炎炎"){ @Override public void show() { System.out.println("宁夏"); } }, AUTUMN("秋天","秋高气爽"){ @Override public void show() { System.out.println("秋天不回来"); } }, WINTER("冬天","冰天雪地"){ @Override public void show() { System.out.println("大约在冬季"); } }; //2.声明Season对象的属性:private final修饰 private final String seasonName; private final String seasonDesc; //3.私有化类的构造器,并给对象属性赋值 private Season1(String seasonName,String seasonDesc){ this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //4.其他诉求1:获取枚举类对象的属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } // //4.其他诉求1:提供toString() // // @Override // public String toString() { // return "Season1{" + // "seasonName='" + seasonName + '\'' + // ", seasonDesc='" + seasonDesc + '\'' + // '}'; // } // @Override // public void show() { // System.out.println("这是一个季节"); // } }
public class SeasonTest1 { public static void main(String[] args) { Season1 summer = Season1.SUMMER; //toString():返回枚举类对象的名称 System.out.println(summer.toString()); // System.out.println(Season1.class.getSuperclass()); System.out.println("****************"); //values():返回所有的枚举类对象构成的数组 Season1[] values = Season1.values(); for(int i = 0;i < values.length;i++){ System.out.println(values[i]); values[i].show(); } System.out.println("****************"); Thread.State[] values1 = Thread.State.values(); for (int i = 0; i < values1.length; i++) { System.out.println(values1[i]); } //valueOf(String objName):返回枚举类中对象名是objName的对象。 Season1 winter = Season1.valueOf("WINTER"); //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException // Season1 winter = Season1.valueOf("WINTER1"); System.out.println(winter); winter.show(); } }
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/18379481
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步