首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入分析 Java 枚举 enum

1(java.lang.String, int) 构造函数生成一个 Gender$1 实例赋给 Male 属性 既然enum是一个类,那么它就可以一般一样拥有自己属性与方法。...枚举类型一个值都将映射到 protected Enum(String name, int ordinal) 构造函数,在这里,每个值名称都被转换成一个字符串,并且序数设置表示了此设置被创建顺序...我们对上面的代码做了一些改变: 首先,我们每个枚举变量后面加上了一个括号,里面是我们希望它代表数字。 然后,我们定义了一个int变量,然后通过构造函数初始化这个变量。...你可以定义任何你想要变量。学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法? 枚举抽象类 如果枚举定义一个抽象方法会怎么样?...enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

1.9K30

深入分析Javaenum

因为Java单继承机制,emum不能再用extends继承其他类。 我们可以使用javap命令进行反编译验证。 ? 既然enum是一个类,那么它就可以一般一样拥有自己属性与方法。...枚举类型一个值都将映射到 protected Enum(String name, int ordinal) 构造函数,在这里,每个值名称都被转换成一个字符串,并且序数设置表示了此设置被创建顺序...我们对上面的代码做了一些改变: 首先,我们每个枚举变量后面加上了一个括号,里面是我们希望它代表数字。 然后,我们定义了一个int变量,然后通过构造函数初始化这个变量。...你可以定义任何你想要变量。学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法? 枚举抽象类 如果枚举定义一个抽象方法会怎么样?...enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

1.3K110
您找到你想要的搜索结果了吗?
是的
没有找到

枚举类型

这里限制指的是对枚举类型所能创建对象个数进行了限制!他不像普通class类那样可以创建无数对象,他只能创建固定数目的对象,而且这些对象是定义枚举类型时候就已经枚举类内部创建好了!...1.2、为什么要用枚举? 因为在有的时候一个对象是有限且固定,所以这个时候用枚举就很方便!...(4)、每一个枚举值都是一个常量,定义之后都不能更改!...那么枚举类能不能普通一样,可以有构造器、成员变量、成员方法? 答案是肯定! 3.2.1、无参构造 枚举类和普通一样,如果没有为其添加构造方法的话,他默认是有一个无参构造方法。...和普通类不同是,枚举构造方法访问权限修饰符必须是private!

79610

3分钟学设计模式(创建型):1、单例模式

那么构造方法得私有private,且对象此实例属于类也就是static成员存在 并提供这个实例全局访问点 提供public static方法给外界获取此成员 那么为什么要设计这样单例类?...由于双重检测锁实现第一个判断是开放,也就是一个线程创建对象过程,另一个线程可以经过判断如果不为直接返回. private static volatile Single single; 在后面疑问章节...内部类实现 懒汉式实现在使用到实例成员时才创建,那么除了上面一样获取时候进行判来进行延迟创建,其实对于Java来说还有另一种方式就是内部类. public class Single{ private...如果使用枚举类型就限制了对应值。因为对于枚举实例是枚举类里列出来确定好了,并且构造器也是私有的。...最终梳理完了感觉还是有很多疑问,下面是疑问点以及想法: 为什么说单例最佳实现是无状态?(很多地方看到这句) 什么是无状态? 就是说类不具有成员属性信息,或者说没有修改成员属性。

29320

设计模式之单例模式

单例模式:顾名思义(啊呸,看不懂)只能有一个实例,无论你创建多少遍都一定是一个对象,本身私有化构造函数,本身实例化自己,对外提供唯一访问接口获取对象,这是理解单例哈,可能有偏差,但是问题不大哈哈。...具体代码实现首先我们需要明确一下几点: static它特点:属于类级别,直接拿类名调用;只实例化一次在内存唯一,常驻内存(注意加粗部分) 构造函数不手动提供构造函数情况下默认由系统提供,是用来对类进行初始化...,咳咳 第一个判断null和不用多说了,不加就和上面最原始一个没啥两样,那为什么要进行第二此判null?...日后调用此类任何一个东西,都会是static实例化,不会管您能不能用上,造成一个极大空间浪费,那我应该怎么改善它?...没毛病,就是枚举,他特点是啥 1、枚举直接父类是java.lang.Enum,但是不能显示继承Enum 2、枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法 3、默认私有的构造方法

42830

ES5继承和ES6继承有什么区别?让Babel来告诉你

= age } 能这么做原理又是另外一道经典面试题:new操作符都做了什么,很简单,就4点: 1.创建一个对象 2.把该对象__proto__属性指向Sub.prototype 3.让构造函数...prototype属性是否出现在左边对象原型链上,简单说可以判断某个对象是否是某个构造函数实例,可以看到如果不是的话就抛错了,错误信息是不能一个类当做函数调用,这里我们就发现第一个区别了: 区别...1:ES5里构造函数就是一个普通函数,可以使用new调用,也可以直接调用,而ES6class不能当做普通函数直接调用,必须使用new操作符调用 继续看自执行函数,接下来调用了一个_createClass...,这个和我们之前写法是一样,只是今天才发现Object.create居然还有第二个参数,第二个参数必须是一个对象,对象自有枚举属性(即其自身定义属性,而不是其原型链上枚举属性)将为新创建对象添加指定属性值和对应属性描述符...回到Sub构造函数,_this指向就是这个通过父类创建实例对象,为什么要这么做,这其实就是第四个区别了,也是最重要区别: 区别4:ES5继承,实质是先创造子类实例对象this,然后再执行父类构造函数给它添加实例方法和属性

57820

深入理解Enum(枚举类)

考虑很详细。并且私有构造方法后,外界就不能创建该类对象了,这样就避免了星期八星期九出现,所有Weekday对象都在该类内部创建。 不对,好像缺了点什么,是int!int?!。...学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法? 枚举抽象类 如果枚举定义一个抽象方法会怎么样? 你要知道,枚举不能继承其他类,也不能被其他类继承。...为什么一个变量后边可以带一个代码块并且实现抽象方法? 别着急,带着这个疑问,我们来看一下枚举实现原理。...总结 最后总结一下: 可以创建一个enum类,把它看做一个普通类。除了它不能继承其他类了。...,如果需要扩展enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

56830

Java单例模式一文通

一、饿汉模式 所谓饿汉模式就是类被加载时就会实例化该类一个对象,它就像是一个很饥饿人要迫不及待吃东西一样。...和饿汉模式一样,懒汉模式也有两点需要注意,首先类构造函数必须定义为 private,其次类必须提供静态实例对象且不进行初始化,并通过静态方法返回给调用方,在编写返回实例静态方法时我们需要判断实例对象是否为...到这里就需要注意了所说是基本上规避,而不是完全规避,为什么这么说?... JDK1.5 没有修正这个问题前,为什么还需要这个模式?这时因为加锁懒汉模式虽然解决了线程并发问题,又实现了延迟加载,但是它存在性能问题。...那么枚举懒汉模式实现原理是什么?首先在枚举明确了构造方法并设置为私有,当我们访问枚举实例时候会执行构造方法,同时每个枚举实例是 static final 类型,因此只能被实例化一次。

52910

重新认识java(十) —- Enum(枚举类)

考虑很详细。并且私有构造方法后,外界就不能创建该类对象了,这样就避免了星期八星期九出现,所有Weekday对象都在该类内部创建。 不对,好像缺了点什么,是int!int?!。...学完了这些,大概枚举类你也应该掌握了,但是,还有没有其他用法? 枚举抽象类 如果枚举定义一个抽象方法会怎么样? 你要知道,枚举不能继承其他类,也不能被其他类继承。...为什么一个变量后边可以带一个代码块并且实现抽象方法? 别着急,带着这个疑问,我们来看一下枚举实现原理。...但是枚举父类【Enum类】实现了Serializable接口,也就是说,所有的枚举类都是可以实现序列化,这也是一个优点。 总结 最后总结一下: 可以创建一个enum类,把它看做一个普通类。...enum元素,一个接口内部,创建实现该接口枚举,以此将元素进行分组。

58320

夯实Java基础系列12:深入理解Java反射机制

Java1.5引入很多特性,为了向后兼容,编译器会帮我们写源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器特殊处理叫...那么枚举也是JDK1.5才引入,又是怎么实现? Java1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...造方法为什么增加了两个参数? 有一个问题,构造方法我们明明只定义了一个参数,为什么生成构造方法是三个参数?...重要概念,在这里赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数参数值肯定有...n 个,因为声明一个枚举值都会调用构造函数创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,

1.6K00

Java 中一个你绝对没用过,但是很好用数据结构

这个时候我们就可以考虑使用 EnumMap,EnumMap 顾名思义首先是一个 Map,其次它 key 只能是枚举,大家都知道枚举实例个数是固定,而且还是预编译,所以很大程度上保证了数据安全性...我们可以看到构造 EnumMap 时候需要传入一个枚举类,后续 put 和 get 都跟普通 Map 一样,只不过这个时候 put 时候 key 必须是该枚举实例了。...使用时候,需要确定枚举类型。通过下面的方式可以创建一个 EnumSet,在后续进行使用。...,我们可以创建集合,同时我们也可以直接根据创建一个完整集合,没必要创建然后再进行 add 操作,如下所示 public static void main(String[] args) {...ordinal() 方式,所以我们构造 EnumSet 时候还可以只构造指定两个枚举范围之间所有枚举值,这里要注意 range 方法第二个参数枚举不能在第一个枚举前面。

41350

这 6 点知识让对 JavaScript 对象有了更进一步了解

3.构造函数构造函数原型 创建从某个共享原型派生对象更方便方法是使用构造函数 JavaScript ,调用前面带有new关键字函数会将其视为构造函数 构造函数将其this变量绑定到一个新对象...,除非它显式返回另一个对象值,否则此新对象将从调用返回 用new创建对象被称为是其构造函数实例 约定将构造函数名称大写,以便于与其他函数区分开 function Rabbit(type) {...Object.prototype 构造函数(实际上是所有函数)会自动获取一个名为prototype属性,默认情况下,该属性包含一个从Object.prototype派生普通对象 使用此构造函数创建每个实例都将此对象作为其原型...我们通过简单分配创建所有属性都是枚举,Object.prototype标准属性都是不可改变,这就是为什么它们不出现在这样for/in循环中原因。...,该函数允许我们控制要创建属性类型,该示例,hiddenNonsense map ,但在 for...in 不会显示。

59020

java | 深入理解Java枚举类型(二)

枚举序列化是由jvm保证,每一个枚举类型和定义枚举变量JVM中都是唯一枚举类型序列化和反序列化上,Java做了特殊规定:序列化时Java仅仅是将枚举对象name属性输出到结果,反序列化时候则是通过...,这是为什么?...下面我们来进一步了解EnumMap用法,先看构造函数: //创建一个具有指定键类型枚举映射。...,跟普通map几乎没有区别,注意与HashMap主要不同在于构造方法需要传递类型参数和EnumMap保证Key顺序与枚举顺序一致,但请记住Key不能为null。...构造函数通过keyUniverse = getKeyUniverse(keyType);初始化了keyUniverse数组值,内部存储是所有可能枚举值,接着初始化了存在Value值得数组vals

1.2K10

初探Java枚举

3.1基本特性 如果枚举没有定义方法,也可以最后一个实例后面加逗号、分号或什么都不加。...Java 不允许使用 = 为枚举常量赋值; 创建 enum 时,可以为其添加多种方法,甚至可以为其添加构造方法。...注意一个细节:如果要为 enum 定义方法,那么必须在 enum 最后一个实例尾部添加一个分号[;]。 此外, enum ,必须先定义实例,不能将字段或方法定义实例前面。否则,编译器会报错。...4.1EnumSet EnumSet 是枚举类型高性能 Set 实现。它要求放入它枚举常量必须属于同一枚举类型。 主要接口: noneOf - 创建一个具有指定元素类型 EnumSet。...,大大加强了程序可读性、易用性和可维护性,并且在此基础之上又进行了扩展,使之可以一样去使用,更是为Java对离散量表示上升了一个台阶。

67210

夯实Java基础系列14:深入理解Java枚举

Java1.5引入很多特性,为了向后兼容,编译器会帮我们写源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器特殊处理叫...那么枚举也是JDK1.5才引入,又是怎么实现? Java1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...造方法为什么增加了两个参数? 有一个问题,构造方法我们明明只定义了一个参数,为什么生成构造方法是三个参数?...重要概念,在这里赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数参数值肯定有...n 个,因为声明一个枚举值都会调用构造函数创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,

50420

理论+实践:从原型链到继承模式,掌握 Object 精髓(二)

_a_ ,名称 _a_ 只是一种惯例,没有任何特殊行为,与其他普通属性一样。...构造函数 function Foo(){ // } var a = new Foo(); • 以上代码为什么会让我们认为 Foo 是一个?...函数本身并不是构造函数。但是当你普通函数调用前加上 new 关键字后,就会把当前函数编程一个构造函数调用。实际上,new 会劫持所有普通函数并用构造对象形式来调用它。...而这个调用时一个构造函数调用,但 NothingSpecial 本身并不是一个构造函数。 • JavaScript 对于构造函数最准确解释是,所有带 new 函数调用。...创建关联 • 那 [[Prototype]] 机制意义是什么?为什么创建这些关联

6510

夯实Java基础系列14:深入理解Java枚举

Java1.5引入很多特性,为了向后兼容,编译器会帮我们写源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫“语法糖”,而编译器特殊处理叫...那么枚举也是JDK1.5才引入,又是怎么实现? Java1.5添加了java.lang.Enum抽象类,它是所有枚举类型基类。提供了一些基础属性和基础方法。...造方法为什么增加了两个参数? 有一个问题,构造方法我们明明只定义了一个参数,为什么生成构造方法是三个参数?...重要概念,在这里赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例; 并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数参数值肯定有...n 个,因为声明一个枚举值都会调用构造函数创建实例,所以参数一定是一一对应;既然明白了这一点,那么我们只需要在枚举把这 n 个参数定义为 n 个成员变量,然后提供对应 get() 方法,

36300

JS原生引用类型解析1-Object类型

所以我们需要对Object内置属性和方法有一个清晰认识。 2. Object构造函数使用 前面我们讲过创建对象各种方法。其中,Object构造函数为给定值创建一个对象包装器。...如果给定值是null或undefined,将会创建并返回一个对象。否则,将返回一个与给定值对应类型对象。 当以非构造函数形式被调用时,Object 等同于 new Object()。 3....3.1 Object构造函数属性 Object.length 长度为1 Object.name 名称为"Object" Object.prototype 指向Object构造函数原型,可以为所有...3.2 Object构造函数方法 Object.assign() 用于将所有枚举属性值从一个或多个源对象复制到目标对象,复制过程对已存在属性会进行覆盖。它将返回目标对象。...(具体参考JS常用方法整理-遍历对象) Object.freeze() 可以冻结一个对象,冻结指的是不能向这个对象添加新属性,不能修改其已有属性值,不能删除已有属性,以及不能修改该对象已有属性枚举

2.1K10

java基础加强_补充笔记

int j = i; 答:语法无错误,但是不能运行,运行会报指针异常。NullPointerException Java规范指出:特定基本类型一定会被装箱成相同包装类型。...即:一个方法参数列表,只能有一个可变参数,且必须放在最后。 一个方法参数列表不能使用多个可变参数。 语法:参数(数据类型 ......与java普通一样声明枚举类时,也可以声明属性、方法和构造函数,但枚举构造函数必须为私有的(这点不难理解)。 4. 枚举类也可以实现接口、或继承抽象类。 5....示例代码: clazz.getConstructor(); // 得到无参公共构造函数 clazz.newInstance(); // 创建此 Class 对象所表示一个新实例...总之,只要是源程序中出现类型,都有各自Class实例对象,例如,int,voi,... ? ---- 8、内省 为什么要学内省?

56220

【javascript】您好, 您要ECMAScript6速记套餐到了 (一)

【前言】本文“严重参考” 自阮一峰老师写ES6文档,在此郑重感谢他沉默无声帮助 总结一下ES6为 javascript 对象/数组/函数 这JS三巨头所提供更简洁优雅书写方式,以及扩展API...API对比: 1.for...in 遍历对象自身属性和原型属性, 且要求是枚举属性 2....Object.keys(obj),返回一个数组, 遍历自身属性, 不包括原型属性, 且要求是枚举 3....当接收一个参数时候,它会以为你传是数组长度,从而创建一个对应长度”数组 Array(3) // [, , ,] 2....当接收多个参数时候,它会以为你传是数组元素, 从而创建一个指定数组元素数组 Array(1, 2, 3) // [1, 2, 3] Array.from将两类对象都转为数组 1类数组对象(如函数内部

57670
领券