Enum枚举入门详解

一般项目中都习惯用单独的一个类定义系统中常用到底常量,可以达到便于集中管理、方便使用的目的:

public class OldConstants {

	public static final int A = 1;
	public static final int B = 2;
	/**
	 * 有什么不好了,大家都这样用了很长时间了,没什么问题啊。
	 * 首先,它不是类型安全的,必须确保是int 
	 * 其次,还要确保它的范围是1和2
	 * 最后,很多时候打印出来的时候,只看到 1 和2 ,

	 */

	public static final String on = "ON";
	public static final String off = "OFF";
}
 

定义枚举

现在要做的是将枚举类当作常量使用,即将相关常量定义到一个枚举类中(这个类继承了Enum):

/**
 * 级别枚举 
 * 看做一个普通的类,不能继承其他类(java是单继承,它已经继承了Enum)
 * 可以添加其他方法,覆盖它本身的方法
 */
public enum GradeEnum {
	A, B, C, D, E, incomplete, F;
}

 使用枚举

public class Student {

	private String firstName;
	private String lastName;
	private GradeEnum gradeEnum;

	public Student(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public String getFullName() {
		return new StringBuffer(firstName).append("").append(lastName)
				.toString();
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	//枚举类型
	public GradeEnum getGradeEnum() {
		return gradeEnum;
	}

	public void setGradeEnum(GradeEnum gradeEnum) {
		this.gradeEnum = gradeEnum;
	}

}

 遍历枚举

	/**
	 * 遍历枚举值
	 */
	public static void listGradeValues() {
		// 增强的for循环
		for (GradeEnum g : GradeEnum.values()
) {// 返回的是由GradeEnum实例组成的数组
			System.out.println("级别有:" + g);
		}
	}

 switch中使用枚举

public static void switchStatement() {
		Student student = new Student("hello", "Enum");
		StringBuffer outPutText = new StringBuffer(student.getFullName());
		switch (student.getGradeEnum()) {
		case A:
			outPutText.append("excelled with a grade of A");
			break;
		case B:
		case C:
			outPutText.append("passed with a grade of").append(student.getGradeEnum().toString());
			break;
		case D:
		case E:
			outPutText.append("failed with a grade of").append(student.getGradeEnum().toString());
			break;
		case incomplete:
			outPutText.append("did not complete the class");
			break;
		default:
			outPutText.append("has a grade of").append(student.getGradeEnum().toString());
		}
		System.out.println(outPutText.toString());
			
	}

 保持良好的编程习惯,应该在switch中添加default语句,如果定义的枚举被人改动了也不会造成错误

/**
 * 级别-枚举类型
 *
 */
public enum GradeEnum {
	A,B,C,D,E,incomplete,F
;
}

  枚举在什么地方适用

一条普遍规则是,任何使用常量的地方,例如目前用switch   代码切换常量的地方。如果只有单独一个值(例如,鞋的最大尺寸,或者笼子中能装猴子的最大数目),则还是把这个任务留给常量吧。

但是,如果定义了一组值,而这些值中的任何一个都可以用于特定的数据类型,那么将枚举用在这个地方最适合不过,比如说性别、颜色、星期等。

public enum SexEnum {

  male, female;

}
 
public enum Color {

  RED, BLUE,GREEN,BLACK;

}
  
public enum WeekDay {

	Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(

	"Friday"), Sat("Saturday"), Sun("Sunday");

	private final String day;

	private WeekDay(String day) {  //构造方法默认是private类型,不能是public

		this.day = day;

	}

	public String getDay() {

		return day;

	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值