Java SE学习之枚举总结

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享。

最近在看Java基础方面的书的时候,又遇到了枚举的介绍。在网上查了一些资料,对这些资料进行一些总结。

用法一:常量

package meiju;
/**
 *
* @ClassName: Color
* @Description: 枚举变量的常量用法
* @author zhangjunshuai [email protected]
* @date 2014-11-16 下午07:29:40
*
 */
public enum Color {
	RED,GREEN,BLANK,YELLOW
}

用法二:switch

package meiju;
/**
 *
* @ClassName: Signal
* @Description: 枚举的switch用法
* @author zhangjunshuai [email protected]
* @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 [email protected]
* @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 [email protected]
* @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 [email protected]
* @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 [email protected]
* @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

时间: 2024-08-06 07:55:36

Java SE学习之枚举总结的相关文章

java SE学习之线程同步(详细介绍)

       java程序中可以允许存在多个线程,但在处理多线程问题时,必须注意这样一个问题:               当两个或多个线程同时访问同一个变量,并且一些线程需要修改这个变量时,那么这个程序是该如何执行?              也就是先访问这个变量还是先修改这个变量.              在学习线程的这段时间里,我也一直被这个问题所困扰!但是今天终于算是搞明白了.              于是将这些好的列子一一列举出来,分享一下. (1)什么是线程同步 ?      

Java SE学习之printf 日期转换符

本文是学习网络上的文章时的总结,感谢大家无私的分享. System.out.printf()方法能够对日期做处理输出. 相应列表 转换符 类型 举例 c 完整的日期和时间 Mon Feb 09 18:05:11 PST 2004 F ISO 8061日期 2004-02-09 D 美国格式的日期 02/09/2004 T 24小时时间 18:03:23 r 12小时时间 05:03:23 pm R 24小时时间没有秒 18:05 Y 4位数字的年(前面补0) 2004 y 年的后两位数字(前面补

Java SE学习之数组——匿名数组和不规则数组

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享. 最近偶然遇到了数组的问题,学习了匿名数组和不规则数组. 匿名数组适用于只使用一次的情况:不规则数组适用是每行数据总数不确定的情况. 下面贴上我的小例子 package SE; import java.util.Random; /** * <p> * Description: 此方法是对匿名数组和不规则数组的学习 * </p> * @author zhangjunshuai * @version 1.0 * Cr

Java SE学习之System.getProperties

本文是学习网络上的文章时的总结,感谢大家无私的分享. Java提供的java System.getProperties()方法是获取运行环境的系统参数的,综合了网上各位大神的帖子我总结出一些可用属性. java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java

Java SE学习之Random

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享. 昨天在项目中想使用几个随机数,结果使用Random时居然出现随机数相同的情况,忍不住查了些资料. 现将代码总结如下: package SE; import java.util.Random; public class RandomUnit { /** * * <p> * 无种子参数的构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数, * 然后使用这个种子数构造Random对象. * </p> *

Java SE学习之方法参数的使用

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享. Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递. 在Java程序设计语言中,方法参数的使用情况: 1.一个方法不能修改一个基本数据类型的参数(即数值型和布尔型): 2.一个方法可以改变一个对象参数的状态: 3.一个方法不能实现让对象参数引用一个新的对象. 下面是测试代码 package SE; public class ParamTest { /** * <p> * </p> *

java se学习(一)

环境:java jdk1.8+eclipse 1.HelloWorld public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World"); } } 在eclipse下编译运行正常输出Hello World,但是在dos,进入到工程src目录下执行 javac HelloWorld.java java  HelloWorld a.执行java 命令时,不可

Java SE学习笔记-IO

1.主要内容 2.详细内容 2.1.IO流概念 (1)用来处理设备(硬盘,控制台,内存)之间的数据: (2)Java中对数据的操作都是通过流的方式: (3)Java中用于操作流的类都是放在IO包内: (4)按照流操作的数据类型不同,可以分为字节流和字符流:而字符流是为了方便中文的操作而来的: (5)按照流的流向不同分为:输入流和输出流. 2.2.IO流常用基类 2.2.1.字节流的抽象基类 完整图如下图所示: 其中重点的类如下图所示: (1)InputStream:输入字节流,字节读取流抽象类:

java se学习(二)数组与字符串、数据类型转

一.数组与字符串特点 1.数组一旦初始化,其容量即限定 2.字符串一旦初始化,其长度是固定的,内容也是固定的,如果要改变值,只能放弃原来的内存空间,重新申请内存空间. 二. 数据类型转换的种类 java数据类型的转换一般分三种,分别是: (1). 简单数据类型之间的转换 (2). 字符串与其它数据类型的转换 (3). 其它实用数据类型转换 三. 简单数据类型之间的转换 在Java中整型.实型.字符型被视为简单数据类型,这些类型由低级到高级分别为 (byte,short,char)--int--l