枚举类型

深入理解 Java 枚举

一个人想着一个人 提交于 2019-12-16 16:13:12
📓 本文已归档到:「 javacore 」 🔁 本文中的示例代码已归档到:「 javacore 」 1. 简介 enum 的全称为 enumeration, 是 JDK5 中引入的特性。 在 Java 中,被 enum 关键字修饰的类型就是枚举类型。形式如下: enum ColorEn { RED, GREEN, BLUE } 枚举的好处 :可以将常量组织起来,统一进行管理。 枚举的典型应用场景 :错误码、状态机等。 2. 枚举的本质 java.lang.Enum 类声明 public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { ... } 新建一个 ColorEn.java 文件,内容如下: package io.github.dunwu.javacore.enumeration; public enum ColorEn { RED,YELLOW,BLUE } 执行 javac ColorEn.java 命令,生成 ColorEn.class 文件。 然后执行 javap ColorEn.class 命令,输出如下内容: Compiled from "ColorEn.java" public final class io.github.dunwu.javacore

Java面向对象--枚举

假装没事ソ 提交于 2019-12-16 11:00:59
枚举简介 实际开发的过程之中,我们经常会遇到一些数据的取值就在几个确定的值之间。例如,性别只有男或者女,一周只有七天。自从Java 5之后就开始增加了对枚举类型的支持。 枚举也是一种类,一种特殊的类,所以枚举也称为枚举类,是一种引用类型。它的声明和使用与类的接口相似,但是枚举类型的声明必须要使用关键字 enum 。 枚举类型的定义 枚举定义的语法格式: [ 修饰符 ] enum 枚举类型名 { 枚举成员 方法 } 枚举的修饰符可以是: public , private , internal 。 枚举类型名:一是作为枚举名使用。二是表示枚举成员的数据类型。因此,枚举成员也称为枚举实例或者枚举对象。 枚举成员是可以一一列出来的枚举常量,所以枚举成员也被称为枚举常量或者枚举值。 枚举类与其他类的区别: 枚举可以实现一个或者多个接口,使用 enum 关键字声明的枚举继承的是 java.lang.Enum 类,而不是继承 java.lang.Object 类,因此枚举不能够显示继承其他的父类。 使用 enum 定义非抽象的枚举类型的时候默认使用 final 修饰,因此枚举类不能派生子类。 创建枚举类型的对象的时候不能够使用 new 运算符,而是直接将枚举成员赋值给枚举对象。 因为枚举是类,所以说他可以拥有属于自己的构造方法和其他方法,但是构造方法只能够使用 private 访问修饰符

c博客作业06-结构体&文件

帅比萌擦擦* 提交于 2019-12-15 21:14:06
1.本章学习总结 1.1 学习内容总结 1.结构体如何定义、成员如何赋值 1.结构体的定义 一般形式: struct 结构名{ 类型名 结构名成员1; 类型名 结构名成员2' ··· 类型名 结构名成员n; }; 结构的嵌套定义: /*设置结构体保存学生的学号,姓名,通行地址,以及计算机,英语,数学和平均成绩,其中通行地址包括,居住的城市,街道,门牌号,邮编*/ struct address { char city[10]; char street[20]; int code; int zip; }; struct nest_student{ int num; char name[10]; struct address addr; int computer,english,math; double auerage; }; 注意:在注意嵌套的结构类型时,必须先定义成员的结构类型,在定义主结构类型。 2.结构体成员的赋值 在c语言中,使用结构成员操作符"."来引用结构成员,格式为 结构变量名.结构成员名 。 /*对学生的信息进行赋值*/ struct student{ int num; char name[10]; int computer,english,math; double average; }; struct student s1,s2; /*分别对s1的每个结构体成员赋值;

gRPC快速入门(一)——Protobuf简介

走远了吗. 提交于 2019-12-15 09:37:31
gRPC快速入门(一)——Protobuf简介 一、Protobuf简介 1、Protobuf简介 Protobuf即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化数据结构的方式,是一个灵活的、高效的用于序列化数据的协议。 与XML和JSON格式相比,protobuf更小、更快、更便捷。protobuf是跨语言的,并且自带一个编译器(protoc),只需要用protoc进行编译,就可以编译成Java、Python、C++、C#、Go等多种语言代码,然后可以直接使用,不需要再写其它代码,自带有解析的代码。 只需要将要被序列化的结构化数据定义一次(在.proto文件定义),便可以使用特别生成的源代码(使用protobuf提供的生成工具)轻松的使用不同的数据流完成对结构数据的读写操作。甚至可以更新.proto文件中对数据结构的定义而不会破坏依赖旧格式编译出来的程序。 GitHub地址: https://github.com/protocolbuffers/protobuf 不同语言源码版本下载地址: https://github.com/protocolbuffers/protobuf/releases/latest 2、Protobuf的优缺点 Protobuf的优点如下: A、性能号,效率高 序列化后字节占用空间比XML少3-10倍

C++11:强枚举类型enum

这一生的挚爱 提交于 2019-12-14 03:17:25
转自 https://blog.csdn.net/caychen/article/details/79681806 。感谢博主辛苦整理,侵删。 #include <iostream> namespace T //命名空间T { enum Color{ Black, Gray, Green }; } namespace S { enum Size{ Small = 1, Middle, Large }; } namespace //匿名命名空间(全局) { enum Color{Black,Blue,Gray}; } //枚举类:强类型枚举 int main() { //弱enum的缺点: //1、enum成员在函数内全局可见,所以下面第二行就会报错,提示重复定义 enum Type1{ Purple, Red, White }; enum Color{Purple,Gray,Green}; //Purple redefinition //具名namespace,class/struct及union必须未通过"名字::成员名"的方式访问,称为强作用域类型 //而enum则为非强作用域类型 //对于未使用名字,而直接使用enum的成员名的,默认进入全局命名空间 T::Color c = T::Green; if (c == Black) //Black是匿名命名空间的Black

渗透测试之进行信息收集方法

大城市里の小女人 提交于 2019-12-12 08:52:26
渗透测试之进行信息收集方法 攻击的重要阶段之一就是信息收集。为了能够实施攻击,我们需要收集关于目标的基本信息。我们获得的信息越多,攻击成功的概率就越高。   1.1 服务枚举 在这个中,我们将会展示一些服务枚举的小技巧。枚举是我们从网络收集信息的过程。 我们将要研究DNS枚举和SNMP枚举技术。DNS枚举是定位某个组织的所有DNS服务器和DNS条目的过程。DNS枚举允许我们收集有关该组织的重要信息,例如用户名、计算机名称、IP地址以及其它。为了完成这些任务我们会使用DNSenum。对于SNMP枚举,我们会使用叫做SnmpEnum的工具,它是一个强大的SNMP枚举工具,允许我们分析网络上的SNMP流量。 操作步骤 让我们以DNS枚举作为开始:   1. 我们使用DNSenum进行DNS枚举。为了开始DNS枚举,打开Gnome终端,并且输入以 下命令: cd /usr/bin ./dnsenum --enum adomainnameontheinternet.com 请不要在不属于你的公共网站或者不是你自己的服务器上运行这个工具。这里我们 将 adomainnameontheinternet.com 作为一个例子,你应该替换掉这个目标。要当心!   2. 我们需要获取信息输出,例如主机、名称服务器、邮件服务器,如果幸运的话还可以得 到区域转换:   3.

枚举实现单例模式

孤人 提交于 2019-12-11 12:25:06
写在前面 单例模式定义: 一个类 只能创建一个实例。 使用一个对象来做就不用实例化多个对象!这就能减少我们空间和内存的开销~ 我们使用静态类.doSomething()和使用单例对象调用方法的效果是一样的啊。 没错,效果就是一样的。使用静态类.doSomething()体现的是基于对象,而使用单例设计模式体现的是面向对象。 编写单例模式的代码其实很简单,就分了三步: 将构造函数私有化 在类的内部创建实例 提供获取唯一实例的方法 常用的单例模式 饿汉式 public class Liuge36 { // 1.构造函数私有化 private Liuge36 ( ) { } // 2.在类的内部创建实例 private static Liuge36 liuge36 = new Liuge36 ( ) ; // 3.提供获取实例的唯一方法 public static Liuge36 getInstance ( ) { return liuge36 ; } } 一上来就创建对象了,如果该实例从始至终都没被使用过,则会造成内存浪费。 简单懒汉式 (在方法上加锁) 既然说一上来就创建对象,如果没有用过会造成内存浪费: 那么我们就设计用到的时候再创建对象! public class Liuge36 { // 1.将构造函数私有化 private Liuge36 ( ) { } // 2

TS之枚举的作用

无人久伴 提交于 2019-12-11 06:04:19
最近在看TypeScript,接触到了一些新的概念,比如说枚举, 先来看一下什么是枚举类型: enum Country { China , USA , Russia } 上面的代码就在ts中定义了一个枚举类型(数字枚举),这里如果不做任何修改的话, Country.China的值为0,Country.USA的值为1,往后依次类推每一项的值都 +1 看起来有点类似js中镜像翻转后的数组,又有点像序列化之后的对象是吧? 我开始也是这么认为的,那么这个枚举类型到底有什么用处,或者说和已有类型(对象和数组)有什么使用上的区别呢? 。。。 在百度了一些资料后,我得出的结论是: ts中的枚举类型和普通的js对象本质上没有区别,只是对于开发者来说,相较于直接使用值类型去做判断,枚举类型更易读,能够提升代码的可读性和易维护性。 来源: CSDN 作者: 空、 链接: https://blog.csdn.net/weixin_43311271/article/details/103469023

Kt学习笔记(八)枚举、扩展

空扰寡人 提交于 2019-12-11 03:21:30
文章目录 一、枚举 1.1枚举类的基本使用 1.2为枚举值指定对应的数值 1.3枚举类的其他用法 一、枚举 1.1枚举类的基本使用 Kt 枚举类型以类的形式存在 每一个枚举值都是一个对象, 多个枚举值用(",")分开 enum class Direction { NORTH , SOUTH , WEST , EAST } 使用 //定义一个枚举类变量 var direction : Direction // 定义一个枚举类变量, 并初始化 var direction2 : Direction = Direction . NORTH //未指定数据类型, 通过右侧的赋值自动检测类型 var direction3 = Direction . SOUTH var direction4 = Direction . WEST if ( direction3 == direction4 ) { println ( "枚举类型值相等" ) } else { println ( "枚举类型值 bu 相等" ) } //引用枚举类中的值, 需要加上枚举类名 println ( Direction . WEST ) 1.2为枚举值指定对应的数值 enum class Direction private constructor ( val d : Int ) { NORTH ( 1 ) , SOUTH

枚举

不羁岁月 提交于 2019-12-10 14:53:16
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。 枚举的方法 values():返回 enum 实例的数组,而且该数组中的元素严格保持在 enum 中声明时的顺序。 name():返回实例名。 ordinal():返回实例声明时的次序,从0开始。 getDeclaringClass():返回实例所属的 enum 类型。 equals() :判断是否为同一个对象。 注意:可以使用 == 来比较enum实例。此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。 特点 1.JDK7后,switch语句支持enum类型参数了。 enum Signal {RED, YELLOW, GREEN} public static String getTrafficInstruct(Signal signal) { String instruct = "信号灯故障"; switch (signal) { case RED: instruct = "红灯停"; break; case YELLOW: instruct = "黄灯请注意"; break; case GREEN: instruct = "绿灯行";