java枚举基础了解

java枚举基础了解

从JDK1.5开始,java提供了新的关键字enum来实现枚举类型。

1.什么枚举?有什么作用?

枚举相当于一个特殊的类,无法直接创建对象,只能在枚举类内部声明固定个数的枚举对象,本质上是一个私有化了构造方法的抽象类。枚举出现之前,程序员总是要手动实现枚举的功能。这么说你可能不大理解,来看一下具体实例。

2.伪代码实例

class Week{

	public static final Week Mon = new Week();
	public static final Week Tue = new Week();
	public static final Week Wed = new Week();
	public static final Week Thu = new Week();
	public static final Week Fri = new Week();
	public static final Week Sta = new Week();
	public static final Week Sun = new Week();

	private Week(){
	}
}

如上代码,我们想要写一个代表星期的类Week,对外提供七个实例对象,分别代表周一到周日,首先需要私有化构造方法,目的是不让外部直接new对象,然后在Week类中声明我们需要的七个代表星期的属性,用final修饰是为了防止外界通过Week.Mon=null将属性的值更改,这样我们就初步完成了代表星期的类Week的代码。
这是JDK1.5之前人们的写法,JDK1.5之后,枚举出现了,用枚举实现上述功能,代码如下:

enum WeekEnum{
	Mon,Tue,Wed,Thu,Fri,Sta,Sun
}

如上,使用枚举简单一行代码就实现了该功能。枚举的出现大大简化了代码,所以说枚举出现之前,人们都是手动实现枚举的功能。

3.枚举的其他特点

3.1枚举可以拥有属性,也可以有构造方法,构造方法必须是私有的
我们还是用对比方法来介绍
以前的逻辑代码:

class Week{

	public static final Week Mon = new Week(1);
	public static final Week Tue = new Week(2);
	public static final Week Wed = new Week(3);
	public static final Week Thu = new Week(4);
	public static final Week Fri = new Week(5);
	public static final Week Sta = new Week(6);
	public static final Week Sun = new Week(7);

	public int day = 0;
	private Week(int day){
		this.day = day;
	}
}

用枚举表示:

enum WeekEnum{

	Mon(1),Tue(2),Wed(3),Thu(4),Fri(5),Sta(6),Sun(7)
	public int day = 0;
	private WeekEnum(int day){
		this.day = day;
	}
}

一样的功能,枚举的代码依旧如此简洁,枚举里出现构造函数需要注意一点,就是私有化构造函数。

3.2枚举可以拥有普通方法
我们想通过getDay()方法获取day的属性值
以前的逻辑代码:

class Week{

	public static final Week Mon = new Week(1);
	public static final Week Tue = new Week(2);
	public static final Week Wed = new Week(3);
	public static final Week Thu = new Week(4);
	public static final Week Fri = new Week(5);
	public static final Week Sta = new Week(6);
	public static final Week Sun = new Week(7);

	private int day = 0;
	private Week(int day){
		this.day = day;
	}
	public int getDay(){
		return this.day;
	}
}

用枚举表示:

enum WeekEnum{

	Mon(1),Tue(2),Wed(3),Thu(4),Fri(5),Sta(6),Sun(7)
	private int day = 0;
	
	private WeekEnum(int day){
		this.day = day;
	}
	
	public int getDay(){
		return this.day;
	}
}

3.3枚举可以拥有抽象方法
以前的逻辑代码:

abstract class Week{

	public static final Week Mon = new Week(1){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	};
	public static final Week Tue  = new Week(2){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	};
	public static final Week Wed = new Week(3){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	};
	public static final Week Thu  = new Week(4){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	};
	public static final Week  Fri   = new Week(5){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	};
	public static final Week Sta   = new Week(6){
		@Override
		public boolean  isRestDay(){
			return true;
		}
	};
	public static final Week Sun  = new Week(7){
		@Override
		public boolean  isRestDay(){
			return true;
		}
	};

	private int day = 0;
	private Week(int day){
		this.day = day;
	}
	public int getDay(){
		return this.day;
	}
	public abstract boolean isRestDay();
}

因为是抽象类,所以使用匿名内部类,不熟悉的小伙伴可以查阅匿名内部类相关文章。
用枚举表示:

enum WeekEnum{

	Mon(1){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	},
	Tue(2){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	},
	Wed(3){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	},
	Thu(4){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	},
	Fri(5){
		@Override
		public boolean  isRestDay(){
			return false;
		}
	},
	Sta(6){
		@Override
		public boolean  isRestDay(){
			return true;
		}
	},
	Sun(7){
		@Override
		public boolean  isRestDay(){
			return true;
		}
	};
	private int day = 0;
	private WeekEnum(int day){
		this.day = day;
	}
	public int getDay(){
		return this.day;
	}
	public abstract boolean isRestDay();
}

3.4枚举自带方法
所有的枚举类都继承自Enum类,所以自动就会具有Enum类中定义的方法。
name() //获取枚举常量的名字
ordinal() //获取枚举常量的序数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值