对象数组

Java语言程序设计-第10版notes

半城伤御伤魂 提交于 2020-03-07 16:59:59
第1章 计算机、程序和Java概述 部分章节小结 1、编程错误可以分为三类:语法错误、运行时错误和逻辑错误。编译器报告的错误称为语法错误或者编译错误;运行时错误指引起程序非正常结束的错误;而当一个程序没有按照预期的方式执行时,产生逻辑错误 。 第2章 基本程序设计 部分章节小结 1、拓宽类型不需要显式转换,缩窄类型必须显式完成。 123456 int i=9;double d=i;//缩窄类型转换double d=9.0;int i=(int)d; 2、计算机科学中,1970年1月1日午夜零点为UNIX时间戳。 第3章 选择 部分章节小结 1、除开赋值操作符的所有二元操作符都是左结合的,赋值操作符是右结合的。(此处的结合指的是结合律) 123456 //以下两个表达等价a-b+c-d((a-b)+c)-d//以下两个表达等价a=b+=c=5a=(b+=(c=5)) 第4章 数学函数、字符和字符串 部分章节小结 1、字符 ‘ ‘ 、t、 f、 r 和 n 都称为空白字符。 2、字符可以基于它们的Unicode码使用关系操作符进行比较。 第6章 方法 部分章节小结 1、程序模块化和可重用性是软件工程的中心目标之一。 2、方法可以重载,这意味着两个方法可以拥有相同的方法名,只要它们的参数列表不同即可。 3、方法抽象是把方法的应用和实现分离,用户可以在不知道方法是如何实现的情况下使用方法

C++之指针、引用、数组、堆区栈区

此生再无相见时 提交于 2020-03-07 12:41:28
指针 指针(pointer)是一个值为内存地址的变量(或数据对象) 基本用法 数据类型 * 指针变量名 如 int * ptr_num 注意: Int* p 写法偏向地址 P是一个地址变量 表示一个十六进制地址 Int *p偏向值 *p是一个整型变量 能够表示一个整型值 给指针赋值只能使用&符号 空指针(null pointer)空指针不指向任何对象,在试图使用一个指针之前首先检查是否为空 Int *ptr1 = nullptr; 如果用null需要包含cstdlib Void 指针 一种特殊的指针类型 可以存放任意对象的地址 注意: void 指针存放一个内存地址,地址指向的内容是什么类1、型不能确定 2、Void 类型指针一般用来:拿来和别的指针比较,作为函数的输入和输出;赋值给另一个void 指针 指针小结: 指针同样是一个变量,只不过该变量中存储的是另一个对象的内存地址 如果一个变量存储另一个对象 的地址,则称该变量指向这个对象 指针变量可以赋值 指针的指向在程序执行中可以改变 指针P在执行中某时刻指向变量x在另一时刻可以指向y 注意: 指针命名规则和其他变量命名规则一样 指针不能与现有变量重名 应为指针指定一个地址后才能在语句中使用指针 引用 为对象起了另外一个名字(引用即别名) Int int_value = 1024; //refValue指向int_value

ConcurrentHashMap 的实现原理

若如初见. 提交于 2020-03-07 08:57:19
概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合。其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉及到多个线程,并且有读有写的过程中,HashMap 就不能满足我们的需要了(fail-fast)。在不考虑性能问题的时候,我们的解决方案有 Hashtable 或者Collections.synchronizedMap(hashMap),这两种方式基本都是对整个 hash 表结构做锁定操作的,这样在锁表的期间,别的线程就需要等待了,无疑性能不高。 所以我们在本文中学习一个 util.concurrent 包的重要成员,ConcurrentHashMap。 ConcurrentHashMap 的实现是依赖于 Java 内存模型,所以我们在了解 ConcurrentHashMap 的前提是必须了解Java 内存模型。但 Java 内存模型并不是本文的重点,所以我假设读者已经对 Java 内存模型有所了解。 ConcurrentHashMap 分析 ConcurrentHashMap 的结构是比较复杂的,都深究去本质,其实也就是数组和链表而已。我们由浅入深慢慢的分析其结构。 先简单分析一下,ConcurrentHashMap 的成员变量中,包含了一个 Segment 的数组( final

JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别

随声附和 提交于 2020-03-07 08:25:40
ECMAScript将对象的属性分为两种: 数据属性 和 访问器属性 。每一种属性内部都有一些特性,这里我们只关注对象属性的[[Enumerable]]特征,它表示是否通过 for-in 循环返回属性,也可以理解为:是否可枚举。然后根据具体的上下文环境的不同,我们又可以将属性分为: 原型属性 和 实例属性 。原型属性是定义在对象的原型(prototype)中的属性,而实例属性一方面来自己构造函数中,然后就是构造函数实例化后添加的新属性。   本文主要介绍JavaScript中获取对象属性常用到的三种方法的区别和适用场景。 一、for..in循环   使用for..in循环时,返回的是所有能够通过对象访问的、可枚举的属性,既包括存在于实例中的属性,也包括存在于原型中的实例。这里需要注意的是使用for-in返回的属性因各个浏览器厂商遵循的标准不一致导致对象属性遍历的顺序有可能不是当初构建时的顺序。( 实例+原型中的可枚举属性 ) 1、遍历数组   虽然for..in主要用于遍历对象的属性,但同样也可以用来遍历数组元素。 var arr = ['a', 'b', 'c', 'd']; // 使用for..in for (var i in arr) { console.log('索引:' + i + ',值:' + arr[i]); } // 使用for循环 for (var j = 0;

50 前端--Javascript

拟墨画扇 提交于 2020-03-07 06:56:55
目录 Javascript ECMAScript和JavaScript的关系 1. js代码引入 2. 数据类型 var 数值类型(number) 字符串(string) 布尔值(boolean) null 和 undefined Object类型 Symbol 类型 3. 类型查询 typeof 4. 运算符 算术运算符 比较运算符 逻辑运算符 赋值运算符 5. 流程控制 单条件 多条件判断 switch 切换 (case语句) 6. for循环 7. while循环 8. 三元运算 9. 函数 普通函数 匿名函数 自执行函数 函数的全局变量和局部变量 作用域 闭包 10. 构造函数(面向对象) 11. Date对象 12. JSON 13. RegExp对象(正则) Math对象 Javascript ECMAScript和JavaScript的关系   1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。   该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标

JavaScript里的数组Array使用方法总结,超全的o

試著忘記壹切 提交于 2020-03-07 03:26:51
一直以来都想来总结一下js的数组使用方法,因为有时候时间一长有的方法就记不太清,突然要用的时候还要去查,这里做下总结,自己巩固一下同时也方便以后有缘人一起来看 😁 首先我们先来看一下谷歌浏览器里Array内置的方法有多少,如下↓ 真是不看不知道,一看吓一跳,在我印象里数组的使用方法加上ES6新语法最多也就十几个吧 这里我数了一下从concat到valueOf总共 37 个(你敢信,无知啊),下面的“__”开头的就暂时不说了 ----------------这里我们先来说一下最常用的几个,然后再一个一个解读剩下的---------------- 1.Array.push() -+-向数组的末尾添加一个或更多元素,并返回新的长度。 let arr = [1,2,3]; console.log(arr.push(6)); // 4 console.log(arr)      // [1, 2, 3, 6] 2.Array.pop() -+-删除数组的最后一个元素,并返回删除的元素。 let arr = [1,2,3]; console.log(arr.pop()); // 3 console.log(arr)    // [1, 2] 3.Array. unshift() -+-向数组的开头添加一个或更多元素,并返回新的长度。 let arr = [1,2,3]; console.log

十二、 C++特性之 杂合

一笑奈何 提交于 2020-03-06 23:50:02
static_assert和 type traits static_assert提供一个编译时的断言检查。如果断言为真,什么也不会发生。如果断言为假,编译器会打印一个特殊的错误信息。 template < typename T, size_t Size> class Vector { static_assert(Size < 3, "Size is too small"); T _points[Size]; }; int main() { Vector< int, 16> a1; Vector< double, 2> a2; return 0; } error C2338: Size is too small see reference to class template instantiation 'Vector<T,Size>' being compiled with [ T= double, Size=2 ] static_assert和type traits一起使用能发挥更大的威力。type traits是一些class,在编译时提供关于类型的信息。在头文件<type_traits>中可以找到它们。这个头文件中有好几种 class: helper class,用来产生编译时常量。type traits class,用来在编译时获取类型信息,还有就是type

object-c 一些用法(转)

时光毁灭记忆、已成空白 提交于 2020-03-06 14:25:26
1. 设置实例变量值的方法通常称为设置函数 setter, 而用于检索实例变量值的方法叫做获取函数 getter.getter 一般为变量名 , 而 setter 一般为 set+ 变量名 ( 第一个字母大写 ). 2. 合成存取器方法 : 在接口定义部分使用 @property 指令标识属性 , 然后在实现部分使用 @synthesize 指令即可 . eg: @property int sum; @synthesize sum; 3. 创建方法名时 , 参数名实际上是可选的 . 如 -( int ) set: ( int )n :( int ) d; 这个方法名为 : set::, 要调用这个方法如下 : [ aFraction set: 1 : 3 ]; 4. 静态变量声明仍为 static 关键字修饰 , 如 : static int hiCount=; 5. 有一个名为 new 的方法可以将 alloc 和 init 的操作结合起来 . eg: Fraction *myFraction = [Fraction new ]; 6. id 类型可以存任何的对象 , 而且对于返回值和参数类型来说 , id 是默认的类型 , 如下声名了一个返回为 id 类型的方法 . eg: -allocInit; 7. 承继时方法的调用 : 首先检查该对象所属的类 , 如果有指定名称的方法 ,

JavaScript引用类型

折月煮酒 提交于 2020-03-06 13:45:34
引用类型虽然看起来和类很相似,但是它们却是不同的概念,引用类型的值,也就是对象是引用类型的一个实例。在Js中引用类型主要有Object,Array,Date,正则,Function等。 数组Array   在Js中数组可以存储任意的数据,而且它的大小是可以动态调整的。创建数组可以使用构造函数的方式也可以使用字面量的形式,另外可以使用concat从一个数组中复制一个副本出来。 方法:    length 数组的长度    toString 将数组转换为一个字符串,并且返回这个字符串,相当于是调用了下join(',')    join 把数组中的所有元素放入一个字符串中,元素通过指定的分隔符进行分割的。如果省略参数,则会使用逗号作为分隔符。    push 向数组末尾添加一个或者多个元素,并返回新的长度。    pop 删除数组中的最后一项,把数组的长度减1,并且返回它被删除元素的值,如果数组变为空,则该方法不改变数组,返回undefine值。    shift 删除数组的第一项,返回值同pop    unshift 是向数组的开头添加一个或者更多元素,并返回新的长度。    reverse 倒序    concat 该方法用于连接2个或者多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。如果连接多个数组,使用逗号隔开。    sort 该方法是对数组的元素进行排序

《C++ Primer(第五版)》第六章笔记

旧城冷巷雨未停 提交于 2020-03-06 08:53:59
6.1 函数基础   通过 调用运算符 来执行函数。函数的调用完成两项工作:用实参初始化函数的形参;将控制权转移给被调用函数。   当遇到一条 return 语句时函数结束执行过程。return 也完成两项工作:返回 return 语句中的值;将控制权从被调用函数转移回主调函数。 形参和实参   形参出现在函数定义的地方,实参出现在函数调用的地方。实参是形参的初始值,实参的类型必须与对应的形参类型相匹配。   任意两个形参都不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名字(外层局部变量被内部形参隐藏)。 6.1.1 局部对象   对象的 生命周期 是程序执行过程中该对象存在的一段时间。   形参和函数体内部定义的变量统称为 局部变量 。局部变量会 隐藏 在外层作用域中同名的其他所有声明中。   只存在于块执行期间的对象称为 自动对象 。    局部静态对象 在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁。内置类型的未初始化局部变量产生未定义的值,内置类型的局部静态变量初始化(值初始化)为 0。 6.2 参数传递   形参的类型决定了形参和实参交互的方式。当形参是引用类型时,其对应的实参被 引用传递 或函数被 传引用调用 ;当实参的值被拷贝给形参时,实参被 值传递 或函数被 传值调用 。 6.2.1 传值参数