关闭

java枚举入门

237人阅读 评论(0) 收藏 举报

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));
	}
}
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:309997次
    • 积分:8715
    • 等级:
    • 排名:第2262名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论