变量

java内存模型规范学习总结

ぃ、小莉子 提交于 2020-02-29 16:29:17
java内存模型 复习jdk1.7虚拟机规范 了解java内存模型,需要我们对计算机硬件体系有一个基本掌握,要知道计算机里面的内存、高速缓冲、处理器、内存一致协议这些概念。 硬件系统内存模型 现代计算机为了解决处理器与存储设备之间性能冲突,引入了高速缓存,高速缓存读写速度接近处理器运算速度,为处理器单独使用。将运算需要使用到的数据复制到缓存种,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就不需要等待内存的读写了。 而在多处理器系统中,就涉及到 缓存一致性 问题,每个处理器都有自己的高速缓存,而它们又共享同一主内存。 内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程。 java内存模型 不同的物理架构可以拥有不一样的内存模型,而java内存模型就是为了解决各种物理机上内存访问差异而产生的,以实现让java程序在各种平台下达到一致的内存访问效果。 java内存模型的目标,是定义程序中各个变量的访问规则,即在虚拟机中将变量的存储到内存和从内存中取出变量这样的底层细节。 java内存模型规定所有的变量都存储在主内存。 线程拥有自己的工 作内存,保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作必须在工作内存中完成,不能直接操作主内存。 不同的线程不能直接访问对方的工作内存中变量,线程间变量值传递必须通过主内存来完成。

定义变量用var和不用var的区别。

那年仲夏 提交于 2020-02-29 15:04:36
应该说区别大家都清楚,用var定义就是作用域内变量,不用var就是全局变量。 实际上还有一个区别,用var定义的不能用delete删除,不用var的可以用delete删除,也就是说,实际上不用var定义的变量变成了某个对象的属性。 这是MDN上的说法: delete 操作符与直接释放内存(只能通过解除引用来间接释放)没有关系。可查看 内存管理 页面。 你可以使用 delete 操作符来删除一个隐式声明的全局变量,也就是没有使用 var 定义的全局变量.全局变量其实是global对象(window)的属性. 如果 delete 操作符删除成功,则被删除的属性将从所属的对象上彻底消失。然后,如果该对象的原型链上有一个同名属性,则该对象会从原型链上继承该同名属性。 举例如下: <script> var a = 3; //局部变量 b = 4; //隐性全局变量,实际是全局属性 alert(delete a); //局部变量不能通过delete操作符删除,返回false alert(delete b); //局部属性可以通过delete操作符删除,返回true alert(a); //未删除,可以找到 alert(b); //已删除,语法错误,undefined </script> 来源: https://www.cnblogs.com/jingubang/p/4633223.html

动态sql语句的执行(sp_executesql)

空扰寡人 提交于 2020-02-29 15:03:27
sp_executesql 的参数必须为UNICODE,即NCHAR,NVARCHAR,NTEXT型,否则报错 动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp

闭包基础知识点

让人想犯罪 __ 提交于 2020-02-29 14:19:51
什么是闭包 一个可以访问其他作用域的变量,并且能够记住所在的词法作用域的函数 怎么判断是一个闭包 当一个函数的返回值是另一个函数,这个返回的函数在原来所在的函数外部被执行了,并且访问了原来函数的变量,那这个上下文便产生了闭包环境 闭包的优点和缺点 优点 实现了可以访问其他作用域变量,并且避免了全局变量对自身词法作用域变量的污染 可以把局部变量(自身作用域的变量)驻留在内存中一直保存着上一次执行的值,不会被垃圾回收机制回收,从而避免使用全局变量 缺点 局部变量一直驻留在内存中不会被回收,导致内存被爆满,影响程序性能 闭包缺点的解决方案 建议在非常有必要的时候才使用闭包 使用完变量确定不再使用, 将null赋值给变量,var a = null; 闭包的常见形式 上面不少的例子解释什么是闭包,不难发现闭包存在的形式,就是一个满足闭包定义的各种条件的函数,而且常以匿名函数的形式出现(注意:并不是匿名函数都是闭包,二者不能等同) 形式一: function fun1(){ return function(){ //闭包主体 } } var res=fun1(); res();//闭包函数调用 形式二: (function(i){ //闭包主体 })(i);//闭包函数自调用 来源: CSDN 作者: W Y L 链接: https://blog.csdn.net/weixin

Java基础Note——面向对象01

早过忘川 提交于 2020-02-29 14:18:46
面向对象01 软件设计 原则: 可重用性,可拓展性,可维护性 面向对象的最小单位是类。 面向对象四大特征:封装,继承,多态,抽象 类和对象 特征:封装,继承,多态,抽象 关系:类是多个对象抽象出来的共性 对象是类的实例,类是对象的模板 类的定义 在面先过程中,专门为描述对象定义一个类,不需要main。 另外再创建测试类 内存分析 不同类型的成员变量的初始值就是各个类型的默认值。 对象的创建实质上类似于栈中有个指针,指向了堆空间中创建的一组数据。 对象打印和比较-生命周期-匿名对象 打印对象:对象名@hashcode.(哈希表中的值) 比较:对象直接 == 比较的是地址值 生命周期:new关键字在heap中开辟新空间创建,当堆中对象未被任何变量引用,且被GC回收时结束。 匿名对象:没有名称的对象,new Object();匿名对象在堆中开辟一块没有名称的对象, 只能使用一次 。 构造器 编译器在编译源文件时会默认创建一个缺省构造器,即默认的一个构造器。所以类中一定会有构造器 作用:1)构建对象,但是必须和new一起使用。2)完成对象初始化 特点 :构造器名称和当前类的名称相同;禁止使用返回类型,返回类型默认当前类的类型;不需要return; 构造器返回值是当前类的地址 new xxx(); 其实是调用类中的构造器创建对象。 编译器创建的默认构造器特点: 1)符合构造器特点。 2)无参

Makefile中的自动化变量

社会主义新天地 提交于 2020-02-29 13:48:08
Makefile中的自动化变量 1、$ @ 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$ @“就是匹配于 目标中模式定义的集合。 2、$ % 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a (bar.o)”,那么,"$ %“就是"bar.o”,"$@“就是"foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows 下是[.lib]),那么,其值为空。 3、 $ < 依赖中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。 4、 $ ? 所有比目标新的依赖的集合。以空格分隔。 5、 $ ^ 所有的依赖的集合。以空格分隔。如果在依赖中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 6、 $ + 这个变量很像"$ ^",也是所有依赖的集合。只是它不去除重复的依赖目标。 7、$ * 这个变量表示目标模式中"%“及其之前的部分。如果目标是"dir/a.foo.b”,并且目标的 模式是"a.%.b",那么,"$ *“的值就是"dir/a.foo”。这个变量对于构造有关联的文件名是比 较有效。如果目标中没有模式的定义,那么"$ *“也就不能被推导出,但是,如果目标文件的 后缀是 make 所识别的,那么”$ *“就是除了后缀的那一部分

php面向对象基础知识点总结

故事扮演 提交于 2020-02-29 13:17:44
下面是一些PHP面向对象基础知识的摘录,摘录内容来自PHP5.1手册。 1.类的变量成员叫做“属性”,或者叫“字段”、“特征”,在本文档统一称为“属性”。 2.属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是 在编译阶段之后在运行阶段运算出的常数。 3.在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性、 方法,但是 要访问类的静态属性或者在静态方法里面却不能使用,而是使用self::$property。 4.在类的非静态方法里面可以使用伪变量$this,这个伪变量是调用该方法的实例化对象引用 5.常量的值必须是一个定值,不允许修改,且不能是变量,类属性或其它操作(如函数调用)的结果。 <?php class MyClass { const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } } echo MyClass::constant . "\n"; $n=new MyClass(); $n->showConstant(); ?> 6.构造函数的类会在每次创建对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

继承中的关键字

点点圈 提交于 2020-02-29 11:22:09
继承中的关键字 1. 继承的基本含义: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。子类最基本的功能就是维持父类的基本操作,但是子类可以对其功能的扩充。 2. extends 格式:class A extends B { } 表示A类是B类的一个子类,B类是A类的 唯一 父类。 在Java当中的继承是单继承,不允许多继承(class A extends B,C),单继承就是子类只有一个唯一的父类,但是可以多重继承(class A extends B ,class B extends C)。 子类会显式继承父类当中所有的非私有化的成员变量和成员方法,所有的私有化成员可以通过Setter和Getter方法来操作,且构造方法不会被继承。 子类在继承父类成员的同时,可以进行扩展,定义属于自己的成员变量和成员方法,对其功能进行扩充。 3.super 功能1: 调用父类的成员变量和方法 。 子类继承父类中的成员变量和方法,当子类声明了与父类相同的成员变量以及对父类当中的成员方法进行重写之后,使用子类实例调用的成员变量与方法就是子类当中的成员变量和方法,而这时想要调用父类当中已经被重写被覆盖的成员就需要用到super关键字,在子类当中使用super关键字在调用成员变量和方法时会直接跳过子类

变量的解构赋值

◇◆丶佛笑我妖孽 提交于 2020-02-29 11:12:11
本文为学习笔记; 原文链接 <<<<转载请注明原文出处! 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 如果解构不成功,变量的值就等于 undefined 。 等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。 事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。 默认值 解构赋值允许指定默认值。 ES6 内部使用严格相等运算符( === ),判断一个位置是否有值。所以,只有当一个数组成员严格等于 undefined ,默认值才会生效。( null 不严格等于 undefined 。) 如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。 默认值可以引用解构赋值的其他变量,但该变量必须已经声明。 对象的解构赋值 解构不仅可以用于数组,还可以用于对象。 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。 与数组一样

PHP 字符串变量

回眸只為那壹抹淺笑 提交于 2020-02-29 10:25:54
PHP 中的字符串变量 字符串变量用于包含有字符的值。 在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。 在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。然后我们输出 txt 变量的值: 实例 <?php $txt="Hello world!"; echo $txt; ?> 运行实例 注释:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。 现在,让我们来看看一些常用的操作字符串的函数和运算符。 PHP 并置运算符 在 PHP 中,只有一个字符串运算符。 并置运算符 (.) 用于把两个字符串值连接起来。 下面的实例演示了如何将两个字符串变量连接在一起: 实例 <?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " " . $txt2; ?> 上面的代码将输出:Hello world! What a nice day! 提示:在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。 PHP strlen() 函数 有时知道字符串值的长度是很有用的。 strlen() 函数返回字符串的长度(字符数)。 下面的实例返回字符串 "Hello world!" 的长度: