4. Enum 类
java.lang.Enum类 是 Java 语言枚举类型的公共基类,我们使用enum关键字定义的枚举类,是隐式继承自Enum类的,下面我们来看一下Enum类的常用方法:
values():返回枚举类型的对象数组。该方法可以很方便的遍历所有的枚举值;
valueOf():可以把一个字符串转换为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”,如果不是,会抛出IllegalArguementException;
toString():返回当前枚举类对象常量的名称。
这 3 个方法使用起来比较简单,因此我们写在一个实例中,代码如下:
package com.caq.exception; public class Test2 { public static void main(String[] args) { Test test1 = Test.man; System.out.println("调用 toString方法"); System.out.println(test1.toString()); System.out.println("调用values方法"); Test[] values = Test.values(); for (Test value : values){ System.out.println(value); } System.out.println("调用values方法"); Test test2 = Test.valueOf("man"); System.out.println(test2); } enum Test{ //使用enum关键字生成枚举类 //1.枚举类内部提供多个对象,这些对象用逗号分隔开来 //2.声明枚举类的属型 //3.编写构造方法,为属型赋值 //3.提供获得属型的Getter方法(封装里的知识) //1. man("男"), woman("女"), unknow("未知"); //2. private final String sexName; //3. Test(String sexName){ this.sexName=sexName; } public String getSexName() { return sexName; } } }
运行结果:
调用 toString方法 man 调用values方法 man woman unknow 调用values方法 man
值得注意的是,当调用valuOf()方法时,我们传递的对象的“名字”,在枚举类中并不存在,此时会抛出运行时异常:IllegalArgumentException,实例如下:
package com.caq.exception; public class Test2 { public static void main(String[] args) { Test test1 = Test.man; System.out.println("调用values方法"); Test test2 = Test.valueOf("man1"); System.out.println(test2); } enum Test{ //使用enum关键字生成枚举类 //1.枚举类内部提供多个对象,这些对象用逗号分隔开来 //2.声明枚举类的属型 //3.编写构造方法,为属型赋值 //3.提供获得属型的Getter方法(封装里的知识) //1. man("男"), woman("女"), unknow("未知"); //2. private final String sexName; //3. Test(String sexName){ this.sexName=sexName; } public String getSexName() { return sexName; } } }
运行结果:
调用values方法 Exception in thread "main" java.lang.IllegalArgumentException: No enum constant com.caq.exception.Test2.Test.man1 at java.lang.Enum.valueOf(Enum.java:238) at com.caq.exception.Test2$Test.valueOf(Test2.java:12) at com.caq.exception.Test2.main(Test2.java:8)
5. 小结
枚举类就是一个可以表示枚举的类
当一个类的对象只有有限个、确定个的时候,我们就可以定义一个枚举类来存放这些对象。
使用枚举类可以规避编译器无法检测每个值的范围是否合法的问题。
使用enum关键字来定义枚举类。
所有通过enum关键字定义的枚举类都继承自java.lang.Enum类,要了解该类的常用方法的使用。