枚举

发表时间:2017-05-10 14:09:20 浏览量( 21 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、什么是枚举

枚举类型主要提供固定的、规范化的一些常数(public static final),是一种自定义的基本数据类型,当我们需要声明一组命名的常数,而且这个变量只有几种可能的取值时,那么就可以将它定义为枚举类型。常见的有简单的枚举:

二、枚举的应用

枚举一般可以作为替换我们一直经常使用常量的用法,使用枚举会是代码更加清晰,容易维护,而且枚举类型支持switch、可以定义方法等等。所以枚举比常量更好用。

比如我们下面这个例子:

“场地有场地id、场地名称cname、场地描述cname和状态cond等几个属性,其中场地的状态使用:0 表示空闲,1 表示在用,2 表示维护。只能有这三个状态选项”。

那么我们如何设计一个javaBean表示上面这个场地对象呢?基本属性应该没有问题,关键是状态如何描述。

1、使用常量。为了更好的表示和提高代码的阅读性,我们可以定义几个常量表示场地的状态的几个选择,代码如下:

public class Space {

	// 0表示空闲 1表示在用 2表示维护
	public static final int FREE=0;
	public static final int USING=1;
	public static final int REPIRE=2;

	private int id;
	private String cname;
	private String cdesc;
	private int cond;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public String getCdesc() {
		return cdesc;
	}

	public void setCdesc(String cdesc) {
		this.cdesc = cdesc;
	}

	public int getCond() {
		return cond;
	}

	public void setCond(int cond) {
		this.cond = cond;
	}

}

我们定义场地对象时候,设置场地的状态就可以使用常量的表示,不用使用无意义的数字了,代码如下:

 public class Run {
	
	public static void main(String[] args) {
		
		Space s1=new Space();
		s1.setId(1);
		s1.setCname("场地1");
		s1.setCdesc("羽毛球场地");
		
		s1.setCond(Space.FREE);
		
	}

}

使用常量对于少数的几个状态还是很实用的,但是使用常量也有几个问题:不利于代码的维护,代码重用性不强;如果状态很多,那么定义的常量也会很多;并不能限制状态就只能有这几个选项,比如上面的例子我们设置状态数据为100:s1.setCond(100),代码也没有错误,但是这么明显不符合逻辑。使用枚举可以很好的解决上面的这些问题。

2、改用枚举。定义一个枚举类。

public enum State {

	Free, Using, Repair;

}

修改Space类的cond属性的类型为该枚举类型。删除原来的所有的常量定义。代码如下:

  public class Space {

	// 0表示空闲 1表示在用 2表示维护
	/*public static final int FREE=0;
	public static final int USING=1;
	public static final int REPIRE=2;*/

	private int id;
	private String cname;
	private String cdesc;
	private State cond;//修改为枚举类型

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getCname() {
		return cname;
	}

	public void setCname(String cname) {
		this.cname = cname;
	}

	public String getCdesc() {
		return cdesc;
	}

	public void setCdesc(String cdesc) {
		this.cdesc = cdesc;
	}

	public State getCond() {
		return cond;
	}

	public void setCond(State cond) {
		this.cond = cond;
	}

}

这时候在定义Space对象的cond属性就只能是枚举的几个属性了。那么状态原来几个数字表示如何获得呢?下面我们可以为这个枚举添加方法。

3、为枚举添加方法。

修改枚举类

public enum State {
	//调用枚举的构造方法
	Free(0),Using(1),Repair(2),Other(3);
	
	public int value;
	
	State(int value){
		this.value=value;
	}

}

在Run类中就可以通过value获得对应的数字了。

public class Run {
	public static void main(String[] args) {
		Space s1=new Space();
		s1.setId(1);
		s1.setCname("场地1");
		s1.setCdesc("羽毛球场地");
		
		s1.setCond(State.Repair);//限制只能是枚举的几个选项
		
		System.out.println(s1.getCond().value);
		
	}
}