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 基础总结 -- enum 枚举的基础使用

package com.zghw.base.enumx; /** * 枚举类型定义 * @author zghw * */ //使用enum关键字定义一个枚举 public enum Spi...
  • zghwaicsdn
  • zghwaicsdn
  • 2016年02月10日 04:03
  • 913

JAVA 枚举使用详解

问题引入:如何限制用户输入class Student{ private String name; // 考试等级 private String grade; //等级只能是AB...
  • guanhang89
  • guanhang89
  • 2016年08月20日 18:41
  • 2044

Java 枚举:switch 支持枚举

JDK1.5 才开始有枚举类型,同时可爱的 Java 组织丰富了 switch 语句:支持枚举。 定义一个枚举类 Color public enum Color { RED("re...
  • AndroidBluetooth
  • AndroidBluetooth
  • 2012年09月05日 18:04
  • 11305

c# 入门级Java对比 5 —— 结构、枚举

一。特点 1. 结构为值类型,不能为null,只在栈中存储数据。 2. 结构隐式密封。 3. 结构赋值为把一个结构的值赋值给另一个结构,不像引用类型。 4. 可以有构造函数,静态构造函数,但不...
  • csleenng
  • csleenng
  • 2016年08月25日 17:18
  • 278

Java基础之枚举妙用

对于枚举,初学Java的时候可能我们就已经接触过了,但是在毕业前,其实一直都不知道真正工作里面枚举是怎么用的,枚举有什么用?接下来,博主就介绍枚举在实际工作中的一种使用场景,本文只适合初级的小菜鸟看哈...
  • u013142781
  • u013142781
  • 2016年01月06日 19:00
  • 4066

Java 使用 switch 语句和枚举类型

switch可以与枚举类型搭配使用,从JDK 7开始可以针对字符串使用switch条件语句
  • shuiCSDN
  • shuiCSDN
  • 2017年05月15日 22:48
  • 349

java枚举的实际应用案例

java枚举知识点来自jdk5.0的版本带来的新特性,下面讲解的内容分别是:  1.枚举类型    2.枚举中的参数、方法    3.遍历 在实际中对于一些基本固定的值用枚举比较好,当然...
  • fengchao2016
  • fengchao2016
  • 2016年10月08日 14:32
  • 2805

Java 枚举enum 使用详解

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集...
  • zcback1
  • zcback1
  • 2016年03月30日 14:30
  • 9589

java 枚举(面试题)基本知识总结即简例

枚举 jdk1.5以后引入 关键字 enmu enmu Apple{     Jonathan,   GoldenDel, RedDel }  枚举常量被隐式声明为Apple的公有静态 fi...
  • beloveddarling
  • beloveddarling
  • 2016年03月21日 21:06
  • 576

java推荐使用枚举定义常量

假如有一笔业务需要审核,审核状态分:未审核,审核中,审核通过,审核不通过。我们在程序里是否可以直接这么写: if(state==1){//1代表未操作 //操作 }else{ //...... } 将...
  • scandly_java
  • scandly_java
  • 2016年06月15日 16:36
  • 16221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java枚举入门
举报原因:
原因补充:

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