【Effective java】第9章 读书笔记

第9章 通用编程

57,将局部变量的作用域最小化

要使局部变量地作用域最小化,最有力的方法时在第一次要使用它地地方进行声明。

几乎每一个局部变量地声明都应该包含一个初始化表达式。

for 循环优先于 while 循环。

58,for-each 循环优于传统的 for 循环

for-each 不会有性能损失,通过完全隐藏迭代器或者索引常量,避免了混乱和出错的可能。

以下三种情况不适合使用 for-each 循环

  • 解构过滤
  • 转换
  • 平行迭代

59,了解和使用类库

熟悉和使用标准类库,不要重复造轮子。

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

float 和 double 尤其不适合货币计算。

使用BigDecimal,int,long进行货币计算。

对于任何需要精确答案的计算任务,都不应该使用 float 和 double。

61,基本类型优于装箱基本类型

基本类型优于装箱基本类型的三个主要区别:

  1. 基本类型只有值,而装箱基本类型则具有与它们的值不同的同一性。
  2. 基本类型只有函数值,而装箱基本类型则都有一个非函数值(加了一个null)。
  3. 基本类型比基本装箱类型更节省空间和时间。

对装箱类型使用 == 操作符几乎总是错的。

62,如果其他类型更合适,请尽量避免使用字符串

字符串不适合代替其他的值类型。

字符串不适合替代枚举类型。

字符串不适合代替聚合类型。

字符串也不适合代替能力表

63,了解字符串连接的性能

为连接 n 个字符串而重复使用字符串连接操作符,需要 n 的平方级时间。

为了获得可以接受的性能,请用 StringBuilder 代替 String。用 append 连接字符串。

不要使用字符串连接操作符来合并多个字符串。

使用字符数组时,应该每次只处理一个字符串,而不是将它们组合起来。

64,通过接口引用对象

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

如果养成了接口作为类型的习惯,程序将会更加灵活。

如果没有合适的接口存在,完全可以用类而不是接口来引用对象。

65,接口优于反射机制

反射机制的缺点:

  • 损失了编译时类型检查的优势。
  • 执行反射访问所需的代码非常笨拙和冗长。
  • 性能损失。

如果编写的程序必须要与编译时未知的类一起工作,如果可能,就应该仅仅使用反射来实例化对象,而访问对象时则使用编译时已知的某个接口或者超类。

66,谨慎使用本地方法

JVM 已经越来越快,使用本地方法来提高性能的做法不值得提倡。

只有极少数情况需要使用本地方法来提高性能。如果必须要使用,则需要进行全面测试,因为本地代码中只要有一个 bug 就可能会破坏整个应用程序。

67,谨慎地进行优化

要努力写好的程序而不是快的程序。

熬努力避免那些限制性能的设计决策。

要考虑API设计决策的性能后果,

为获得好的性能而对API进行封装是一种不好的想法。

每次试图做优化之前和之后,要对性能进行测量。

68,遵守普遍地命名惯例

遵循阿里《Java开发手册》命名规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值