摘要:
数值表达式... 2 1. 奇偶判断... 2 2. 小数精确计算... 2 3. int整数相乘溢出... 3 4. 负的十六进制与八进制字面常量... 3 5. 窄数字类型提升至宽类型时使用符号位扩展还是零扩展... 4 6. ((byte)0x90 == 0x90)?. 5 7. 三元表达式( 阅读全文
摘要:
第十四章 标准函数库第十五章 经典抽象数据类型(ADT) 第十四章 标准函数库 算术<stdlib.h> int abs(int value); //求绝对值 long int labs(long int value); //对长整型求绝对值 div_t div(int denominator, i 阅读全文
摘要:
第十一章 高级指针话题 第十二章 预处理器 第十三章 输入/输出函数 第十一章 高级指针话题 指向指针的指针 int i; int *pi; int **ppi; 变量i 是一个整数,pi是一个指向整型指针,ppi是一个指向pi的指针,所以它是一个指向整型的指针的指针。 ppi = π这条语句 阅读全文
摘要:
第八章 结构和联合... 1 第九章 动态内存分配... 9 第十章 使用结构和指针(链表实现)... 14 第八章 结构和联合 在C中,使用结构可以把不同类型的值存储在一起。数组是通过下标访问,因为数组的元素长度相同,但是结构并不是这样,每个结构成员都有自己的名字,它们是通过名字来访问的。 结构变 阅读全文
摘要:
第十一章 序列化 74、 谨慎地实现Serializable接口 实现Serializable接口而付出的最大代价是,一旦一个类被发布,就大降低了“改变这个类的实现”的灵活性。如采用默认的序列化方式时(仅实现Serializable),且没有在一个名为serialVersionUID的私有静态fin 阅读全文
摘要:
第四章 指针... 1 第五章 函数... 14 第六章 数组... 17 第七章 字符(串)/节... 25 第四章 指针 指针代表地址,即使用名字来替换地址,它存储的就是一个地址值。名字与内存位置之间的关联并不是硬件所提供的,它是由编译器为我们实现的。这些指针变量名给了我们一种更方便的方法记住地 阅读全文
摘要:
第一章 快速上手... 1 第二章 数据... 2 第三章 操作符... 6 第一章 快速上手 要从逻辑上删除一段C代码,更好的办法是使用 #if 指令,这样即使这段代码之间原生存在注释(/**/)也没问题(/**/块注释是不能嵌套的),这是一种安全的方法: #if 0 statements #en 阅读全文
摘要:
第十章 并发 66、 同步访问共享的可变数据 许多程序员把同步的概念仅仅理解为一个种互斥的方式,即,当一个对象被一个线程修改的时候,可以阻止另一个线程观察到对象的内部不一致的状态。正确地使用同步可以保证其他任何方法都不会看到对象处于不一致的状态中。这种观点是正确的,但是它并没有说明同步的全部意义。如 阅读全文
摘要:
UNIX系统接口... 1 性能忠告... 7 可移植性忠告... 8 函数原型... 8 UNIX系统接口 文件描述符 在UNIX操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件,因此,所有的输入/输出都要通过读文件或写文件完成。 因为大多数的输入/输出是通过键盘和显示器来 阅读全文
摘要:
结构体... 1 sizeof3 类型定义(typedef)3 联合体(union)4 可变参数... 4 字符串操作函数... 5 字符测试和转换函数... 6 数学函数... 6 随机函数... 7 存储管理函数(malloc/ calloc)7 结构体 struct point { intx; 阅读全文
摘要:
初始化... 1 指针... 1 指针与地址... 3 指针与数组... 4 指针数组、数组指针... 5 int (*a)[3]、int *a[]区别... 6 几种不同指针的定义... 8 初始化 在不进行显示初始化时,外部变量与静态变量都将被初始化为0,而自动变量和寄存器变量的初值则没有定义。 阅读全文
摘要:
运算符的优先级... 1 字符串常量与字符数组... 1 字符串... 2 枚举常量... 3 C程序存储空间布局... 3 四种存储类别... 4 static. 5 const. 7 sizeof8 register. 8 位移规则... 9 函数默认返回值... 9 运算符的优先级 运算符 结 阅读全文
摘要:
数组... 1 extern. 3 “定义”与“声明”... 3 变量命名规则... 3 数据类型... 3 算术类型提升与转换规则... 5 void. 5 \000、\xhh. 5 ANSI C中所有转义字符... 6 \0. 6 数组 局部数组定义时如果未指定长度,又未指定数组内容,则编译报错 阅读全文
摘要:
第九章 异常 57、 只针对异常的情况才使用异常 也许你在将来会碰到下面这样的代码,它是基本异常模式的循环: try{ int i = 0; while(true) range[i++].climb(); }catch(ArrayIndexOutOfBoundsException e){ } 这所以 阅读全文
摘要:
第八章 通用程序设计 45、 将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明。 局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束外。如果变量是 阅读全文
摘要:
第六章 枚举和注解 30、 用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型,例如一年中的季节或一副牌中的花色。在没引入枚举时,一般是声明一组int常量,每个类型成员一个常量: public static final int APPLE_FUJI = 0; public sta 阅读全文
摘要:
第七章 方法 38、 检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有某些限制。例如,索引值必须是非负的,对象引用不能为null等,这些都是常见的。你应该在文档中清楚地指明所有这些限制,并且在方法体的开头处检查参数,以强制施加这些限制。 应该在方法和构造器体前进行了参数的有效性检查 阅读全文
摘要:
第五章 泛型 23、 请不要在新代码中使用原生态类型 声明中具有一个或者多个类型参数的类或者接口,就是泛型类或者泛型接口。泛型类和接口统称为泛型。 每种泛型可以定义一种参数化的类型,格式为:先是类或者接口的名称,接着用尖括号(<>)把对应于泛型的类型参数的实际类型参数列表括起来。 每个泛型都定义一个 阅读全文
摘要:
第四章 类和接口 13、 使类和成员的可访问性最小化 要区别设计良好的模块与设计不好的模块,最后重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部了数据和其他实现细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰地隔离开来。然后,模块之间只通过它们的API进行通信,一个 阅读全文
摘要:
第三章 对所有对象都通用的方法 8、 覆盖equals时请遵守通用约定 如果类具有自己特定的“逻辑相等”概念(不同于对象等同概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法,这通常属于“值类”的情形,例如Integer或者是Data,程序员在利用equals 阅读全文