枚举 ----- 用来对一定范围内的值 进行取值
枚举语法 : enum 枚举类名称 { 枚举对象实例,枚举对象实例... ; }
* 可读性良好、阻止非法数据
每一个枚举值 在编译.class文件后,成为枚举成员对象(常量)
枚举类构造器 必须private 的
JDK5 switch 可以接受五种数据 类型 byte 、short 、int 、char、enum
JDK7 switch 可以接受六种 : 多了一种String
星期输出中文案例:两种写法
枚举语法 : 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();
}