当前位置: 首页 > news >正文

餐饮环境评估在哪个网站做天津网站开发平台

餐饮环境评估在哪个网站做,天津网站开发平台,西安百度推广代理商,微信小程序多少钱做一个枚举类型是单例模式的。你需要实例化一次#xff0c;然后再整个程序之中就可以调用他的方法和成员变量了。 枚举类型使用单例模式是因为他的值是固定的#xff0c;不需要发生改变。 简介 枚举是Java1.5引入的新特性#xff0c;通过关键字enum来定义枚举类。枚举类是一种特殊… 枚举类型是单例模式的。你需要实例化一次然后再整个程序之中就可以调用他的方法和成员变量了。 枚举类型使用单例模式是因为他的值是固定的不需要发生改变。 简介 枚举是Java1.5引入的新特性通过关键字enum来定义枚举类。枚举类是一种特殊类它和普通类一样可以使用构造器、定义成员变量和方法也能实现一个或多个接口,但枚举类不能继承其他类. 原理分析 枚举类型使用的最常用类型就是枚举常量.下面通过一个简单的Demo来说明枚举的原理. 这样只是能够知道枚举简单的使用方法,不能看出枚举的特点和枚举的具体实现. 下面我们通过 jad工具来反编译Color类, 通过jad -sjava Color.class反编译出一份java文件. 从反编译的类中,可以看出, 我们使用enum关键字编写的类,在编译阶段编译器会自动帮我们生成一份真正在jvm中运行的代码. 该类继承自 Enum类,public abstract class Enumimplements Comparable, Serializable. Enum类接受一个继承自Enum的泛型.(在反编译java文件中没有体现泛型是因为,泛型在阶段就会被类型类型擦除,替换为具体的实现.). 从反编译的Color类中可以看出,在enum关键字的类中,第一行 **(准确的说是第一个分号前)**定义的变量,都会生成一个 Color实例,且它是在静态域中进行初始化的, 而静态域在类加载阶段的cinit中进行初始化,所以枚举对象是线程安全的,由JVM来保证. 生成的枚举类有 **Color $VALUES[];**成员变量,外部可以通过values()方法获取当前枚举类的所有实例对象. Enum成员变量和方法分析 Enum成员变量 Enum成员变量和方法 Enum类实现了 Comparable接口,表明它是支持排序的,可以通过 Collections.sort 进行自动排序.实现了**public final int compareTo(E o)**接口,方法定义为final且其实现依赖的ordinal字段也是final类型,说明他只能根据ordinal排序,排序规则不可变. ordinal: 表示枚举的顺序,从Color类中可以看出,它是从0开始按自然数顺序增长,且其值是final类型,外部无法更改.对于 ordinal()方法,官方建议尽量不要使用它,它主要是提供给EnumMap,EnumSet使用的. name: 表示枚举类的名字,从Color类的构造函数可以看出,它的值就是我们定义的实例的名称. 我们在例子中之所以能打印出实例名称,是因为 它的toString()方法直接返回了name属性. equals(): 从其实现来看, 我们程序中使用 或者 equals来判断两个枚举相等都是一样的. getDeclaringClass(): 方法返回枚举声明的Class对象 每一个枚举类型极其定义的枚举变量在JVM中都是唯一的 这句话的意思是枚举类型它拥有的实例在编写的时候,就已经确定下,不能通过其他手段进行创建,且枚举变量在jvm有且只有一个对应的实例. 为了达到这个效果,它通过以下方法来确保. 1. 类加载时创建,保证线程安全 从Color类中可以看出, Color对象是在静态域创建,由类加载时初始化,JVM保证线程安全,这样就能确保Color对象不会因为并发同时请求而错误的创建多个实例. 2. 对序列化进行特殊处理,防止反序列化时创建新的对象 我们知道一旦实现了Serializable接口之后反序列化时每次调用 readObject()方法返回的都是一个新创建出来的对象. 而枚举则不同,在序列化的时候Java仅仅是将枚举对象的name属性输出到结果中反序列化的时候则是通过Enum的valueOf()方法来根据名字查找枚举对象。同时编译器是不允许任何对这种序列化进行定制因此禁用了writeObject、readObject、readObjectNoData、writeReplace和readResolve等方法。 1.私有构造函数, 无法正常的 new出对象 2.无法通过 clone()方法,克隆对象 3. 无法通过反射的方式创建枚举对象 枚举类型,在 JVM 层面禁止了通过反射构造枚举实例的行为,如果尝试通过反射创建,将会报Cannot reflectively create enum objects. 枚举类的特点总结 枚举实例必须在 enum关键字声明的类中显式的指定(首行开始的以第一个分号结束)除了1, 没有任何方式(new,clone,反射,序列化)可以手动创建枚举实例枚举类不可被继承枚举类是线程安全的枚举类型是类型安全的(typesafe)无法继承其他类(已经默认继承Enum) 枚举的使用 枚举常量 如上诉 Color枚举类,就是典型的枚举常量. 它可以在 switch语句中使用 枚举类型是类型安全的,可以对传入的值进行类型检查: 如有个 handleColor(Color color)方法,那么方法参数自动会对类型进行检查,只能传入 Color.WHITE和Color.BLACK,如果使用 static final定义的常量则不具备 类型安全的特点. 枚举与构造函数 枚举类可以编写自己的构造函数,但是不能声明public,protected,为了是不让外部创建实例对象,默认为private且只能为它. 枚举与类 除了枚举常量外, enum是一个完整的类,它也可以编写自己的构造方法以及方法,甚至实现接口. 这里需要注意,枚举类不能继承其他类,因为在编译时它已经继承了 Enum,java无法多继承 枚举与单例模式 单例模式网上有6-7中写法,除了 枚举方式外, 都有两个致命的缺点, 不能完全保证单例在jvm中保持唯一性. 1. 反射创建单例对象 解决方案 : 在构造上述中判断,当多于一个实例时,再调用构造函数,直接报错. 2. 反序列化时创建对象 解决方案 : 使用**readResolve()**方法来避免此事发生. 这两种缺点虽然都有方式解决,但是不免有些繁琐. 枚举类天生有这些特性.而且实现单例相当简单. 所以,枚举实现的单例,可以说是最完美和简洁的单例了.推荐大家使用这种方式创建单例. 但是,枚举类的装载和初始化时会有时间和空间的成本. 它的实现比其他方式需要更多的内存空间,所以在Android这种受资源约束的设备中尽量避免使用枚举单例,而选择 双重检查锁(DCL)和静态内部类的方式实现单例. 枚举与策略模式 特定的常量类型与主体中的方法或行为有关时,即当数据与行为之间有关联时,可以考虑使用枚举来实现策略模式. 如我们需要实现加减运算,就可以在枚举类型中声明一个 apply抽象方法,在特定于常量的方法(Constant-specific class body的Constant -specific method implementation)中,用具体实现抽象方法.
http://www.huolong8.cn/news/18136/

相关文章:

  • 做网站备案的问题产品推荐词
  • 汽车4S店网站建设注册小程序需要什么条件
  • 找外包做网站要多久legenda wordpress主题
  • 一起做网店网站入驻收费网站定制公司
  • 贵州手机网站建设wordpress 优秀站点
  • 门户网站制作定做加强品牌建设
  • 闸北集团网站建设怎么建个人网页
  • 杭州哪家公司做网站计算机专业主要学什么好就业
  • vps做电影网站网络设计接单
  • 有没有代做模型的网站小广告怎么举报
  • 寿光建设集团网站江苏伟业建设集团网站
  • 快站免费网站建设哪家好做家政有专门的网站吗
  • 网站 建设服务器wordpress幻灯片插件 汉化
  • 网站建设 服务内容微信营销成功案例
  • 做网站需要学哪些软件成都网址建设
  • 设计师推荐网站欣赏天津旅游网站建设
  • 怎么建设手机网站首页贵州城市和城乡建设官方网站
  • 帝国手机网站模板手表网站妨水
  • 平面设计培训网站大全企业查询学历需要哪些信息
  • 深圳网站设计建设公司建筑工程网站监理答案
  • 网站建设都有什么技术支持重庆市设计院官网
  • 淘宝网站建设需求分析厦门企业网站建设方案
  • 深圳做网站大公司广东省企业信用信息网
  • 淄博学校网站建设哪家好软件是如何开发的
  • 济南wordpress 建站网站做百度竞价利于百度优化
  • 杭州萧山区专业做网站的公司江苏省江建集团有限公司建设网站
  • 自助网站建设哪个好交互网站建设
  • 网站建设现在好做吗如何做后台网站的教程
  • 好看的企业网站网站建设与管理2018
  • 网站一般宽度常州房地产网站建设