java枚举入门

原创 2013年12月04日 10:20:28

java 5新增了一个enum关键字(它与class、interface关键字的地位相同),用以定义枚举类。枚举类是一种特殊的类,它一样可以有自己的Field、方法,可以实现一个或者多个接口,也可以定义自己的构造器。

 

枚举类与普通的类有如下区别:

1、枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承了Object类。其中Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

2、使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能被继承

3、枚举类的构造器只能使用private访问控制符修饰,如果省略了访问控制符,则默认是private修饰,如果指定访问控制符只能是private

4、枚举类的所有实例必须在枚举类的第一行显示列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显示添加

 
public enum SeasonEnum{
	//在第一行列出4个枚举实例,用逗号隔开,最后一个用分号
	SPRING,SUMMER,FALL,WINTER;
}
 
public class EnumTest{
	public void jduge(SeasonEnum s){
		//switch语句里表达式可以是枚举值
		switch(s){
			case SPRING:
				System.out.println("春天");
				break;
			case SUMMER:
				System.out.println("夏天");
				break;
			case FALL:
				System.out.println("秋天");
				break;
			case WINNER:
				System.out.println("冬天");
				break;
			
		}
	}
	
	public static void main(String[]args){
		for(SeasonEnum s: SeasonEnum.values()){
			System.out.println(s);
		}
	}
	new EnumTest.judge(SeasonEnum.SPRING);
}
 
运行结果:
SPRING
SUMMER
FALL
WINTER
春暖花开,正好踏青
public enum Gender 
{
	//此处的枚举值必须调用对应构造器来创建
	MALE("男"),FEMALE("女");
	private String name;
	//枚举类的构造器只能使用private修饰
	private Gender(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		 return this.name;
	}
}
 
public class TestGender
{
	public static void main(String[] args) 
	{
		Gender g = Enum.valueOf(Gender.class , "FEMALE");
		System.out.println(g + "代表:" + g.getName());
	}
}
 
运行结果:
FEMALE代表:女
在枚举中列出枚举值时,实际上就是调用构造器创建枚举对象,只是这里无需使用new关键字,也无需显示调用构造器。前面列出的枚举值无需传入参数,甚至无需使用括号,仅仅是因为前面的枚举类包含无参的构造器。
上面的例子实际上等同于:
public static final Gender MAIL = new Gender("男");
public static final Gender FEMAIL = new Gender("女");
 
枚举实现接口的例子
public interface GenderDesc
{
	void info();
}

public enum Gender implements GenderDesc
{
	//此处的枚举值必须调用对应构造器来创建
	MALE("男")
	{
		public void info()
		{
			System.out.println("这个枚举值代表男性");
		}
	},
	FEMALE("女")
	{	
		public void info()
		{
			System.out.println("这个枚举值代表女性");
		}
	};
	private String name;
	//枚举类的构造器只能使用private修饰
	private Gender(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		 return this.name;
	}
	/*
	public void info()
	{
		System.out.println("这是一个用于用于定义性别属性的枚举类");
	}
	*/
}
 
枚举定义抽象方法
public enum Operation2
{
	PLUS
	{
		public double eval(double x , double y)
		{
			return x + y;
		}
	}, 
	MINUS
	{
		public double eval(double x , double y)
		{
			return x - y;
		}
	}, 
	TIMES
	{
		public double eval(double x , double y)
		{
			return x * y;
		}
	}, 
	DIVIDE
	{
		public double eval(double x , double y)
		{
			return x / y;
		}
	};
	//为枚举类定义一个抽象方法,这个抽象方法由不同枚举值提供不同的实现
	public abstract double eval(double x, double y);
	public static void main(String[] args)
	{
		System.out.println(Operation.PLUS.eval(3, 4));
		System.out.println(Operation.MINUS.eval(5, 4));
		System.out.println(Operation.TIMES.eval(5, 4));
		System.out.println(Operation.DIVIDE.eval(5, 4));
	}
}
 

相关文章推荐

java入门学习(13)—枚举类定义及使用初步

1、什么是枚举类?       枚举类是一种实例是已知而且固定的类。 2、如何定义一个枚举类型?以及初步使用? 语法:【修饰符】 enum 枚举名 { //必须要在第一行立刻列出所有的枚举实...

Java_Pro1_枚举类入门_08_08

SeasonEnum.java/* * 源自李刚 * 稍作修改,加了注释。 * 详细讲解请购买原书。 * * 2016.08.08 *//* * 1,枚举的关键字enum在java中是...
  • kao2406
  • kao2406
  • 2016年08月08日 19:49
  • 118

JAVA入门基础--浅谈枚举Enum类型

Java枚举Enum在实际项目中也使用较为广泛的。最常用的是定义性别,如: public enum Sex { MAN,WOMEN } 枚举类型是编程中的一个普通用语,可理解为有限元素的集合。 ...
  • x_panda
  • x_panda
  • 2013年12月12日 21:24
  • 601

Java基础入门-Java枚举

Java枚举

swift菜鸟入门视频教程-08-枚举

  • 2014年06月30日 23:27
  • 26KB
  • 下载

枚举java基础知识点

  • 2017年11月03日 12:39
  • 27KB
  • 下载

Ember.js 入门指南——枚举(enumerables)

在Ember中,枚举是包括若干子对象的对象,并且提供了很多的Ember.Enumerable API获取所包含的子对象。我们常见的枚举都是基于原生的javascript数组实现的,Ember扩展了其中...

Java试题-1:交通灯枚举

  • 2015年06月08日 00:39
  • 30KB
  • 下载

列举java 枚举相关信息

  • 2011年11月16日 13:29
  • 151KB
  • 下载

C语言入门教程 (十九) 联合和枚举

联合(union): 一、联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名 { 数据类...
  • maidanm
  • maidanm
  • 2012年07月28日 19:48
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java枚举入门
举报原因:
原因补充:

(最多只允许输入30个字)