枚举

枚举 ----- 用来对一定范围内的值 进行取值 
枚举语法 : enum 枚举类名称 { 枚举对象实例,枚举对象实例... ; }
* 可读性良好、阻止非法数据


案例:员工和角色案例 ----枚举技术由来 

* 应用 :多个固定取值范围中 取一个值 , 三选一效果

package cn.com.corotata;
/**
 * 枚举由来
 * 
 * @author corotata
 * 
 */
public class EmployeeTest {

}

class Employee { // 员工类
	// 在员工类 内部 定义一个角色属性 (公司内角色只有三种 BOSS MANAGER WORKER)
	// 定义员工角色 在三个值当中取一个
	private String role1;

	private int role2; // 1 BOSS 2 MANAGE 3 WORKER

	private Role3 role3; // 在 JDK5 之前 没有枚举,通过自定义类 实现枚举功能

	private Role4 role4; // 在 JDK5 之后 引入枚举,使用枚举表示多个角色

	public static void main(String[] args) {
		Employee employee = new Employee();
		employee.role1 = "BOSS";
		employee.role1 = "MANAGER";
		// 因为角色是一个String
		employee.role1 = "MANGAER";// 如果经理字符串拼错了,程序出问题

		// -------------------------------------------------------------

		employee.role2 = 1; // 可读性太差
		employee.role2 = 4; // 非法数据

		// ----------------------------------------------------------------
		// 定义Role2 类,定义 一组 int 常量,用来表示角色
		employee.role2 = Role2.BOSS;// 可读性好多了
		employee.role2 = -1; // 非法数据

		// --------------------------------------------------------------
		// 通过自定义Role3 实现 枚举功能
		employee.role3 = Role3.BOSS;
		// employee.role3 = new Role3(); // 数据 非法

		// 使用枚举之后
		employee.role4 = Role4.MANAGER; // 可读性良好,阻止非法数据
		// employee.role4 = new Role4(); // 私有构造方法

	}
}

class Role2 {
	public static final int BOSS = 1;
	public static final int MANAGER = 2;
	public static final int WORKER = 3;
}

class Role3 { // 枚举功能 类
	public static final Role3 BOSS = new Role3();
	public static final Role3 MANAGER = new Role3();
	public static final Role3 WORKER = new Role3();

	private Role3() {枚举类构造器 必须private 的
	}
}

enum Role4 { // JDK5 以后引用枚举技术 简化对象创建 ---- 功能等价于 Role3
	BOSS, MANAGER, WORKER;
}

Java数据类型有几种:两大种 引用数据类型 原始数据类型 
引用数据类型 :interface class 数组 enum 
原始数据类型 :8种 

boolean         true&false        Boolean
char               16                   Character
byte               8                     Byte
short              16                   Short
int                  32                   Integer
long               64                   Long
float               32                   Float
double           64                   Double

每一个枚举值 在编译.class文件后,成为枚举成员对象(常量)


枚举类构造器 必须private 的


JDK5 switch 可以接受五种数据 类型  byte 、short 、int 、char、enum
JDK7 switch 可以接受六种 : 多了一种String

单例设计模式写法
1、私有构造器
2、private static 成员对象
3、public static 获得成员对象方法
* 懒汉式 和 饿汉式 
饿汉:在创建对象时 直接进行初始化
懒汉:在获取对象时 进行初始化

package cn.com.corotata;

/**
 * 单例设计模式 ---- 强调一个类只能有 一个实例 单例设计模式写法: 1.私有构造器 2.private static 成员对象 3.public
 * static 获得成员变量的方法 单例设计模式写 1、私有构造器 2、private static 成员对象 3、public static
 * 获得成员对象方法
 * 
 * * @author corotata
 * 
 */
public class SingletonTest {
}

enum Test {
	TEST;// 该枚举只有TEST实例,相当于单例
}

// 饿汉式
class TestB {
	// 1.私有构造器
	private TestB() {
	}

	// 2、private static 对象成员
	private static TestB test = new TestB();

	// 3、提供public static 获得成员方法 , 获得唯一实例
	public static TestB getInstance() {
		return test;
	}
}

// 懒汉式
class TestC {
	// 1.私有构造器
	private TestC() {

	}

	// 2.private static 对象成员
	private static TestC test;

	// 3.public static 获得成员方法 ,获得唯一实例
	public static TestC getInstance() {
		if(test == null){
			test = new TestC();
		}
		return test;
	}

}
* 在枚举实例定义过程中,向枚举构造器传入参数,通过匿名内部类实现枚举中抽象方法

星期输出中文案例:两种写法 

package cn.com.corotata;

/**
 * 星期输出中文案例
 * 
 * @author corotata
 * 
 */
public class WeekDays {
	public static void main(String[] args) {
		WeekDay1 day1 = WeekDay1.Fri;
		day1.show();

		WeekDay2 day2 = WeekDay2.Wed;
		day2.show();
	}
}

enum WeekDay1 {
	Mon, Tue, Wed, Thu, Fri, Sat, Sun;

	// 编写方法 show
	public void show() {
		// 根据枚举对象 名字 返回响应中文星期
		if (this.name().equals("Mon")) {
			System.out.println("星期一");
		} else if (this.name().equals("Tue")) {
			System.out.println("星期二");
		} else if (this.name().equals("Wed")) {
			System.out.println("星期三");
		} else if (this.name().equals("Thu")) {
			System.out.println("星期四");
		} else if (this.name().equals("Fri")) {
			System.out.println("星期五");
		} else if (this.name().equals("Sat")) {
			System.out.println("星期六");
		} else if (this.name().equals("Sun")) {
			System.out.println("星期日");
		}
	}

}

enum WeekDay2 {
	Mon {
		@Override
		public void show() {
			System.out.println("星期一");
		}
	},
	Tue {
		@Override
		public void show() {
			System.out.println("星期二");
		}
	},
	Wed {
		@Override
		public void show() {
			System.out.println("星期三");
		}
	},
	Thu {
		@Override
		public void show() {
			System.out.println("星期四");
		}
	},
	Fri {
		@Override
		public void show() {
			System.out.println("星期五");
		}
	},
	Sat {
		@Override
		public void show() {
			System.out.println("星期六");
		}
	},
	Sun {
		@Override
		public void show() {
			System.out.println("星期日");
		}
	};
	public abstract void show();
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值