Think in java(四)枚举类enum的基本特性、构造方法与方法覆盖、Switch语句中的enum运用

一、基本enum特性

package test;

enum Fruit{PEACH,LEMON,BANANA,Apple}

public class EnumClasstest {
	public static void main(String[] args){
		for(Fruit f:Fruit.values()){
			System.out.println(f+" ordinal "+f.ordinal());
			System.out.println(f.compareTo(f.LEMON)+" ");
			System.out.print(f.equals(f.LEMON)+" ");
			System.out.println(f==f.LEMON);
			System.out.println(f.name());
			System.out.println("-------------------");}
		for(String s:"PEACH,LEMON,BANANA".split(",")){
			Fruit ff = Enum.valueOf(Fruit.class, s);
			System.out.println(ff);
		}
	}
	
}

常用方法

  • values():返回包含成员的数组
  • ordinal():返回序号
  • getDeclaringClass(),返回所属的enum类
  • compareTo:返回比较的数值
  • name():返回成员名字
  • valueOf():返回带制定名称与指定类型的枚举常量

输出结果:

PEACH ordinal 0
-1 
false false
PEACH
-------------------
LEMON ordinal 1
0 
true true
LEMON
-------------------
BANANA ordinal 2
1 
false false
BANANA
-------------------
Apple ordinal 3
2 
false false
Apple
-------------------
PEACH
LEMON
BANANA          

二、向enum中添加构造方法与方法

package enumtest;

public enum EnumConstructor {
	SPRING("人间四月芳菲尽,山寺桃花始盛开."),
	SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."),
	AUTOMU("无边落木萧萧下,不尽长江滚滚来."),
	WINTER("忽如一夜春风来,千树万树梨花开.");
	private String description;
	private EnumConstructor(String description){
		this.description = description;
	}
	public String getdescription(){
		return description;
	}
	
	public static void main(String[] args){
		for(EnumConstructor e:EnumConstructor.values()){
			System.out.println(e.name()+":"+e.getdescription());
		}
	}
}
//输出:
SPRING:人间四月芳菲尽,山寺桃花始盛开.
SUMMER:梅子金黄杏子肥,麦花雪白菜花稀.
AUTOMU:无边落木萧萧下,不尽长江滚滚来.
WINTER:忽如一夜春风来,千树万树梨花开.
必须要在enum之后定义方法和属性,这里的description声明为private实际上没有什么用,因为我们不能在enum定义完成之后再使用其构造器。

三、重载toString方法

package enumtest;

public enum EnumConstructor {
	SPRING("人间四月芳菲尽,山寺桃花始盛开."),
	SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."),
	AUTOMN("无边落木萧萧下,不尽长江滚滚来."),
	WINTER("忽如一夜春风来,千树万树梨花开.");
	private String description;
	private EnumConstructor(String description){
		this.description = description;
	}
	public String getdescription(){
		return description;
	}
	public String toString(){
		String id = this.name();
		String lower = id.substring(1).toLowerCase();
		return id.charAt(0)+lower+":"+description;
	}
	public static void main(String[] args){
		for(EnumConstructor e:EnumConstructor.values()){
			System.out.println(e.name()+":"+e.getdescription());
		}
		System.out.println();
		for(EnumConstructor e:EnumConstructor.values()){
			System.out.println(e);
		}
	}
}
//输出结果:
SPRING:人间四月芳菲尽,山寺桃花始盛开.
SUMMER:梅子金黄杏子肥,麦花雪白菜花稀.
AUTOMN:无边落木萧萧下,不尽长江滚滚来.
WINTER:忽如一夜春风来,千树万树梨花开.

Spring:人间四月芳菲尽,山寺桃花始盛开.
Summer:梅子金黄杏子肥,麦花雪白菜花稀.
Automn:无边落木萧萧下,不尽长江滚滚来.
Winter:忽如一夜春风来,千树万树梨花开.

这里用到的几个字符串方法

  • charAt()
  • subString(int begin)
  • toLowerCase()
相关博文: Java语言程序设计-基础篇(五)字符串

四、Switch语句中的enum

package enumtest;

enum Season{
	SPRING("人间四月芳菲尽,山寺桃花始盛开."),
	SUMMER("梅子金黄杏子肥,麦花雪白菜花稀."),
	AUTOMN("无边落木萧萧下,不尽长江滚滚来."),
	WINTER("忽如一夜春风来,千树万树梨花开.");
	private String description;
	private Season(String description){
		this.description = description;
	}
	public String getdescription(){
		return description;
	}
	public String toString(){
		String id = this.name();
		String lower = id.substring(1).toLowerCase();
		return "now is "+id.charAt(0)+lower+":"+description;
	}}

public class EnumSwitch {
	Season season = Season.SPRING;
	public void change(){
		switch(season){
		case SPRING: season=Season.SUMMER;break;
		case SUMMER: season=Season.AUTOMN;break;
		case AUTOMN: season=Season.WINTER;break;
		case WINTER: season=Season.SPRING;break;
		}
	}
	public static void main(String[] args){
		EnumSwitch e = new EnumSwitch();
		for(int i=0;i<12;i++){
			System.out.println(e.season);
			e.change();
		}
		
	}
}
//输出结果:
now is Spring:人间四月芳菲尽,山寺桃花始盛开.
now is Summer:梅子金黄杏子肥,麦花雪白菜花稀.
now is Automn:无边落木萧萧下,不尽长江滚滚来.
now is Winter:忽如一夜春风来,千树万树梨花开.
now is Spring:人间四月芳菲尽,山寺桃花始盛开.
now is Summer:梅子金黄杏子肥,麦花雪白菜花稀.
now is Automn:无边落木萧萧下,不尽长江滚滚来.
now is Winter:忽如一夜春风来,千树万树梨花开.
now is Spring:人间四月芳菲尽,山寺桃花始盛开.
now is Summer:梅子金黄杏子肥,麦花雪白菜花稀.
now is Automn:无边落木萧萧下,不尽长江滚滚来.
now is Winter:忽如一夜春风来,千树万树梨花开.

注意不要忘记switch语句中的break,否则season将一直是spring。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值