初始化

《java编程思想》多态与接口

我们两清 提交于 2020-04-05 18:56:10
向上转型   定义:把某个对象的引用视为对其基类类型的引用的做法被称为向上转型 方法调用绑定   将一个方法调用同一个方法主体关联起来被称作绑定。   前期绑定:程序执行前进行的绑定叫做前期绑定,前期绑定也是java中默认的绑定方式   后期绑定(动态绑定或运行时绑定):在运行时根据对象的类型进行绑定。在java中除了static方法和final方法之外,其他所有的方法都是后期绑定,也就是说,通常情况下,我们不用判断是否应该进行后期绑定,它会自动发生。 构造器和多态   构造器调用顺序:   (1) 调用基类构造器,此步骤会不断反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,一直到最低层的导出类   (2) 按声明顺序调用成员的初始化方法。   (3) 调用导出类构造器的主体       父类(静态变量、静态初始化块)>子类(静态变量、静态初始化块)>   父类(变量、初始化块)>父类构造器>子类(变量、初始化块)>子类构造器。(变量和初始化块按定义顺序初始化)     构造器内部的多态方法的行为   构造器调用的层次结构带来一个有趣的两难问题,如果在一个构造器的内部调用正在构造的对象的某个动态绑定方法,会发生什么情况呢?众所周知,在一般的方法内部,动态绑定的调用是在运行时才决定的,因为对象无法知道它是属于方法所在的类,还是属于那个类的导出类

Golang数组指针和指针数组

♀尐吖头ヾ 提交于 2020-04-04 22:49:49
数组很简单,有PHP基础一看就会,和PHP数组大不一样,不同的就是只有数字索引key,并且要指定类型 声明和初始化示例: package main import "fmt" func main() { // 声明 var arr1 [5]int arr1 = [5]int{1,2,3,4,5} // 声明并初始化 var arr2 [5]int = [5]int{1,2,3,4,5} // 直接初始化,只能在函数里 arr3 := [5]int{1,2,3,4,5} fmt.Println(arr1, arr2, arr3) } 数组循环,主要是for 和 for range 具体网上搜索一些会有很多教程,本文就不详细说,现在来点难的: 数组指针和指针数组: package main import "fmt" // 声明整形数组指针类型,表示该类型变量里存储的是一个数组的首地址 type arrPoint *[6]int func main() { // 声明并初始化数组,大小为6个元素整形数组,前5个数字是0,最后一个2 var a = [6]int{5: 2} var a1 = [6]int{5: 3} // 数组指针,变量的内容是数组的地址 var b arrPoint = &a var b1 arrPoint = &a1 // 指针数组,大小为2元素类型为arrPiont

硬核ArrayList源码分析,答应我每天看一遍好么

耗尽温柔 提交于 2020-04-04 19:03:20
一 前言 知识追寻者目前的系列都是基于jdk1.8进行学习分析;本篇源码分析会进行每步分析,当所有方法分析完最后还会做个大总结;如果不爱看源码分析步骤,只要面试最终结论的读者可以看看文末的总结就行了; 知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;) 二 ArrayList源码分析 2.2 空参构造方法源码分析 调试代码 public static void main(String[] args) { // 初始化长度为0 ArrayList list = new ArrayList();//断点 } 首先刚刚开始调到断点时,会默认显示ArrayList初始化长度为0; 其次进入构造方法 public ArrayList() { // elementData 是 Object[] ---> 故 Arraylist底层由对象数组实现 this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 可以看出就是一个DEFAULTCAPACITY_EMPTY_ELEMENTDATA 赋值给 elementData ; 先看看什么是DEFAULTCAPACITY_EMPTY_ELEMENTDATA,源码如下

PHP生命周期

随声附和 提交于 2020-04-04 18:42:28
PHP的整个生命周期被划分为以下几个阶段:模块初始化阶段、请求初始化阶段、执行脚本阶段、请求关闭阶段、模块关闭阶段。php的cli模式下每次执行一个脚本都会完整的经历这些阶段,而FastCgi模式下则只会在启动时执行一次模块初始化阶段,然后接下来的各个请求只会执行请求初始化阶段、脚本执行阶段,请求关闭阶段。 MINIT(module init 模块初始化) 启动 PHP 输出、初始化垃圾回收器 启动 Zend 引擎、注册 Zend 核心扩展、Zend 标准常量 解析 PHP.ini,映射 PHP.ini 相关配置 注册静态、动态编译的扩展 回调各扩展定义的 module starup 钩子函数 用一句话来说,就是初始化类、常量、扩展等 PHP 所用到的资源 RINIT(request init 请求初始化) PHP 初始化脚本执行的基本环境,SAPI 将控制权交给 PHP,激活 Zend 引擎,初始化执行器 PHP 脚本执行 Zend 引擎接管控制权,将 PHP 脚本编译成 Opcodes,并顺序执行 RSHUTDOWN (request shutdown 请求结束) PHP 脚本执行完之后进入请求结束阶段,PHP 启动清理程序,这个阶段,将 flush 输出内容,发送 http 响应内容,关闭 PHP 执行器 MSHUTDOWN(module shutdown 模块关闭)

深入理解ClassLoader工作机制(jdk1.8)

余生长醉 提交于 2020-04-04 11:41:23
ClassLoader 顾名思义就是类加载器,ClassLoader 作用: 负责将 Class 加载到 JVM 中 审查每个类由谁加载(父优先的等级加载机制) 将 Class 字节码重新解析成 JVM 统一要求的对象格式 类加载时机与过程 类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking)。 其中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的“开始”(仅仅指的是开始,而非执行或者结束,因为这些阶段通常都是互相交叉的混合进行,通常会在一个阶段执行的过程中调用或者激活另一个阶段),而解析阶段则不一定(它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定。 什么情况下需要开始类加载过程的第一个阶段:”加载”。虚拟机规范中并没强行约束,这点可以交给虚拟机的的具体实现自由把握,但是对于初始化阶段虚拟机规范是严格规定了如下几种情况,如果类未初始化会对类进行初始化: 创建类的实例 对类进行反射调用的时候,如果累没有进行过初始化,则需要先触发其初始化 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化 当虚拟机启动时,用户需要指定一个要执行的主类

数组的基本理解

♀尐吖头ヾ 提交于 2020-04-04 09:32:57
概念 存储数据长度固定的容器,且存储数据的数据类型一致 定义格式 1.数据类型[] 数组名; 2.数据类型 数组名[]; 数组的初始化 1.动态初始化:创建数组时只给定数组的长度,由系统给出默认的初始化值 2.静态初始化:创建数组时直接将元素确定 //创建一个长度为6的数组 //1.动态初始化 int[] arr1 = new int[6]; for(int i = 0 ; i < arr1.length ;i++){ System.out.println(a[i]);//整数类型初始化默认是0 } //2.静态初始化 int[] arr2 = new int[]{1,2,3,4,5,6}; for(int i = 0 ; i < arr2.length ;i++){ System.out.println(a[i]);//数组索引默认从零开始 } //数组静态初始化简写格式 int[] arr3 = {1,2,3,4,5,6}; 数组元素的访问 每个存放到数组中的元素,都会有一个编号,称之为索引, 通过数组的索引访问到数组中的元素 访问格式:数组名[索引] //默认编号从0开始 通过地址找到数组,通过索引找到元素 数组在内存中的存储 数组是一个引用变量,在内存中分区存储 数组变量-->栈里面 数组元素-->堆里面 通过栈里面的地址去找对应的数组,然后根据索引找对应位置的元素 /

git初始化

倾然丶 夕夏残阳落幕 提交于 2020-04-04 07:49:05
一、git基本配置 在https://github.com/中下载git后,安装并运行git 1.首先检测SSH keys,若已经存在key,则直接进入第三步 cd ~/.ssh 2.将原来的SSH keys备份并删除 mkdir key_backupcp id_rsa* key_backuprm id_rsa* 3.创建一个新的SSH key ssh-keygen -t rsa -C "your_email@youremail.com"Creates a new ssh key using the provided email Generating public/private rsa key pair.#此处输入将要保存的路径,默认为当前路径Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<press enter>输入回车后提示输入一个类似于密码的自定义的通行证号,如果直接回车则为空Enter passphrase (empty for no passphrase):<enter a passphrase>#提示重新输入以便确认输入是否正确Enter same passphrase again:<enter passphrase again> 如果看到Your public

直接初始化与复制初始化

淺唱寂寞╮ 提交于 2020-04-04 07:48:36
这是C++中所支持的两种初始化方式。 复制初始化使用=符号,而直接初始化将初始化式放在圆括号中。 (1)对于一般的内建类型,这两种初始化基本上没有区别。 int a(5);//直接初始化 int a=5;//复制初始化 int a=int (5);//直接初始化 (2)当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象。 string null_book = "9-999-99999-9 ";//copy-initialization string dots(10, '. ');//direct-initialization string empty_copy = string();//先direct,然后copy-initialization string empty_direct;//direct-initialization 对于类类型对象,只有指定单个实参或显式创建一个临时对象用于复制时,才使用复制初始化。 创建dots时,调用参数为一个数量和一个字符的string构造函数并直接初始化dots的成员。创建null_book时,编译器首先调用接受一个C风格字符串形参的string构造函数

初始化 反初始化

纵饮孤独 提交于 2020-04-04 07:48:21
//=============================== /* 1. 初始化是为类、结构体或者枚举准备实例的过程。这个过程需要给实例里的每一个存储属性设置一个初始值并且在新实例可以使用之前执行任何其他所必须的配置或初始化 2. 你通过定义初始化器来实现这个初始化过程,它更像是一个用来创建特定类型新实例的特殊的方法。不同于 Objective-C 的初始化器, Swift 初始化器不返回值。这些初始化器主要的角色就是确保在第一次使用之前某类型的新实例能够正确初始化。 3. 类类型的实例同样可以实现一个反初始化器,它会在这个类的实例被释放之前执行任意的自定义清理 */ // 在创建类和结构体的实例时必须为所有的存储属性设置一个合适的初始值。存储属性不能遗留在不确定的状态中。你可以在初始化器里为存储属性设置一个初始值,或者通过分配一个默认的属性值作为属性定义的一部分 // 初始化器在创建特定类型的实例时被调用。在这个简单的形式中,初始化器就像一个没有形式参数的实例方法,使用 init 关键字来写: //init(){ // //} // struct Fahrenheit { var temperature: Double init () { temperature = 10.0 } } let fahren = Fahrenheit() print( "value is \

经典乱码“烫烫烫”和“屯屯屯”

拈花ヽ惹草 提交于 2020-04-03 21:34:15
感觉这几天有人对我的网名感兴趣,今天我就简单介绍一下我的网名由来。 程序猿有个经典的内部笑话:手持两把锟斤拷,口中疾呼烫烫烫。 写过代码的人都碰到过。 烫烫烫和屯屯屯产生自VC,这是debug模式下VC对内存的初始化操作。VC会把栈中新分配的内存初始化为0xcc,而把堆中新分配的内存初始化为 0xcd。(0xcc恰好是终端指令int 3,算是保护吗?)把0xcc和0xcd按照字符打印出来,就是烫和屯了。 还有锟斤拷,这个是字符编码造成的。在进行从老的编码体系到unicode的转换过程中,部分字符不能转化,于是unicode给了它们一个特殊的占位符 U+FFFD,这个用UTF-8表示就成了\xef\xbf\xbd。如果出现两个连着的\xef\xbf\xbd\xef\xbf\xbd,按照两个字 节一个字显示成汉字,就成了锟斤拷这三个字。 来源: https://www.cnblogs.com/cjjjs/p/4905980.html