枚举类型

设计模式--单例模式

ぃ、小莉子 提交于 2020-01-28 04:09:14
文章目录 基本概念 1. 懒汉式 2. 懒汉式改进--类锁 写法一: 写法二: 3. double check 4. 静态内部类 5. 饿汉式 6. Enum枚举类单例模式 7. 单例模式的破坏:反序列化之后的实例和原来的实例相同吗 8. 单例模式反射攻击 原理:可以通过反射调用构造器** 解决办法 9. 容器单例 10. ThreadLocal线程单例模式 11. 单例模式的一些应用 基本概念 定义 保证一个类仅有一个实例,并提供一个全局的访问点 类型 创建型 适用场景 确保任何情况下都绝对只有一个实例 比如: 单服务情况下的计数器可以用单例,但是集群就需要用共享 线程池、连接池 配置 优点 内存中只有一个实例,减少了内存开销 避免对资源的多重占用(比如说文件需要避免重复打开导致同时写) 设置全局的访问点,严格控制访问 缺点 没有接口,扩展困难,如果要修改,肯定要修改代码 需要注意的事情 私有化构造器 线程安全(非常重要) 延迟加载(非常重要) 序列化和反序列化安全的问题 反射(防止反射攻击) 相关的设计模式 单例模式和工厂模式 单例模式和享元模式 1. 懒汉式 /** * @Classname LazySingleton * @Description 线程不安全的懒汉式 * @Date 2019/12/22 15:58 * @Author Cheng */ public

反射机制

狂风中的少年 提交于 2020-01-27 22:14:59
概述   Java的反射机制是指程序在运行时动态获取信息以及动态调用对象方法的功能。它是一种强有力的工具,是面向抽象编程一种实现方式,它能使代码语句更加灵活,极大提高代码的运行时装配能力。   使用反射机制的意义在于:   1.反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力。    2.通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类。    3.使用反射机制能够在运行时构造一个类的对象,判断一个类所具有的成员变量和方法,调用一个对象的方法并生成动态代理。    4.反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中。 Class类   java.lang.Class类提供了一些方法可以获取类型的信息,包括成员变量和方法等。无论是基本类型,还是引用类型,每一种类型都有一个对应的Class对象。   获取Class对象的方式有3种:   1.调用Object的getClass()方法获取Class对象。     a.该方式不适于基本类型。     b.该方式获取的Class对象的泛型类型无法确定,只能限制其范围为对象的类型或其子类类型。   2.用“.class”获取Class对象。     a.该方式适用于所有类型。     b.该方式获取的Class对象的泛型类型可以确定。   3.调用Class.forName

C#与Java的比较

这一生的挚爱 提交于 2020-01-27 13:19:14
这篇文章对C#与Java做一个语言级的对比,方便C# 转Java或Java转C#的人有个大致了解。 这里大致用C#3.0与Java6.0做比较。 写完后得知维基百科里有更加全面得多的比较: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java .NET(C#) Java 基本类型 基本类型 C#中有无符号数,Java没有。 C#中有值类型,且可自己定义值类型的结构体(struct)。 Java中的基本类型(或叫基元类型)即为值类型, 但Java没有结构体,所以不能自定义值类型。 C#中的值类型(包括所有基本类型)间接继承自Object, 有自己的方法可以调用;Java中的值类型(即基本类型) 不继承自Object,只是简单的数据,没有方法可以调用。 C#中int等同于System.Int32,是值类型; bool等同于System.Boolean;等。 Java中int是基本类型,是值类型, 而Integer是引用类型,Integer是int的包装器, int自身没有方法,Integer有一些方法; int与Integer之间可隐式转换(导致装箱和拆箱), 但当Integer值为null的时候会在运行时抛出异常。 boolean等类似。 Java中的int与Integer的对应在C# 中类似int和Nullable

CoreJava(第五章)04-枚举反射

旧城冷巷雨未停 提交于 2020-01-27 04:58:05
5.4对象包装器与自动装箱 如:Integer对应基本类型int,我们一般称之为"包装器"。 1)对象包装器是不可变的,一旦构造了包装器,就不允许更改包装在其中的值。 2)对象包装器类还是final,因此不能定义它们的子类。 **注:**ArrayList的效率远远低于int[]数组。是因为:每个值分别包装在对象中。 为什么使用ArrayList而不使用int[],是因为在一个小型集合中,操作的便利性要优于执行效率。 有一个更加便于添加 int 类型的元素到ArrayList中 如: // 自动装箱 list . add ( 3 ) ; // 将会自动地转换成 list . add ( Integer . valueOf ( 3 ) ) ; // 这种转换称为自动装箱 // 自动拆箱 int n = list . get ( i ) ; // int n = list.get(i).intValue(); 如:在一个条件表达式中混合使用Integer和Double类型,Integer值就会拆箱,提升为double,在装箱成Double。 Integer n = 1 ; Double m = 3.4 ; System . out . printf ( true ? n : m ) ; 不管是装箱还是拆箱,都是编译器认可的,而不是虚拟机。 例如:我们想要将数字字符串转换成数值。 int

Java枚举类的高级用法说明

泪湿孤枕 提交于 2020-01-27 02:49:38
public enum Color{ RED, BLUE, BLACK, YELLOW, GREEN } Color c = Color.RED; 如上,是我们通常使用枚举类型的常用方式。 从编写方式上看,enum很像是特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中Enum类的子类。查看编译之后的字节码文件可以发现enum类型被单独编译成了字节码文件Color.class。 Compiled from "Color.java" public final class Color extends java.lang.Enum<Color> { public static final Color RED; public static final Color BLUE; public static final Color BLACK; public static final Color YELLOW; public static final Color GREEN; public static Color[] values(); public static Color valueOf(java.lang.String); static {}; } 由上可知: 1. enum类型是一个不可以被继承的final类。其枚举值都是Color类型的类静态常量

枚举

僤鯓⒐⒋嵵緔 提交于 2020-01-26 19:53:30
枚举的遍历 #include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值 } day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY) int main() { // 遍历枚举元素, 枚举的每个元素都对应数值 //day++ 会给出警告,但是可以运行 for (day = MON; day <= SUN; day++) { //SUN = 12 printf("枚举元素:%d \n", day); // 1, 2, 3, 4,5,6,7 } //day = FRI; //printf("%d", day); // 10 getchar(); return 0; } #include <stdio.h> void main() { enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER}; //定义枚举类型 enum SEASONS enum SEASONS season;//定义了一个枚举类型变量 season(类型 enum SEASONS ) printf("请输入你喜欢的季节: (1. spring, 2. summer, 3. autumn 4 winter): ");

枚举,模拟与排序

混江龙づ霸主 提交于 2020-01-26 15:53:36
(一)枚举与模拟 1.连号区间数 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1 ∼ N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [ L , R ] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R − L + 1 的“连续”数列,则称这个区间连号区间。 当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。 输入格式 第一行是一个正整数 N ,表示排列的规模。 第二行是 N 个不同的数字 P i ,表示这 N 个数字的某一排列。 输出格式 输出一个整数,表示不同连号区间的数目。 数据范围 1 ≤ N ≤ 10000 , 1 ≤ P i ≤ N 输入样例1: 4 3 2 4 1 输出样例1: 7 输入样例2: 5 3 4 2 5 1 输出样例2: 9 样例解释 第一个用例中,有 7 7 个连号区间分别是: [ 1 , 1 ] , [ 1 , 2 ] , [ 1 , 3 ] , [ 1 , 4 ] , [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 4 ] [1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4] 第二个用例中,有 9 9 个连号区间分别是: [ 1 , 1 ] , [ 1 , 2 ] , [ 1

枚举类型

一笑奈何 提交于 2020-01-26 04:28:57
1) enum 是关键字,标示枚举类型。 2) 在定义枚举类型时,花括号中的名字称为元素或枚举常量。 3) 枚举元素是常量,不是变量。 4) 可以在定义类型时对枚举常量指定一个整型值。 5) 枚举常量可以比较。按所代表的整数进行比较。 6) 一个枚举变量的值只是这几个枚举常量之一,可以将枚举常量赋给一个枚举变量,但不能将一个整数赋给它。 7) 枚举常量不是字符串,不能按照输出字符串的方法输出。 来源: https://www.cnblogs.com/chengsheng/p/5616678.html

c语言中enum类型的用法

戏子无情 提交于 2020-01-26 02:51:48
11.10 枚举类型 在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。 应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。 11.10.1 枚举类型的定义和枚举变量的说明 1. 枚举的定义 枚举类型定义的一般形式为: enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 2. 枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。 设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式: enum weekday{ sun,mou,tue,wed,thu,fri,sat }; enum weekday a,b,c; 或者为: enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c; 或者为: enum {

共用体和枚举类型

☆樱花仙子☆ 提交于 2020-01-25 10:06:53
描述 有n个人员的数据,其中有老师和学生。学生的数据中包括姓名,号码,性别,职业,班号;老师的数据中包括:姓名,号码,性别,职业,职务。可以看出,学生和老师的数据是不同的,学生有班号而没职务,老师有职务而没班号。现要求你根据输入信息,查询某一号码对应的姓名、性别以及班级(如果是老师,则是职务)。 要求用同一结构体来保存老师和同学的数据,并且在结构体当中使用共用体来存学生的学号(或老师的职务)。此外,人员性别应用枚举类型来实现。 输入 第一行输入n,表示有n个人员。接下来n行,每行表示一个人的数据分别是姓名,号码,性别(0表示女,1表示男),职业(字符s表示学生,t表示老师),班级或职务(如果职业是s,那么就输入班级,用一个整数表示;如果职业是t,就输入职务,用一个长度不超过10的字符串表示) 第n+1行是一个m,表示要查询的次数接下来是m个数,表示要查询的号码 输出 根据输入数据,输出号码对应的姓名、性别以及班级(如果是老师,则是职务)。 样例输入 2 Li 1011 1 s 501 wang 2085 0 t prof 1 1011 样例输出 Li 1 501 #include<iostream> using namespace std; struct ac{ char name[20]; int hm; int xb; char s; char zy; char zw[20];