Effective Java之通用程序设计 总结

第45条 将局部变量的作用域最小化
要使局部变量的作用域最小化 最有力的方法就是在第一次使用它的地方声明
几乎每个局部变量的声明都应该包含一个初始化表达式
如果在循环终止之后不再需要循环变量的内容 for循环就优先于while循环
for (int i = 0, n = expensiveComputation(); i < n; i++) {}
第二个变量n被用来保存第一个变量的极限值 从而避免在每次迭代中执行冗余计算的开销
使方法小而集中

第46条 for-each循环优先于传统的for循环
有三种常见的情况无法使用for-each循环
过滤 转换 平行迭代

第47条 了解和使用类库
通过使用标准类库 可以充分利用这些编写标准类库的专家的知识 以及在你之前的其他人的使用经验
在每个重要的发行版本中 都会有许多新的特性被加入到类库中 所以与这些新特性保持同步是值得的

第48条 如果需要精确的答案 请避免使用float和double
float和double类型尤其不适合用于货币计算 它们执行二进制浮点运算
如果你想让系统来记录十进制小数点 并且不介意因为不使用基本类型而带来的不便 就请使用BigDecimal

第49条 基本类型优先于装箱基本类型
当在一项操作中混合使用基本类型和装箱基本类型时 装箱基本类型就会自动拆箱
基本类型更加简单 也更加快速
自动装箱减少了使用装箱基本类型的繁琐性 但是并没有减少它的风险

第50条 如果其他类型更适合 则尽量避免使用字符串
字符串不适合代替其他的值类型
字符串不适合代替聚集类型
字符串也不适合代替能力表
若使用不当 字符串会比其他的类型更加笨拙 更不灵活 速度更慢 也更容易出错

第51条 当心字符串连接的性能
为连接n个字符串而重复地使用字符串连接操作符 需要n的平方级的时间
为了获得可以接受的性能 请使用StringBuilder替代String
不要使用字符串连接操作符来合并多个字符串 除非性能无关紧要 相反 应该使用StringBuilder的append方法 另一种方法是 使用字符数组 或者每次只处理一个字符串 而不是将它们组合起来

第52条 通过接口引用对象
如果有合适的接口类型存在 那么对于参数 返回值 变量和域来说 就都应该使用接口类型进行声明
如果你养成了用接口作为类型的习惯 你的程序将会更加灵活
如果没有合适的接口存在 完全可以用类而不是接口来引用对象

第53条 接口优先于反射机制
核心反射机制丧失了编译时类型检查的好处
执行反射访问所需要的代码非常笨拙和冗长
性能损失
通常 普通应用程序在运行时不应该以反射方式访问对象
如果只是以非常有限的形式使用反射机制 虽然也要付出少许代价 但是可以获得许多好处 对于有些程序 它们必须用到在编译时无法获取的类 但是在编译时存在适当的接口或者超类 通过它们可以引用这个类 如果是这种情况 就可以以反射方式创建实例 然后通过它们的接口或者超类 以正常的方式访问这些实例
反射机制是一种功能强大的机制 对于特定的复杂系统编程任务 它是非常必要的 但它也有一些缺点 如果你编写的程序必须要与编译时未知的类一起工作 如有可能 就应该仅仅使用反射机制来实例化对象 而访问对象时则使用编译时已知的某个接口或者超类

第54条 谨慎地使用本地方法
使用本地方法来提高性能的做法不值得提倡
如果你必须要使用本地方法来访问底层的资源 或者遗留代码库 也要尽可能少用本地代码 并且要全面进行测试 本地代码中的一个Bug就有可能破坏整个应用程序

第55条 谨慎地进行优化
要努力编写好的程序而不是快的程序
努力避免那些限制性能的设计决策
要考虑API设计决策的性能后果
为获得好的性能而对API进行包装 这是一种非常不好的想法
在每次试图做优化之前和之后 要对性能进行测量

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

标识符类型例子
com.google.inject, org.joda.time.format
类或者接口Timer, FutureTask, LinkedHashMap, HttpServlet
方法或者域remove, ensureCapacity, getCrc
常量域MIN_VALUE, NEGATIVE_INFINITY
局部变量i, xref, houseNumber
类型参数T, E, K, V, X, T1, T2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值