文章目录
- 前言
- 一、枚举类型定义
- 二、访问成员
- 三、遍历
- 四、在switch()中使用枚举
- 五、方法
- 1.内置方法
- 1.1 ordinal()用于返回成员的索引
- 1.2 compareTo()用于比较枚举类型中两个成员的索引值
- 1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常
- 1.4 values()方法以数组方式返回枚举类型中的成员
- 2.构造方法
- 3.自定义方法
- 4.重写方法
- 总结
前言
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()中使用枚举
枚举类中的常量可以在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());
}
}
输出结果:
五、方法
1.内置方法
Java中枚举类型还提供了很多其他的方法,比如ordinal()、compareTo()、valueOf()以及上述提到的values()等。
1.1 ordinal()用于返回成员的索引
//返回成员索引
System.out.println(famulei.LISI.ordinal());
输出结果:
1.2 compareTo()用于比较枚举类型中两个成员的索引值
//成员索引成员索引
System.out.println(famulei.ZHANGSAN.compareTo(famulei.WANGWU));
输出结果:
1.3 valueOf()用于返回枚举类型中指定字符串对应的枚举成员,如果不存在则抛出异常
System.out.println("字符串ZHANGSAN对应的枚举成员:"+famulei.valueOf("ZHANGSAN"));
输出结果:
但是,如果枚举类型中不存在指定的字符串对应的成员,会抛出IllegalArgumentException异常:
System.out.println("字符串XIAOLIU对应的枚举成员:"+famulei.valueOf("XIAOLIU"));
1.4 values()方法以数组方式返回枚举类型中的成员
System.out.println("无格式化输出:"+famulei.values());
System.out.println("格式化输出:"+ Arrays.toString(famulei.values()));
输出结果:
该方法返回了数组的地址,可以使用Arrays.toString()方法进行格式化。
2.构造方法
枚举类型既然是一种特殊的类,那么就有自己的构造方法,使用构造方法可以对枚举类的成员进行属性(也许叫属性不太合适)说明。同时能够实现对成员属性的访问。
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);
}
}
输出结果:
3.自定义方法
可通过自定义方法修改成员属性,例如:
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);
}
}
输出结果:
4.重写方法
上述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中枚举类型的一些简单使用,此外,枚举类型也可用于实现接口等。