当前位置:首页 > 开发 > 编程语言 > Java > 正文

java中枚举类型的使用

发表于: 2015-03-03   作者:xiao1zhao2   来源:转载   浏览:
摘要: 枚举类型是j2se在1.5引入的新的类型,通过关键字enum来定义,常用来存储一些常量.   1.定义一个简单的枚举类型 public enum Sex { MAN, WOMAN }   枚举类型本质是类,编译此段代码会生成.class文件.通过Sex.MAN来访问Sex中的成员,其返回值是Sex类型.   2.常用方法 静态的values()方

枚举类型是j2se在1.5引入的新的类型,通过关键字enum来定义,常用来存储一些常量.

 

1.定义一个简单的枚举类型
public enum Sex {
	MAN,
	WOMAN
}

 

枚举类型本质是类,编译此段代码会生成.class文件.
通过Sex.MAN来访问Sex中的成员,其返回值是Sex类型.

 

2.常用方法

静态的values()方法,可获取所有成员变量并以数组形式返回;从Object继承的toString()方法被重写;静态的valueOf()方法,可以尝试将指定的String类型转换为枚举类型;ordinal()方法,获取枚举成员的索引;compareTo()方法,比较两个枚举成员的顺序.

public class EnumDemo2 {
	public static void main(String[] args) {
		for (Sex sex : Sex.values()) {
			System.out.println(sex);
		}
	}
}

 

执行此段代码,可遍历输出枚举中的所有成员,运行结果:
MAN
WOMAN

 

3.在switch中应用

在switch中使用枚举类型,增加了程序的可读性.

public class EnumDemo3 {
	private enum Sex {
		MAN, WOMAN
	}

	public static void showSex(Sex sex) {
		switch (sex) {
		case MAN:
			System.out.println("男");
			break;
		case WOMAN:
			System.out.println("女");
			break;
		}
	}

	public static void main(String[] args) {
		showSex(Sex.WOMAN);
	}
}

 

运行结果:

 

此段代码中showSex()方法接收的变量必须是Sex枚举类型,如果输入其他类型的变量,编译器会报告错误;如果上述switch中加入了不属于Sex中的枚举值,编译器也会报告错误.注意,此段代码中枚举声明方式与声明内部类相同,编译完成后,会产生额外的.class文件,在本例中生成的是EnumDemo3$Sex.class.

 

4.深入枚举类型

使用enum定义的枚举类型都是继承java.lang.Enum类,每一个成员都是枚举类型的一个实例,默认是final的,同时也是public和static的,与类中的静态常量相同,可以通过类名直接使用.

4.1.在枚举中定义属性和方法
public enum Sex {
	MAN, WOMAN;
	public String name;

	public void show() {
		System.out.println(this.name);
	}
}

 

注意,枚举成员必须写在最前面,否则编译出错.

 

4.2.构造方法
public enum Sex {
	MAN, WOMAN;
	public String name;

	private Sex() {

	}

	private Sex(String name) {
		this.name = name;
	}
}

 

枚举类型的构造方法必须是私有的,可以形成重载;如果枚举中只含有一个成员,则与单例模式相似.

 

4.3.成员匿名类

每一个成员可以调用构造方法,定义属性和方法(暂时不知有何用处),重写枚举中的方法.

public enum Sex {
	MAN() {
		public void show() {
			System.out.println("man");
		}
	},
	WOMAN("name") {
		public int age;

		public void test() {

		}
	};

	private Sex() {

	}

	private Sex(String name) {
	}

	public void show() {
		System.out.println("sex");
	}
}

public class EnumDemo4 {
	public static void main(String[] args) {
		for (Sex sex : Sex.values()) {
			sex.show();
		}
	}
}

 

编译完成后,会生成Sex$1.class和Sex$2.class文件,运行结果:
man
sex

 

5.实现接口

由于枚举已经继承Enum类,不能在继承其他类,但可以实现接口.

public interface I {
	void i();
}

public enum Sex implements I {
	MAN() {
		public void i() {
			System.out.println("man");
		}
	},
	WOMAN() {
	};

	public void i() {
		System.out.println("sex");
	}
}

public class EnumDemo5 {
	public static void main(String[] args) {
		for (Sex sex : Sex.values()) {
			sex.i();
		}
	}
}

 

运行结果:
man
sex

 

6.在集合中使用

java.util.EnumSet和java.util.EnumMap是两个枚举集合.
EnumSet保证元素不重复;EnumMap中的key值是Enum类型,value值可以使任意类型.

 

小结:枚举类型与接口类型类似,是特殊的类,用来存储一些常量的集合.在switch中应用可提高程序的可读性.所有的枚举类型都继承自Enum类,可以有私有的构造方法以及属性和方法.可以实现接口,也可以在集合中应用.

java中枚举类型的使用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
枚举类定义如下: public enum Status { SCUUESS("1", "成功"), FAILED("2", "失败"); private Stri
引言 今天做项目想用一个枚举类型,本来想这样写的: enum Move {left, right, up, down}; Move mov
引言 今天做项目想用一个枚举类型,本来想这样写的: enum Move {left, right, up, down}; Move mov
引言 今天做项目想用一个枚举类型,本来想这样写的: enum Move {left, right, up, down}; Move mov
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素
public enum Light { RED, GREEN, YELLOW; } 我们只能够表示出红灯、绿灯和黄灯,但是具体的值我们
通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚
自己写的C++类型枚举量,可以使用类型识别取代模板,绑定枚举量和多组调用函数,在调用阶段只要指定
1、基本的enum特性 关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号