effective java(8)-通用程序设计

第45条 将局部变量的作用与最小化

  要是局部变量的作用与最小化,最有力的方法就是在第一次使用它的地方声明。

  for循环优于while循环,for循环定义的变量作用与仅限于循环内,while需要初始化变量

  对局部变量作用域最小化的循环做法:

1
2
3
for( int i = 0 , n= computeSize(); i<n; i++){
...
}

第46条 for-each循环优于传统for循环

  使用for-each循环不会有性能损失,对于数组也一样

  三种情况不适用for-each:

  1. 过滤集合元素
  2. 改变集合元素
  3. 平行迭代,如集合a,b,每次迭代顺序取得a,b第n个元素

第47条 了解使用类库

  熟悉java.lang, java.utils, java.io

如果需要精确答案,避免使用float和double

  float和double是为了在广泛的数值上提供较为精确结果的场合设计的, 不能提供完全精确的结果,尤其不适合货币计算

  如果计算小数,使用bigdecimal,但是使用繁琐、性能较差;若对性能有要求,可以改变单位使用int或者long。

第49条 基本类型优于装箱基本类型

  对装箱基本类型运用==操作符几乎总是错误的
装箱基本类型导致高开销和不必要的对象创建

第50条 如果其他类型更合适,避免使用字符串

  金科玉律,在做工作时能明显感受到字符串操作造成的性能影响

  1. 字符串不适合代替其他类型
  2. 字符串不适合代替聚集类型,如String key = className + “#” + i.next();
  3. 字符串不适合代替能力表(unforgeable key, 也被叫做能力表capability)

第51条 当心字符串链接的性能

  不要使用“+”连接字符串,使用StringBuilder

第52条 使用接口引用对象

  如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,都应该使用接口类型声明。

第53条 接口优先于反射机制

反射缺点:

  1. 无法进行编译时类型检查(checked exception),包括异常检查
  2. 实现反射功能的代码复杂(是否考虑实现内部反射模块,降低反射代码编写成本)
  3. 性能损失

第54条 谨慎的使用本地方法

尽量少使用JNI方法,弊端如下:

  1. 本地语言不安全,可能受到内存损坏错误影响
  2. 本地语言与平台相关,使程序不可跨平台执行
  3. 程序难以调试
  4. 如果功能简单,本地语言会使性能下降
  5. 程序阅读性变差

第55条 谨慎地进行优化

  不要因为性能牺牲合理的结构。

  1. 在设计过程中,应避免那些限制性能的设计决策。
  2. 要考虑API设计决策的性能后果。公有类如果可变,会造成大量保护性拷贝。

第56条 遵守普遍接受的命名惯例

  1. 包的名称应该是层次状的,用句号分割每部分。其名称以你的组织的internet域名开头,且顶级域名放在前面。
  2. 包名称的其他部分应该包括一个或多个描述该包的组成部分,通常不超过8个字符
  3. 类和接口的名称首字母大写,尽量避免使用缩写,除非是通用缩写。类名通常用一个名词或名词短语命名。
  4. 方法和域名与类和接口命名方式一样,只不过首字母要小写。方法通常用动词短语命名,对于返回boolean类型的方法,往往以is开头;类型转换通常被命名为toType;返回视图往往被命名为asType。
  5. 常量域包含一个或多个大写的单词,中间用下划线隔开,这是唯一推荐使用下划线的场景
-------------本文结束感谢您的阅读-------------

本文标题:effective java(8)-通用程序设计

文章作者:小建儿

发布时间:2018年05月06日 - 13:05

最后更新:2018年11月17日 - 18:11

原始链接:http://yajian.github.io/effective-java-8-通用程序设计/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。