Java枚举

/*
 * 枚举:JDK1.5就引入
 * 	  类似:列举,穷举,一一罗列
 * 	Java枚举:把某个类型的对象,全部列出来
 * 
 * 当什么情况下会用到枚举类型?
 * 当某个类型的对象是固定的,有限的几个,那么就可以选择使用枚举。
 * 在整个系统的运行期间,有且只有这几个对象。
 * 
 * 例如:
 * 	性别  Gender,它的对象只有三个:男,女,妖
 *  星期  Week,它的对象只有7个:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
 *  季节 Season,它的对象只有4个:Spring,Summer,Fall,Winter
 *  OA系统,办公系统,员工的状态Status,有几种:忙Busy,闲Free,假Vocation,离职Left
 *  支付系统,支付方式Payment,有几种:Alipay,Wechat,card, cash
 *  。。。。。
 *  
 *  讨论:JDK1.5之前,如果想要实现枚举的这种效果
 *  (1)构造器私有化:
 *  	目的:在这个类的外面,无法随意的创建对象
 *  (2)在这个类中,提前创建好几个对象,供别人使用
 *  
 *  JDK1.5之后,就优化了枚举的语法:
 *  
 */
public class TestEnum {
	public static void main(String[] args) {
//		Gender g1 = new Gender();
		
		Gender nan1 = Gender.NAN;
		Gender nan2 = Gender.NAN;
		System.out.println(nan1 == nan2);//true
	}
}
class Gender{
	//public:使得外面可以直接访问
	//static:使得可以使用“类名.”访问
	//final:前调这个对象是不可变
	public static final Gender NAN = new Gender("男");
	public static final Gender NV = new Gender("女");
	private String description;
	
	private Gender(String description){
		this.description = description;
	}
}
/*
 * 枚举是一种类,是一种特殊的类,特殊在它的对象是有限的几个常量对象。
 * 
 * JDK1.5之后枚举的语法:
 * 1、如何声明枚举类型?
 * 【修饰符】  enum 枚举类型名{
 * 		常量对象列表
 * }
 * 
 * 【修饰符】  enum 枚举类型名{
 * 		常量对象列表;
 * 		其他的成员列表
 * }
 * 说明:如果常量对象列表后面还有其他的成员,那么需要在常量对象列表后面加;进行分割
 * 
 * 2、枚举类型不能继承其他类型,因为枚举类型有一个隐含的父类
 * java.lang.Enum
 * 即Enum是所有 Java 语言枚举类型的公共基本类。
 * 
 * (1)Enum类中有一个唯一的构造器
 * protected  Enum(String name, int ordinal) 
 * 这个构造器不是程序员手动调用的,是编译器自动调用,在所有枚举类型的构造器的首行,
 * 帮我们自动调用,并且自动传入name和ordinal的值。
 * 
 * name:就是常量对象名称
 * ordinal:就是常量对象的序号,其中初始常量序数为零
 * 
 * (2)String name()
 * 		int ordinal()
 * (3)String toString()
 * 	在Enum类中重写了Object类的toString方法,返回常量对象名
 * 
 * 自定义的枚举类型,在eclipse工具类中,不能自动生成toString方法。手动重写。
 * 因为eclipse认为,父类重写的toString方法的实现已经很完美了,就是返回常量对象名,已经能代表一切。
 * 
 * 3、API中没有的方法,是编译器帮我们生成的方法
 * (1)枚举类型[] values()
 * (2)枚举类型   valueOf(String name)
 */
public class TestEnum2 {
	public static void main(String[] args) {
		Season s = Season.SPRING;
		System.out.println(s);//自动调用toString
		
		System.out.println(s.name());
		System.out.println(s.ordinal());
		System.out.println("-----------------");
		
		Season[] all = Season.values();
		for (int i = 0; i < all.length; i++) {
			System.out.println(all[i]);
		}
		
		System.out.println("-----------------");
		Season spring = Season.valueOf("SPRING");
		System.out.println(spring);
	}
}
enum Season{
	//常量对象后面没有(值)就是调用无参构造
	//常量对象后面有(值)就是调用有参构造
	SPRING("春暖花开"),SUMMER,FALL,WINTER;
	
	private String description;

	private Season() {
		
	}

	private Season(String description) {
		this.description = description;
	}
	
	public String toString(){
		return name() + ":" + description;
	}
	
}
/*
 * 补充:枚举类型实现接口
 */
public class TestEnum3 {
	public static void main(String[] args) {
		MyEnum a = MyEnum.A;
		a.test();
		
		MyEnum b = MyEnum.B;
		b.test();
	}
}
interface MyInter{
	void test();
}
enum MyEnum implements MyInter{
	A{
		@Override
		public void test() {
			System.out.println("aaa");
		}
	},B{
		@Override
		public void test() {
			System.out.println("bbb");
		}
	}
}
/*enum MyEnum implements MyInter{
	A,B;

	@Override
	public void test() {
		System.out.println("test");
	}
}*/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值