枚举
枚举简介:
使用枚举的方式一
枚举是一种特殊的class,一般用来表示一组常量。
定义一个数字枚举类 数字常量有ONE,TWO,THREE
public enum EnumDemo {
ONE,TWO,THREE
}
测试类
public class Test {
public static void main(String[] args) {
EnumDemo enumOne = EnumDemo.ONE;
EnumDemo enumTwo = EnumDemo.TWO;
EnumDemo enumThree = EnumDemo.THREE;
System.out.println(enumOne);
System.out.println(enumTwo);
System.out.println(enumThree);
}
}
使用枚举的方式二
public class Test {
public enum EnumDemo {
ONE,TWO,THREE
}
public static void main(String[] args) {
EnumDemo enumOne = EnumDemo.ONE;
EnumDemo enumTwo = EnumDemo.TWO;
EnumDemo enumThree = EnumDemo.THREE;
System.out.println(enumOne);
System.out.println(enumTwo);
System.out.println(enumThree);
}
}
枚举元素的迭代
public class Test {
public enum EnumDemo {
ONE,TWO,THREE
}
public static void main(String[] args) {
for(EnumDemo enumDemo : EnumDemo.values()){
System.out.println(enumDemo);
}
}
}
在switch中使用枚举类
public class Test {
public enum EnumDemo {
ONE,TWO,THREE
}
public static void main(String[] args) {
EnumDemo enumDemo = EnumDemo.TWO;
switch (enumDemo){
case ONE:
System.out.println("1");
break;
case TWO:
System.out.println("2");
break;
case THREE:
System.out.println("3");
break;
}
}
}
方法分析
实际上定义一个枚举类,通过对上面数字枚举类的分析
就是定义了一个下面类似这样的类:
class EnumDemo{
public static final EnumDemo ONE = new EnumDemo();
public static final EnumDemo TWO = new EnumDemo();
public static final EnumDemo THREE = new EnumDemo();
}
enum定义的枚举类默认继承了java.lang.Enum类,并实现了Java.lang.Seriablizable和java.lang.Compareable两个接口
values(),ordinal(),valueOf()方法位于java.lang.Enum类中,分别对这些方法进行介绍。
values()方法
返回枚举类中所有的值
ordinal()方法
可以找到每个枚举常量的索引,就像数组索引一样。
valueOf()方法
返回指定字符串值的枚举常量
valueOf返回的枚举常量,不存在则会报错。
public void methods(){
EnumDemo enumDemo[] = EnumDemo.values();
for(EnumDemo data : enumDemo){
System.out.println(data+"索引为:"+data.ordinal());
}
System.out.println(EnumDemo.valueOf("ONE"));
System.out.println(EnumDemo.valueOf("ON"));
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant classs.enums.Test.EnumDemo.ON
}
枚举类成员
package classs.enums;
enum Animal{
DOG,CAT,BULL,SNAKE,SHEEP;
//构造函数
private Animal(){
System.out.println(this.toString());
}
public void animalInfo(){
System.out.println("animal info");
}
}
public class Test02 {
public static void main(String[] args) {
Animal animal = Animal.CAT;
System.out.println(animal);
animal.animalInfo();
}
}
输出结果:
DOG
CAT
BULL
SNAKE
SHEEP
CAT
animal info
通过对上面方法的分析很容易得出下面的结果。
枚举类中抽象方法的实现:
package classs.enums;
enum Number{
ONE{
@Override
public String getNumber() {
return "ONE";
}
},
TWO{
@Override
public String getNumber() {
return "TWO";
}
},
THREE{
@Override
public String getNumber() {
return "THREE";
}
};
public abstract String getNumber();
}
public class Test03 {
public static void main(String[] args) {
Number number[] = Number.values();
for(Number data : number){
System.out.println(data.getNumber());
}
}
}