构造函数

构造函数和析构函数基础

不打扰是莪最后的温柔 提交于 2020-03-26 00:02:43
//对象的初始化和清理用构造函数和析构函数 //编译器可以自己提供构造函数和析构函数 //构造函数和析构函数可以自己写 //构造函数用作成员属性初始化 //构造函数语法 类名(){} //构造函数没有返回值,函数名和类名相同,可以有参数,也可以没有。 //程序在调用对象时自动调用构造函数,不需要手动调用,且只调用一次 //析构函数 ~类名(){} //析构函数不可以有参数 #include<iostream> using namespace std; class person { public: //构造函数 person() { cout << "构造函数调用" << endl; } //析构函数 ~person() { cout << "~析构代码" << endl; //对象执行完后,才调用 } }; int main() { person A1; //创建对象时自动调用一次构造函数 person A2; system("pause"); return 0; } 来源: https://www.cnblogs.com/gjbhpu0308/p/12570639.html

设计模式之单例模式

随声附和 提交于 2020-03-25 17:09:02
单例模式类图是23种设计模式类图中最简单的,因为它的类图上只有一个类! 什么时候会用到单例模式呢? 有一些对象我们只需要一个,比如说:线程池(ThreadPool)、缓存(cache)、日志对象、充当打印机设备的驱动程序的对象等等,如果创造出多个实例,就会出现程序行为异常或者与结果不一致的现象。 如何创造出独一无二的对象实例呢? 我们都知道:如果我有一个类NewObject(), 我想创建这个类的对象,怎么做?--------new NewObject()就可以了; 是不是可以无限创建呢? --------如果它是公开类就可以; 如果它的构造函数是私有的呢? -------那别的类就不可以实例化它了(调用不了它的构造函数); 那谁来实例化它呢? --------只能它自己进行实例化了; 那我怎么使用它呢? --------通过get方法暴露出来; 那么: public class NewObject{ //声明静态变量类 private static NewObject newObject; //构造函数私有化 private NewObject(); //get方法暴露出去以便其他类调用 public static NewObject getInstance(){ //判断变量类是否已经实例化 //如果newObject引用为null,表示还没有创建实例

JAVA反射原理

馋奶兔 提交于 2020-03-25 12:18:02
什么是反射? 反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。java反射使得我们可以在程序运行时动态加载一个类,动态获取类的基本信息和定义的方法,构造函数,域等。除了检阅类信息外,还可以动态创建类的实例,执行类实例的方法,获取类实例的域值。反射使java这种静态语言有了动态的特性。 类的加载 java反射机制是围绕Class类展开的,在深入java反射原理之前,需要对类加载机制有一个大致的了解。jvm使用ClassLoader将字节码文件(class文件)加载到方法区内存中: Class clazz = ClassLoader.getSystemClassLoader().loadClass("com.mypackage.MyClass"); 可见ClassLoader根据类的完全限定名加载类并返回了一个Class对象,而java反射的所有起源都是从这个class类开始的。 ReflectionData 为了提高反射的性能,缓存显然是必须的。class类内部有一个useCaches静态变量来标记是否使用缓存,这个值可以通过外部配置项sun.reflect.noCaches进行开关。class类内部提供了一个ReflectionData内部类用来存放反射数据的缓存,并声明了一个reflectionData域,由于稍后进行按需延迟加载并缓存

委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性

我与影子孤独终老i 提交于 2020-03-25 11:26:46
委托是一个类。 namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { static void Main(string[] args) { } } } 使用Reflector查看委托的IL代码: ○ 委托的确是一个类 ○ 委托的构造函数接收方法和类实例 ○ 而且是多播委托,可以用+=为委托变量赋值 ○ 委托内部使用Invoke方法触发方法 ○ BeginInvoke和EndInvoke方法用于多线程场景 接下来体验委托如何使用,以及委托的Method和Target属性分别代表什么。 namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { static void Main(string[] args) { //委托与静态方法 MyDelegate d = new MyDelegate(M1); d(10); Console.WriteLine(d.Method); if (d.Target == null) { Console.WriteLine("当前委托调用的是静态方法,没有类实例"); } else { Console

ArrayBlockingQueue

允我心安 提交于 2020-03-25 01:55:41
3 月,跳不动了?>>> ArrayBlockingQueue 介绍 ArrayBlockingQueue 类实现了BlockingQueue接口。 ArrayBlockingQueue 是有容量限制的,它内部使用数组保存元素,这意味着它无法存储无限量的元素。 它有一定存储数量的上限,当初始化该对象时就决定了该数量的大小,之后就无法改变了。 ArrayBlockingQueue 是以先进先出的顺序来保存元素的。 默认情况下,不保证是这种排序。然而,通过在构造函数将公平性 (fairness) 设置为 true 而构造的队列允许按照 FIFO 顺序访问线程。 公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。 初始化 // 参数1:构造容量为1024的队列 BlockingQueue queue = new ArrayBlockingQueue(1024); // 参数2:如果为true,则按照FIFO顺序访问插入或移除时受阻塞线程的队列;如果为false,则访问顺序是不确定的。 BlockingQueue queue = new ArrayBlockingQueue(1024,true); // 参数3:可将一个已存在的集合对象作为初始化数据。 BlockingQueue queue = new ArrayBlockingQueue(1024,true

spring ioc学习笔记

天大地大妈咪最大 提交于 2020-03-24 18:12:52
ioc的核心是DI,目的就是提供一种更简单的机制来设置组件依赖项,并在整个生命周期中管理这些依赖项。需要某些依赖项的组件通常被称为依赖对象,或者在ioc的情况下被称为目标对象。通常ioc可以分解为两种子类型:依赖注入和依赖查找,这些子类型被进一步分解为ioc服务的具体实现。通过这个定义可以清楚的看到,当谈论DI时,通常是在谈论ioc,而当谈论ioc时,并不总是在谈论DI(依赖查找也是ioc的一种形式)。使用依赖查找时,组建必须对依赖项的引用,而使用依赖注入时,依赖项将通过ioc容器注入组件,依赖查找有两种类型:依赖拉取,上下文依赖查找。依赖注入有两种类型:构造函数注入和setter注入。下面一一介绍 依赖拉取 依赖拉取是最常见的ioc类型,在依赖拉取中,根据需要从注册表中提取依赖项。 Spring还提供依赖拉取作为一种检索框架所管理组件的机制: public class DependencyPull { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/app-context.xml"); MessageRenderer mr = applicationContext.getBean(

设计模式之单例模式

南楼画角 提交于 2020-03-24 16:42:42
单例模式 1、定义: 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 2、特点: 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点; 3、应用场景 在应用场景中,某类只要求生成一个对象的时候,如一个班中的班长、每个人的身份证号等。 当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如 Web 中的配置对象、数据库的连接池等。 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等。 4、PHP 单例模式的实现: 单例模式是设计模式中最简单的模式之一。通常,普通类的构造函数是公有的,外部类可以通过“new 构造函数()”来生成多个实例。 但是,如果将类的 构造函数设为私有 的,外部类就无法调用该构造函数,也就无法生成多个实例。这时该类自身必须定义一个 静态私有实例 ,并向外提供一个 静态的公有函数 用于创建或获取该静态私有实例。 简单记作:三私一公: 私有的构造方法:外部无法调用,也就无法生成多个实例 私有的克隆方法:防止克隆 私有的静态属性:存储唯一实例化的对象 公有的静态方法:实例化该类本身 代码: <?php class Single{ //私有的静态属性 private static $

C/C++ union

不羁岁月 提交于 2020-03-23 13:05:35
一、概念   中文称为共用体或联合体。主要用于 共享内存 ,在C/C++程序的编写中,当 多个基本数据类型或复合数据结构要占用同一片内存时 ,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。    在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。 应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。 二、举例 (1)用union判断大小端   union var   {     char c[4];     int i;   };   int main()   {     var data;     data.c[0] = 0x04;     data.c[1] = 0x03;     data.c[2] = 0x02;     data.c[3] = 0x11;     // 数组中下标低的,地址也低 ,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!     //而把四个字节作为一个整体,应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。     printf("%x\n",data.i);   }   结果:   

C#反射

落花浮王杯 提交于 2020-03-23 12:08:33
反射的概念: 反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射 动态创建类型的实例 ,将类型绑定到现有对象,或从现有对象 获取类型并调用其方法或访问其字段和属性 。如果代码中使用了属性,可以利用反射对它们进行访问。 一般使用: 工厂类,通过反射创建类的实例,实现层与层之间的解耦: 数据层→数据会话层→业务逻辑层。 其中,数据会话层通过反射创建数据层的实例,业务逻辑层调用。 反射Type中的函数 //判断两个成员是否存在继承关系 --后者继承于前者 bool b= typeof(Person).IsAssignableFrom(typeof(Student)); //student继承了person //判断当前类是否为对象的实例 Student st = new Student(); Person p = new Person(); bool s = typeof(Person).IsInstanceOfType(st); //student继承了person 结果为true bool b = p.GetType().IsInstanceOfType(st); //结果为true GetType当前对象的实例 //判断一个类是否为另外一个类的子类 --子类放先 bool c= typeof(Person).IsSubclassOf(typeof(Student)

深入理解final和static关键字

淺唱寂寞╮ 提交于 2020-03-23 04:55:47
深入理解final和static关键字 # 参考: http://blog.csdn.net/qq1028951741/article/details/53418852 final关键字 final关键字可以应用于类、方法以及变量。 final声明变量 final声明变量可以保证在构造器函数返回之前,这个变量的值已经被设置。详细可以看 final声明的重排序规则 。分为三种情况: final声明基本数据类型变量 :该变量只能被赋值一次,赋值后值不再改变。 final声明引用数据类型变量 :final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但是这个对象的内容(对象的非final成员变量的值可以改变)完全可以发生改变(比如 final int[] intArray; ,intArray不允许再引用其他对象,但是intArray内的int值却可以被修改)。 final声明方法参数或者局部变量 :用来保证该参数或者局部变量在这个函数内部不允许被修改。 final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。接口中声明的所有变量本身是final的。另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是