object

关于es6中对象的扩展

左心房为你撑大大i 提交于 2020-03-08 16:41:33
1.Object.is() es5比较两个值是否相等,只有两个运算符,相等(==) 和 严格相等(===),他们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0 等于 -0。es6提出了Object.is()方法,它用来比较两个值是否相等,与严格运算符(===)的行为基本一致 Object.is('foo', 'foo') //false     Object.is({} , {}) //false 不同之处只有两个, Object.is(+0, -0) // true Object.is(NaN , NaN) // true 2.Object.assign() Object.assign 方法用于将源对象的所有可枚举属性复制到目标对象 var target = { a: 1} var source = { b:2 } var source2 = { c: 3} Object.assign(target , source, source2) target // { a: 1, b: 2, c:3 } // 第一个参数是目标对象,后面的是源对象 注意:如果目标对象和源对象有重名属性, 或多个源对象有同名属性,则后面的属性会覆盖前面的属性 如果只有一个参数,Object.assign会直接返回该参数 var obj = { a: 1} Object.assign

关于Java占用内存的研究

独自空忆成欢 提交于 2020-03-08 12:35:14
这篇文章来自newsmthBBS java版原版主zms的经验总结,感觉挺不错。转到这里,以供参考。 最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验 简要说一下,相信会对大家写出优质的程序有所帮助 下面的论述针对32位系统,对64位系统不适用,后叙 经常你写了一个程序,一测试,功能没问题,一看内存占用也不多,就不去考虑其它的东西了。但可能程序使用了一个什么数据结构,会当数据规模变大时,内存占用激增。 基本&&关键的问题是,Java里各种东东占多少内存????????? 对于primitive类型,有8个 byte short int long float double char boolean 它们的长度分别是 1 2 4 8 4 8 2 1 这个不罗嗦了,举例来说 long[] data=new long[1000]; 占用内存 8*1000 bytes 此外,data本身是一个Object,也占用内存若干,后叙,当然它针对 8*1000来说,忽略不计 再说Object的占用,在说这个之前,先说说引用,一惯的说法是 Java里没有指针了,只有引用,引用是安全的 这个说法没错,但是从机理上来说,引用就是指针,只是jvm对指针的使用检查和限制很多,这个引用/指针变得很安全 直接来结论:一个引用占4byte ,在32位系统上 Object obj=null; /

zz 计算java内存使用

谁都会走 提交于 2020-03-08 12:34:58
版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 http://canyousee.blogbus.com/logs/3795658.html 最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验 简要说一下,相信会对大家写出优质的程序有所帮助 下面的论述针对32位系统,对64位系统不适用,后叙 经常你写了一个程序,一测试,功能没问题,一看内存占用也不多,就不去考虑其它的东西 了。但可能程序使用了一个什么数据结构,会当数据规模变大时,内存占用激增。 基本&关键的问题是,Java里各种东东占多少内存????????? 对于primitive类型,有8个 byte short int long float double char boolean 它们的长度分别是 1 2 4 8 4 8 2 1 这个不罗嗦了,举例来说 long[] data=new long[1000]; 占用内存 8*1000 bytes 此外,data本身是一个Object,也占用内存若干,后叙,当然它针对 8*1000来说,忽略不 计 再说Object的占用,在说这个之前,先说说引用,一惯的说法是 Java里没有指针了,只有引用,引用是安全的 这个说法没错,但是从机理上来说,引用就是指针,只是jvm对指针的使用检查和限制很多 ,这个引用/指针变得很安全 直接来结论

关于Java占用内存的研究

此生再无相见时 提交于 2020-03-08 12:32:58
最近对程序占用内存方面做了一些优化,取得了不错的效果,总结了一些经验 简要说一下,相信会对大家写出优质的程序有所帮助 下面的论述针对32位系统,对64位系统不适用,后叙 经常你写了一个程序,一测试,功能没问题,一看内存占用也不多,就不去考虑其它的东西了。但可能程序使用了一个什么数据结构,会当数据规模变大时,内存占用激增。 基本&&关键的问题是,Java里各种东东占多少内存????????? 对于primitive类型,有8个 byte short int long float double char boolean 它们的长度分别是 1 2 4 8 4 8 2 1 这个不罗嗦了,举例来说 long[] data=new long[1000]; 占用内存 8*1000 bytes 此外,data本身是一个Object,也占用内存若干,后叙,当然它针对 8*1000来说,忽略不计 再说Object的占用,在说这个之前,先说说引用,一惯的说法是 Java里没有指针了,只有引用,引用是安全的 这个说法没错,但是从机理上来说,引用就是指针,只是jvm对指针的使用检查和限制很多,这个引用/指针变得很安全 直接来结论:一个引用占4byte ,在32位系统上 Object obj=null; //4byte Object[] objs=new Object[1000]; //至少4

(十八)属性表

偶尔善良 提交于 2020-03-08 03:29:16
一、概念 上一章节讲述了方法表,方法体的内容就存放在属性表的“Code”中,如下图。 在Class文件、字段表和方法表都可以携带自己的属性信息,这个信息用属性表进行描述,用于描述某些场景专有的信息。 与Class文件中其它数据项对长度、顺序、格式的严格要求不同,属性表集合不要求其中包含的属性表具有严格的顺序,并且只要属性的名称不与已有的属性名称重复,任何人实现的编译器可以向属性表中写入自己定义的属性信息。虚拟机在运行时会忽略不能识别的属性,为了能正确解析Class文件,虚拟机规范中预定义了虚拟机实现必须能够识别的9项属性。 二、Code 属性 java程序方法体中的代码 经过javac编译器处理后,最终变为字节码指令 存储在Code 属性内。 Code属性出现在方法表的属性集合中,抽象类和接口不存在code属性。 code属性是class类文件中最重要的属性。class文件可以分为代码(code,方法体里面的Java代码)和元数据(Metadata,包括类,字段,方法定义及其他信息)两部分,code属性描述代码,其他数据项都用于描述元数据。 以上一章节的代码为例: public class Test { private int getAge(int userId){ return 10; } public Object getUserName(String sex,Object

代理与动态代理

删除回忆录丶 提交于 2020-03-07 17:42:19
概述 代理 生活中的代理: 比如暴雪又新出了一款游戏,作为一个中国用户,没有很好的方式直接从美国拿到游戏产品,就需要等到中国的某个代理商被暴雪授权代理,才可以玩上暴雪新出的这款游戏,那么代理的作用也就显而易见了,就是为了方便的适应一些不同地区的用户而产生的中间媒介,通过代理,可以更有效的将一些产品发行出去,生活中这样代理的例子比比皆是 程序中的代理: 如果一些实现了同一接口的类在实现方法的时候,有了新的需求,需要增加一些异常处理、日志、计算方法的运行时间、事务管理等操作,但是我们又不能去修改源代码,这样严重影响了程序的扩展性,这个时候,我们就可以使用代理,代理与目标类实现同一个接口,代表着代理类与目标类具有同名的方法,调用者不需要直接调用目标对象,而是使用代理间接调用目标对象的方法,并在这个过程中加入自己的处理代码,这就是程序中的代理 代理实现图示 代理可以处理的问题 系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示: 用具体的程序代码描述交叉业务: 交叉业务的编程问题即为面向方面的编程(Aspect oriented program ,简称AOP),AOP的目标就是要使交叉业务模块化。 可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,如下所示: 使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

Object.keys()

被刻印的时光 ゝ 提交于 2020-03-07 12:10:36
Object.keys(obj) ,返回一个数组,数组里是该obj可被枚举的所有 属性名 。请看示例: 示例一: function Pasta(grain, width, shape) { this.grain = grain; this.width = width; this.shape = shape; this.toString = function () { return (this.grain + ", " + this.width + ", " + this.shape); } } console.log(Object.keys(Pasta)); //console: [] var spaghetti = new Pasta("wheat", 0.2, "circle"); console.log(Object.keys(spaghetti)); //console: ["grain", "width", "shape", "toString"] 示例二: var arr = ["a", "b", "c"]; console.log(Object.keys(arr)); // console: ["0", "1", "2"] var obj = {0: "a", 1: "b", 2: "c"}; console.log(Object.keys(obj)); //

几个常见的定时器

蹲街弑〆低调 提交于 2020-03-07 10:54:39
NET允许不同的命名空间里存在同名的类——“System.Timers.Timer, System.Threading.Timer和Sytem.Windows.Forms.Timer”就是一个很好的例子。那么它们之间有何区别呢?我们这就来分析一下: [1]System.Windows.Forms.Timer:这个Timer是我们最最常见的一个Timer,主要用于一般Windows窗体编程时候的定时使用。(主要的属性:Interval——用于控制每隔多少时间出发一次Tick事件,Enabled——是否立即启动定时器,Tick事件——用于在Interval到时之后触发的行为)。 由于该Timer是相对整个WinForm(UI)上的异步操作,因此可以直接控制WinForm上的任何控件;不过缺陷在于既然是基于UI界面的主线程的异步操作,这将导致如果Timer执行一个长时间的任务,会导致界面死亡 ,这也就证明了Timer并非是我们一些人所谓的“多线程”(注意:笔者在这里“多线程”指代并行运行的线程,或者不会引发UI死掉的线程)。我们可以尝试这个代码(在Tick事件中): [C#] Thread.Sleep(10000); [VB.NET] Thread.Sleep(10000) 启动定时器之后,发现界面会假死10秒左右的时间。另外时间不一定精准(因为基于UI异步,或许会有延时等问题)。 [2

Java的三种代理模式

人走茶凉 提交于 2020-03-07 10:43:11
1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子 用图表示如下: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象 1.1.静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类. 下面举个案例来解释: 模拟保存动作,定义一个保存动作的接口:IUserDao.java,然后目标对象实现这个接口的方法UserDao.java,此时如果使用静态代理方式,就需要在代理对象(UserDaoProxy.java)中也实现IUserDao接口.调用的时候通过调用代理对象的方法来调用目标对象. 需要注意的是,代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法 代码示例:静态代理 /**

Vim: vimtutor

梦想的初衷 提交于 2020-03-07 09:50:23
对vimtutor的知识做一个复述 1. h,j,k,l; q!,wq x删除,i在当前光标出进入输入文本模式 2. [number] d object OR d [number] object   object = w | e | $ (当前到词末+空格,当前到词末,当前到行末) dd删除行 欲撤消以前的操作,請輸入︰u (小寫的u)     欲撤消在一行中所做的改動,請輸入︰U (大寫的U)     欲撤消以前的撤消命令,恢復以前的操作結果,請輸入︰CTRL-R 3. p粘贴一行到光标的下方 到一个地方按r+字符x,这个地方就变成了x cw删除从当前光标到K空白的word,然后进入文本模式 [number] c object 或者 c [number] object 就是d后+i 4. ctrl+g显示当前的信息(文件状态+行号+列号) shift+g跳到最后一行,number+shift+g跳到指定行 /string查找 ?string逆向查找 将光标放在(处,输入%匹配出括号 s/old/new 替换一行的第一个old为new;     s/old/new/g替换一行的所有的;     n,ms/old/new/g替换两行之间的     %s/old/new/g替换两行之间的 5. :!+命令 进行外部命令 :w +文件名 :#,#w FILENAME 可將當前編輯文件第