Java SE学习之枚举总结
本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享。
最近在看Java基础方面的书的时候,又遇到了枚举的介绍。在网上查了一些资料,对这些资料进行一些总结。
用法一:常量
package meiju;
/**
*
* @ClassName: Color
* @Description: 枚举变量的常量用法
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:29:40
*
*/
public enum Color {
RED,GREEN,BLANK,YELLOW
}
用法二:switch
package meiju;
/**
*
* @ClassName: Signal
* @Description: 枚举的switch用法
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:33:32
*
*/
enum Signal{
GREEN,YELLOW,RED
}
public class EnumForswitch {
Signal color = Signal.RED;
public void change(){
switch(color){
case RED:
System.out.println("红色");
break;
case YELLOW:
System.out.println("金黄色");
break;
case GREEN:
System.out.println("绿色");
break;
default:
System.out.println("最后");
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
用法三:枚举中的方法
package meiju;
/**
*
* @ClassName: ColorMthod
* @Description: 枚举的方法
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:35:09
*
*/
enum ColorMthod{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
private String name;
private int index;
//枚举的构造方法 介个是怎么一回事呢?
private ColorMthod(String name,int index){
this.name = name;
this.index = index;
}
//普通方法
public static String getName(int index){
for(ColorMthod c : ColorMthod.values()){
if(c.getIndex()== index){
System.out.println(c.name);
return c.name;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
public class EnumMethod {
/**
* @param args
*/
public static void main(String[] args) {
ColorMthod.getName(1);
}
}
用法四:覆盖枚举方法
package meiju;
/**
*
* @ClassName: EnumMethodOverride
* @Description: 覆盖方法
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:37:04
*
*/
public class EnumMethodOverride {
public enum ColorMethod{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
private String name;
private int index;
private ColorMethod(String name,int index){
this.name = name;
this.index = index;
}
@Override
public String toString(){
return this.index+"_"+this.name;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(ColorMethod.RED);
}
}
用法五:实现接口
package meiju;
/**
*
* @ClassName: Behavior
* @Description: 枚举实现接口
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:39:28
*
*/
interface Behavior{
void print();
String getInfo();
}
enum ColorInterface implements Behavior{
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
private String name;
private int index;
private ColorInterface(String name,int index){
this.name = name;
this.index = index;
}
public String getInfo(){
return this.name;
}
public void print(){
System.out.println(this.index+":"+this.name);
}
}
public class EnumInterface {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ColorInterface.RED.print();
}
}
用法六:枚举集合的使用
package meiju;
import java.util.EnumMap;
import java.util.EnumSet;
/**
*
* @ClassName: EnumLIghtTest
* @Description: 枚举的遍历
* @author zhangjunshuai junshuaizhang@163.com
* @date 2014-11-16 下午07:41:13
*
*/
public class EnumLIghtTest {
//1.定义枚举类型
public enum Light{
//2.利用构造参数传参
RED(1),GREEN(3),YELLOW(2);
//定义私有变量
private int nCode;
// 构造函数,枚举类型只能为私用
private Light(int _nCode){
this.nCode = _nCode;
}
public String toString(){
return String.valueOf(this.nCode);
}
}
/**
* @param args
*/
public static void main(String[] args) {
//1.遍历枚举类型
System.out.println("演示枚举类型的遍历……");
testTranversalEnum();
//2.EnumMap对象的使用
System.out.println("演示EnumMap对象的使用和遍历……");
testEnumMap();
//3.演示EnumSet的使用
System.out.println("演示EnumSet对象的使用和遍历……");
testEnumSet();
}
/**
* 演示枚举类型的遍历
*/
private static void testTranversalEnum(){
Light[] allLight = Light.values();
for(Light aLight : allLight){
System.out.println("当前灯name:"+aLight.name());
System.out.println("当前灯ordinal:"+aLight.ordinal());
System.out.println("当前灯:"+aLight);
}
}
/**
* 演示EnumMap的使用,EnumMao跟HashMap的使用差不多,只是key值是枚举类型
*/
private static void testEnumMap(){
//1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
EnumMap<Light,String> currEnumMap = new EnumMap<Light, String>(Light.class);
currEnumMap.put(Light.RED, "红灯");
currEnumMap.put(Light.GREEN, "绿灯");
currEnumMap.put(Light.YELLOW, "黄灯");
for(Light aLight :Light.values()){
System.out.println("[key="+aLight.name()+",value="
+currEnumMap.get(aLight)+"]");
}
}
/**
* 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容
*
* 可以使用allOf方法
*/
private static void testEnumSet(){
EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);
for(Light aLightSetElement :currEnumSet){
System.out.println("当前EnumSet中数据为:"+aLightSetElement);
}
}
}
用法七:用接口组织枚举
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
枚举相对于final static来说,枚举可以减少变量的定义,在switch中的使用有利于代码的执行效率,同时枚举可以自定义内置方法,还有就是枚举可以使用遍历方法。虽然枚举有一些优势但是枚举不是继承。
参考:
http://www.iteye.com/topic/1116193
http://blog.csdn.net/p106786860/article/details/11516269
还没有评论,来说两句吧...