赞
踩
Java中的枚举是一种特殊的类,用于存放一组常量,比如一年分为四个季节、车分为机动车和非机动车等。
枚举类型使用关键字enum进行修饰,定义一组常量,定义方式如下:
enum famulei{
/**
* famulei:伐木累
*/
ZHANGSAN,LISI,WANGWU
}
定义一个名为famulei的枚举类型,其中有三个成员,ZHANGSAN,LISI,WANGWU,枚举成员一般使用大写。
访问枚举类的成员可以直接通过枚举类名对成员进行访问:
System.out.println(famulei.ZHANGSAN);
输出结果:
也可以通过使用valus(),使用索引进行访问:
System.out.println(famulei.values()[1]);
输出结果:
枚举类型的遍历可以使用增强型for循环进行遍历,如下:
for (famulei f : famulei.values()) {
System.out.println(f);
}
输出结果:
枚举类中的常量可以在switch()中使用,例如:
package learning; import java.util.Arrays; import java.util.EnumMap; /** * @ClassName: MyEnum * @Description: Enum learning * @author: Lxy * @date: 2021/9/23 11:53 */ public class MyEnum { enum famulei { /** * famulei:伐木累 */ ZHANGSAN, LISI, WANGWU; } public famulei NameChangedEvent(){ famulei fml = famulei.LISI; switch (fml){ case ZHANGSAN: fml= famulei.LISI; break; case LISI: fml=famulei.WANGWU; break; case WANGWU: fml=famulei.ZHANGSAN; break; default: System.out.println("Error!"); } return fml; } public static void main(String[] args) { MyEnum myEnum =new MyEnum(); System.out.println(myEnum.NameChangedEvent()); } }
输出结果:
Java中枚举类型还提供了很多其他的方法,比如ordinal()、compareTo()、valueOf()以及上述提到的values()等。
//返回成员索引
System.out.println(famulei.LISI.ordinal());
输出结果:
//成员索引成员索引
System.out.println(famulei.ZHANGSAN.compareTo(famulei.WANGWU));
输出结果:
System.out.println("字符串ZHANGSAN对应的枚举成员:"+famulei.valueOf("ZHANGSAN"));
输出结果:
但是,如果枚举类型中不存在指定的字符串对应的成员,会抛出IllegalArgumentException异常:
System.out.println("字符串XIAOLIU对应的枚举成员:"+famulei.valueOf("XIAOLIU"));
System.out.println("无格式化输出:"+famulei.values());
System.out.println("格式化输出:"+ Arrays.toString(famulei.values()));
输出结果:
该方法返回了数组的地址,可以使用Arrays.toString()方法进行格式化。
枚举类型既然是一种特殊的类,那么就有自己的构造方法,使用构造方法可以对枚举类的成员进行属性(也许叫属性不太合适)说明。同时能够实现对成员属性的访问。
package learning; import java.util.Arrays; import java.util.EnumMap; /** * @ClassName: MyEnum * @Description: Enum learning * @author: Lxy * @date: 2021/9/23 11:53 */ public class MyEnum { enum famulei { /** * famulei:伐木累 */ ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30); private String sex; private int age; //构造方法 famulei(String sex, int age) { this.sex=sex; this.age=age; } } public static void main(String[] args) { System.out.println("LISI's age:"+famulei.LISI.age); System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex); } }
输出结果:
可通过自定义方法修改成员属性,例如:
package learning; import java.util.Arrays; import java.util.EnumMap; /** * @ClassName: MyEnum * @Description: Enum learning * @author: Lxy * @date: 2021/9/23 11:53 */ public class MyEnum { enum famulei { /** * famulei:伐木累 */ ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30); private String sex; private int age; //构造方法 famulei(String sex, int age) { this.sex=sex; this.age=age; } //自定义方法 public void setSex(String sex){ this.sex=sex; } public void setAge(int age){ this.age=age; } } public static void main(String[] args) { System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex); System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age); famulei.ZHANGSAN.setSex("female"); famulei.ZHANGSAN.setAge(35); System.out.println("ZHANGSAN's sex:"+famulei.ZHANGSAN.sex); System.out.println("ZHANGSAN's age:"+famulei.ZHANGSAN.age); } }
输出结果:
上述Arrays.toString()方法输出枚举类型中的成员,可以对其进行重写,输出每一个成员的属性,例如:
package learning; import java.util.Arrays; import java.util.EnumMap; /** * @ClassName: MyEnum * @Description: Enum learning * @author: Lxy * @date: 2021/9/23 11:53 */ public class MyEnum { enum famulei { /** * famulei:伐木累 */ ZHANGSAN("male",20), LISI("male",25), WANGWU("female",30); private String sex; private int age; //构造方法 famulei(String sex, int age) { this.sex=sex; this.age=age; } //自定义方法 public void setSex(String sex){ this.sex=sex; } public void setAge(int age){ this.age=age; } //重写方法 @Override public String toString(){ return this.sex+"-"+this.age; } } public static void main(String[] args) { System.out.println(Arrays.toString(famulei.values())); } }
输出结果:
本文主要简单介绍Java中枚举类型的一些简单使用,此外,枚举类型也可用于实现接口等。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。