初始化

python面向对象编程——单例

浪尽此生 提交于 2020-02-11 23:13:58
01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼 ,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 单例设计模式 目的 —— 让 类 创建的对象,在系统中 只有 唯一的一个实例 每一次执行 类名() 返回的对象, 内存地址是相同的 单例设计模式的应用场景 音乐播放 对象 回收站 对象 打印机 对象 …… 02. __new__ 方法 使用 类名() 创建对象时, Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间 __new__ 是一个 由 object 基类提供的 内置的静态方法 ,主要作用有两个: 1 在内存中为对象 分配空间 2 返回 对象的引用 Python 的解释器获得对象的 引用 后,将引用作为 第一个参数 ,传递给 __init__ 方法 重写 __new__ 方法 的代码非常固定! 重写 __new__ 方法 一定要 return super().__new__(cls) 否则 Python 的解释器 得不到 分配了空间的 对象引用 , 就不会调用对象的初始化方法 注意: __new__ 是一个静态方法,在调用时需要 主动传递 cls 参数 ** 示例代码 ** class Music ( object ) : def _

类加载机制详解

三世轮回 提交于 2020-02-11 22:39:12
之前在介绍JVM内存模型的时候(参看: JVM内存模型 ),提到了在运行时数据区之前,有个Class Loader,这个就是类加载器。用以把Class文件中的描述信息加载到内存中运行和使用。以下是《深入理解Java虚拟机第二版》对类加载器机制的定义原文: 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 一般我们把类从加载到内存到卸载出内存的整个过程分为七个阶段:加载,验证,准备,解析,初始化,使用和卸载。其中,验证、准备和解析统称为连接。 在这几个阶段中,加载、验证、准备、初始化和卸载这五个阶段的顺序是固定的,而解析阶段则不一定,它有时候可能会在初始化之后开始,这是为了支持Java的运行时绑定。需要特别注意的是,这里边的顺序指的是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常会互相交叉的混合进行。 了解类的加载机制非常有必要,下面将逐个解释说明类加载的全过程(即加载,验证,准备,解析,初始化五个阶段)。相信看完之后,你会对Java类某些问题有更深刻的理解(例如,为什么子类可以覆盖父类的字段和方法?饿汉式单例为什么天生是线程安全的?) 加载 加载过程分为三步: 1)通过一个类的全限定名来获取定义此类的二进制字节流。 2

Spring(04)Spring Bean 基础

风格不统一 提交于 2020-02-11 22:30:29
目录 Spring(04)Spring Bean 基础 1. 定义 Spring Bean 2. BeanDefinition 元信息 3. 命名 Spring Bean 3.1 Bean 的名称 3.2 Bean 名称生成器(BeanNameGenerator) 4. Spring Bean 的别名 5. 注册Spring Bean 5.1 BeanDefinition 注册 5.2 外部单例对象注册 6. 实例化 Spring Bean 7. 初始化 Spring Bean 8. 延迟初始化 Spring Bean 9. 销毁 Spring Bean 10. 垃圾回收 Spring Bean 11. 面试题精选 Spring(04)Spring Bean 基础 Spring 核心编程思想目录: https://www.cnblogs.com/binarylei/p/12290153.html 1. 定义 Spring Bean BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口,包含: Bean 的类名 Bean 行为配置元素,如作用域、自动绑定的模式,生命周期回调等 其他 Bean 引用,又可称作合作者(collaborators)或者依赖(dependencies) 配置设置,比如 Bean 属性(Properties)

C++面向过程编程

試著忘記壹切 提交于 2020-02-11 18:47:55
前言 C语言是面向过程的编程语言,C++是面向对象的编程语言,这是两种不同的编程语言。C语言是C++的子集,C++是C语言的超集,C++进一步扩充和完善了C语言,其中大部分是对于面向对象编程的拓展。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。 从“Hello world!”讲起 传承学习编程语言的优良传统,我们来写一段“Hello world!”: #include <iostream> using namespace std; int main() { cout << "Hello World"; return 0; } 类 类(class)是用户自定义的数据类型,是一种构造类型,与C语言结构体类似,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数,通过类定义出来的变量也有特定的称呼,叫做“对象”。类一般分为两部分,分别写在不同的文件当中,其一是头文件,用来声明这种类所提供的功能,另一个文件包含了完成这些操作的代码。想要使用类,就必须现在程序中包含头文件。 标准“输入/输出库” 在 C++ 标准的“输入/输出库”名为“ iostream ”,iostream 这个单词是由3个部分组成的,即 i-o-stream ,意为输入输出流。在 iostream

利用VuePress-Creator(VuePress脚手架)快速搭建VuePress项目

混江龙づ霸主 提交于 2020-02-11 16:16:44
背景 最近想把博客搬迁到 Github 上,所以找到了 VuePress 静态站点生成工具。现在已经升级到 1.x 版本了,目前用着还不错。但就是每次创建 VuePress 项目略显麻烦,无奈之下抽空写了 VuePress-Creator 脚手架(开源!开源!开源!),方便了快速创建 VuePress 项目。但由于时间关系,脚手架没有添加 多语言 选项,后期会抽空完善这款脚手架的~ 下面我简单介绍如何使用这款脚手架来快速创建 VuePress 项目。 步骤 1.安装全局 VuePress-Creator 打开你的命令行窗口,然后输入以下代码: yarn global add vuepress-creator 如果你只使用 npm: npm install -g vuepress-creator 注意 部分用户使用 yarn 安装完后执行命令时出现 【“vuepress-creator”不是内部或外部命令,也不是可运行的程序或批处理文件。】,对应其解决办法请看 《yarn 安装全局包后找不到命令的问题》 。 2.初始化模板 第一次 使用脚手架时请先初始化模板: vuepress-creator upgrade -t 温馨提示 第一次初始化完毕后,后续可直接使用命令 vuepress-creator init <project> 来创建项目。 3.创建项目 初始化模板完毕后

Linux 工作机初始化操作

此生再无相见时 提交于 2020-02-11 11:11:35
# apt 依赖包安装 sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget libsqlite3-dev liblibbz2-dev # docker sudo docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres sudo docker run --name httpbin -i -d -p 8090:80 kennethreitz/httpbin 来源: https://www.cnblogs.com/nextkara/p/12294084.html

day27(027-反射&JDK新特性)

本小妞迷上赌 提交于 2020-02-11 09:14:17
###27.01_反射(类的加载概述和加载时机)  A:类的加载概述   *加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一个Class对象。   *连接 准备,负责为类的静态成员分配内存,并设置默认初始化值。   *初始化  B:加载时机     创建类的实例     访问类的静态变量,或者为静态变量赋值     调用类的静态方法     初始化某个类的子类      使用反射机制方式来强制创建某个类或接口对应的java.lang.Class对象    来源: https://www.cnblogs.com/MarlonKang/p/12293781.html

Spring 循环引用(三)AbstractFactoryBean 如何解决循环依赖

佐手、 提交于 2020-02-11 08:49:11
目录 Spring 循环引用(三)AbstractFactoryBean 如何解决循环依赖 1. 循环依赖问题 2. 准备实验 3. 原因分析 4. 解决方案 5. 还有什么问题 6. 总结 Spring 循环引用(三)AbstractFactoryBean 如何解决循环依赖 Spring 系列目录: https://www.cnblogs.com/binarylei/p/10198698.html 本章讨论的范围:AbstractFactoryBean 创建单例 Bean 过程中出现的循环依赖问题,多例 Bean 的创建根本不会出现循环依赖,因为会直接抛异常。 1. 循环依赖问题 在 AbstractFactoryBean 中有一个特殊的属性 earlySingletonInstance,用于提前将 bean 暴露。第一次看到这个属性很奇怪: Spring IoC 容器已经解决了单例 bean 非构造器注入时的循环依赖问题,这里为什么还需要解决循环依赖? 对于单例 bean 而言,只有在 FactoryBean 初始化完成后才能获取对象,也就是先执行 afterPropertiesSet 再执行 getObject 方法,也就是说 initialized 在 getObject 应该为 true 才对,有可能为 false 吗? 带着疑问,我们先看一下代码: private T

C++11中新特性之:initializer_list详解

孤人 提交于 2020-02-11 07:03:03
C++11提供的新类型,定义在<initializer_list>头文件中。 template< class T > class initializer_list; 先说它的用处吧,然后再详细介绍一下。 首先有了initializer_list之后,对于STL的container的初始化就方便多了,比如以前初始化一个vector需要这样: int a[] = {0, 1, 2, 3}; std::vector<int> vec(a, a+sizeof(a)); 或者 std::vector<int> vec; vec.push_back(1); vec.push_back(3); vec.push_back(3); vec.push_back(2); 有了initializer_list后,就可以直接像初始化数组一样: class Test { private: static std::map<string, string> const nameToBirthday = { {"lisi", "18841011"}, {"zhangsan", "18850123"}, {"wangwu", "18870908"}, {"zhaoliu", "18810316"}, }; } 当然啦,里面的std::map必须提供参数为initializer_list的构造函数如: map( std