java 枚举的原理与使用枚举设计单例
来源:互联网 发布:淘宝社区茶叶包装盒 编辑:程序博客网 时间:2024/04/29 15:45
1.一个简单的季节枚举
//1.季节枚举类,不能再继承其它类 public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; } //2.main测试 public class TestEnums { public static void main(String [] a){ //在打印输出SeasonEnum.SPRING时,调用了toString()方方法,枚举默认是重写了toString()方法,直接返回常量名(name) System.out.println(SeasonEnum.SPRING); } } //输出结果是:SPRING
2.SeasonEnum季节枚举的底层实现
//SeasonEnum 默认继承Enum ,所以SeasonEnum不能再继承其它类 public final class SeasonEnum extends Enum { //1.枚举对象 public static final SeasonEnum SPRING; public static final SeasonEnum SUMMER; public static final SeasonEnum FALL; public static final SeasonEnum WINTER; private static final SeasonEnum ENUM$VALUES[]; //3.私有化构造器,所以枚举对象默认是不能new获取 private SeasonEnum(String s, int i) { super(s, i); } public static SeasonEnum[] values() { SeasonEnum aseasonenum[]; int i; SeasonEnum aseasonenum1[]; System.arraycopy(aseasonenum = ENUM$VALUES, 0, aseasonenum1 = new SeasonEnum[i = aseasonenum.length], 0, i); return aseasonenum1; } //4.通过s可以获取枚举 public static SeasonEnum valueOf(String s) { return (SeasonEnum)Enum.valueOf(com/xmg/enums/SeasonEnum, s); } //2.实例化枚举对象 static { SPRING = new SeasonEnum("SPRING", 0);//第一个参数是:常量名,第二个参数是:常量的索引 SUMMER = new SeasonEnum("SUMMER", 1); FALL = new SeasonEnum("FALL", 2); WINTER = new SeasonEnum("WINTER", 3); ENUM$VALUES = (new SeasonEnum[] { SPRING, SUMMER, FALL, WINTER }); } }
总结:
枚举中定义的常量,引用的是一个枚举的对象,对象是通过默认的
私有化构造器
实例化
3.SeasonEnum季节枚举的简单使用
public class TestEnums { public static void main(String [] a){ System.out.println(SeasonEnum.SPRING);//输出结果是:SPRING SeasonEnum summer = SeasonEnum.SUMMER;//实例化一个枚举对象 //switch底层比较的是常量所在的索引 switch (summer) {//jdk1.5的switch支持枚举的比较:传入枚举对象 case SUMMER://枚举的常量 System.out.println(summer);//输出结果是:SUMMER break; default: break; } //if底层比较的是枚举的引用 if(summer==SeasonEnum.SUMMER){//是true System.out.println(summer);//输出结果是:SUMMER } } } //执行main输出的结果是: SPRING SUMMER SUMMER
- 底层实现的原理
public class TestEnums { public static void main(String a[]) { System.out.println(SeasonEnum.SPRING); SeasonEnum summer = SeasonEnum.SUMMER; //summer.ordinal()方法的作用就是去获取SUMMER常亮在枚举数组中的索引,返回值是2 switch ($SWITCH_TABLE$com$xmg$enums$SeasonEnum()[summer.ordinal()]) { case 2: // '\002' System.out.println(summer); break; } if (summer == SeasonEnum.SUMMER) System.out.println(summer); } ..... ..... ..... ..... }
总结
枚举的比较,其实比较的是:索引和引用,而不是常量的名称
4.枚举的常量也可以使用中文
//枚举类 public enum SeasonEnum2 { 春天,夏天,秋天,冬天; } //测试类 public class TestEnums2 { public static void main(String [] a){ System.out.println(SeasonEnum2.春天);//输出结果是:春天 SeasonEnum2 summer = SeasonEnum2.夏天;//实例化一个枚举对象 //switch底层比较的是常量所在的索引 switch (summer) {//jdk1.5的switch支持枚举的比较:传入枚举对象 case 夏天://枚举的常量 System.out.println(summer);//输出结果是:夏天 break; default: break; } //if底层比较的是枚举的引用 if(summer==SeasonEnum2.夏天){ System.out.println(summer);//输出结果是:夏天 } } } //输出的结果: 春天 夏天 夏天
总结
枚举的比较,其实比较的是:索引和引用,而不是常量的名称
5.自定义构造器,实现值得比较
//自定义一个是否使用硬盘缓存的枚举 public enum DiskCacheEnum { //常量名(在实例化枚举对象时,给构造器传递参数) TRUE(true),FALSE(false); //自定义boolean字段 private final boolean isDiskCache; //自定义构造器,默认都是私有(当调用DiskCacheEnum.TRUE时,就会调用该构造器) DiskCacheEnum(boolean isDiskCache){ this.isDiskCache=isDiskCache; } //获取字段的值 public boolean isDiskCache() { return isDiskCache; } } //测试(比较字段的值,而不是比较枚举的“引用和索引”) public static void main(String [] a){ DiskCacheEnum diskCacheEnum = DiskCacheEnum.TRUE; System.out.println(diskCacheEnum);//输出:TRUE if(diskCacheEnum.isDiskCache()){//判断布尔值的字段的值是否为true System.out.println(diskCacheEnum.isDiskCache());//输出布尔值的:true } }
总结
这样就可以实现通过新建一个枚举(使用枚举的值)来与从数据库获取的值进行比较
6.用枚举设计单例
饿汉式单例:
class SingleTon { private static SingleTon instance=new SingleTon(); private SingleTon(){} public static SingleDemo getInstance(){ return instance; } } //单例对象的获取: SingleTon instance = SingleTon.getInstance();
通过枚举实现饿汉式单例:
public enum SingleTon { INSTANCE; } //单例对象的获取: SingleTon instance = SingleTon.INSTANCE;
1 0
- java 枚举的原理与使用枚举设计单例
- Java枚举使用以及枚举实现单例模式
- Java 枚举单例
- Java枚举单例
- Java枚举类型enum的使用原理
- Java枚举类型的使用和原理
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- java枚举单例的好处
- 【JAVA】三 【设计模式】一 JAVA 单例 枚举
- 【设计模式 单例】枚举单例
- android暂停或停止其他音乐播放器的播放
- 浏览器缓存知识小结及应用
- POJ 2566 Bound Found 【Two Pointers】
- GP开发示例:数据库去重
- 一分钟理解js闭包
- java 枚举的原理与使用枚举设计单例
- Case Class
- Oracle 修改BLOB数据
- 天平与假币问题
- A+B Problem(v) 南阳理工ACM 题目844
- operator=重写
- 完善之前的职员信息管理系统(添加了固态存取职员信息,结构优化了些,命名规范了些。。)
- 谈谈关于前端开发网页适配手机的相关设置
- Oracle中Hint深入理解