------- android培训、 java培训、期待与您交流! ----------



 枚举就是要某个类型的变量的取值只能为若干个固定的值中的一个,
否则编译失败,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,
普通变量的方式在开发阶段无法实现这一目标
 条件:
 1.使用的构造方法
 2.每个元素分别用一个公有的静态成员变量表示
 3.可以有若干共有方法,
 
需求:定义星期几的变量
<strong>public abstract class Weekday {private Weekday(){};public final static Weekday SUN = new Weekday(){@Overridepublic Weekday nextday() {return MON;}};public final static Weekday MON = new Weekday(){@Overridepublic Weekday nextday() {// TODO Auto-generated method stubreturn SUN;}};public abstract Weekday nextday();@Overridepublic String toString() {return this==SUN?"SUN":"MON";}}</strong>
<strong>public class EnumDemo {public static void main(String[] args) {Weekday week1 = Weekday.SUN;System.out.println(week1.nextday());  //输出:MONWeek week = Week.THL; System.out.println(week);   //THlSystem.out.println(week.name());  //THLSystem.out.println(week.ordinal()); //4,第四个位置System.out.println(Week.valueOf("SUN"));  //SUMSystem.out.println(Week.values().length);   //7}}//jdk1.5后可以自定义个枚举对象enum Week{SUN,MON,TUE,WED,THL,FRI,SAT}</strong>

枚举就相当于一个类,其中也可以定义构造方法,成语变量,普通方法和抽象方法

枚举的元素必须位于枚举体的最开始部分,枚举元素列表又有分号与其他成员分隔,把枚举中的成员方法或者变量等放在枚举元素的前面,
编译器会报错
带构造方法的枚举:
构造方法必须定义成私有的
枚举只有一个成员时,就可以作为一个单例的实现方式
 //需求:使用枚举制作红绿灯
public class EnumDemo2 {public static void main(String[] args) {TrafficLamp lamp = TrafficLamp.RED;System.out.println(lamp.nextLamp());  //GREEN}}enum TrafficLamp{RED(30){@Overridepublic TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn GREEN;}},GREEN(45){public TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn null;}},YELLOW(5){public TrafficLamp nextLamp() {// TODO Auto-generated method stubreturn RED;}};public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time) {this.time = time;}}
 单例模式就是一种常见的软件设计模式。
单例模式的作用:可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,系统中只存在一个对象。
我们锁了解到的开发所用到的模式有那些?
1.装饰模式;(灵活,避免继承体系的臃肿,提供更强的功能)
2.代理模式;
3,适配器模式
4,抽象工厂;
实现单例模式的方法有很多,可以使用不同的语言进行编写,我们这就创建两个简单的单例模式 (不同方式)
方法一: (饿汉式)

class Single {private static final Single s = new Single();private Single() {}public static Single getInstance() {return s;}}
分析:代码中的构造函数必须设置为私有的,不然用户会使用构造函数进行创建新的对象; 该单例对象在系统启动时就立即创建,我们可以使用静态方法直接引用。

方法二:(懒汉式) 
  使用懒汉式如果是多线程程序,会出现多线程的安全问题,所用我们必须使用同步锁进行操作,防止多线程同时创建多个对象
  好处:懒加载(和现在的图片懒加载、Hibernate延时加载)

class Single {private static Single s = null;private Single() {}public static Single getInstance() {if (s == null) {synchronized (Single.class) {if (s == null) {s = new Single();}}}return s;}
}
代码分析:懒汉式也就是懒加载,系统启动是还不会立即创建单例对象,当用户调用时,才真正的创建单例对象,但是,当我们使用的是多线程操作时,可能就会出现线程的安全问题,为了保证单例,我们必须使用同步锁进行安全保护,使得共享的数据不存在安全问题!




黑马程序员_Java基础_枚举 和 单例模式实例相关推荐

  1. 黑马程序员_Java基础_前期准备02-1

    ---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...

  2. 黑马程序员_Java基础Day05_面向对象之封装(Done)

    ------- android培训.java培训.期待与您交流! ---------- Day05开始接触到了Java核心部分--"面向对象". 面向对象是一种思考思想,是相对于早 ...

  3. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  4. 黑马程序员_Java基础[16]_多态1

    ---------- android培训 . java培训 .期待与您交流! ---------- [[多态]] instanceof  定义:某一种事物的多种存在形态 [[instanceof  关 ...

  5. 黑马程序员_java总结_网络编程基础

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 现在总结网络编程.在网络通信中,人们把网络通信分为了多个层.为了方便理解,我 ...

  6. 黑马程序员_java基础笔记(06)...集合

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------- JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  7. 黑马程序员_java基础笔记(03)...面向对象

    1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : this关键字,6 : static关键字, 7 : 单例设计模式,8 : 继承,9 : 抽象类,10 : 接口,1 ...

  8. 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式

    GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...

  9. 黑马程序员_Java基础_this,super,static,final关键字

    一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...

  10. 黑马程序员_Java面向对象_包

    7.包 7.1包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称是:包名.类名. 包也是一种封装形式. 利用命令行自动生成文件夹格式:D:\jav ...

最新文章

  1. win7 dll怎么在xp运行_win7电脑安装软件提示缺少vcruntime140.dll如何解决
  2. python开发工程师面试题-超实用面试必看,Python工程师面试题
  3. 列举ospf的5种报文类型_9种语言的应用场景,程序员的候选清单,你最看好哪一门语言...
  4. [云炬创业学笔记]第一章创业是什么测试12
  5. 场景/故事/story——寻物者发布消息场景、寻失主发布消息场景、消息展示场景、登录网站场景...
  6. 新Astaroth***病毒可利用杀毒软件窃取数据
  7. 图片预览------photoswipe 使用
  8. 服务器虚拟化之-——VMware组件与功能。
  9. Leetcode算法题(C语言)4--旋转数组
  10. python用于数据分析的包主要有哪些_大数据中用于硬核数据分析最适合的语言和工具包...
  11. python-定义类的属性
  12. 2015年OA选型一览表
  13. 小议新版GB9706.1-2020的基本性能
  14. [图像处理][Matlab] fspecial函数详解
  15. 常见口罩标准细菌过滤效率和呼吸阻力对比
  16. mac辅助功能授权无效
  17. 课程表APP开发市场现状分析
  18. 精通 Grails: 用 JSON 和 Ajax 实现异步 Grails
  19. nginx cache 总结
  20. yarn ignore-engines

热门文章

  1. 虚拟机win7系统安装vmtool
  2. MFC TabCtrl 控件修改标签尺寸
  3. 嵌入式单片机知识点汇总(持续更)
  4. OSChina 周日乱弹 ——朕与先生解战袍,芙蓉帐暖度春宵
  5. 互联网日报 | 1月30日 星期六 | 苹果单季营收首破1000亿美元;特斯拉连续六个季度盈利;全球新冠肺炎确诊病例超1亿例...
  6. 【excel】绘制双纵坐标轴的图表
  7. python list列表的乘除法
  8. Dell 电脑插入耳机无声音或重启后有声音
  9. b站java开发好的up主_B站有哪些不错的UP主?
  10. nodeJs 实现邮箱验证码注册