effective-java读书笔记

笔记的出发点:摘录了些自己觉得使用的建议。

类和接口

摘抄些关于类的设计的建议

  • 类和成员变量的可访问性最小,通过public,protect,private控制。这也支持了java封装的特性。
  • 建议暴露公有类中的成员变量的访问方法而不是直接暴露成员变量
  • 减少类的可变性,因为他们不容易出错和更加安全。减少类的可变性的方法:不提供改变对象状态的方法;使用final保证类不被扩展;所有的域设置成final;确保可变的组件要互拆访问。
  • 组合优于继承

枚举类

阅读前的理解:使用枚举可以面的这些好处

  • 枚举类可以用来代替静态变量来定义一些魔法值或者字符串
  • 清晰的定义业务的可选范围
  • 复用性好
  • 提供遍历枚举值的方法

int枚举模式的不足:

  • 没有类型安全校验。比如商品上架状态为1,商品的商品类型为1,都可以用传的参数为int的接口中
  • 遍历一个业务场景下int的范围,不方便

书中介绍的优点:

  1. 类型安全校验,接口的参数定义成枚举型,可以类型安全校验。比如商品上架状态为1,商品的商品类型为1,都可以用传的参数为int的接口中。但是用枚举类就不能随意传。
  2. 枚举中可以抽象方法,每个枚举中的都定义自己的实现。
  3. 每个枚举都有个oridinal方法,它返回它在枚举中的位置,从0开始。因为它会随枚举对象的位置而变化,所以不能用它进行业务判断。

方法

自己可以想到的一些建议:

  • 方法的职能要单一,名称要驼峰命名
  • 方法的参数不要太多

书中的建议:

  • 方法的开头处,校验参数的有效性,防止程序计算过程中发生出乎意料的异常
  • 慎用重载,特别是当重载方法的参数列表长度一样,且重载的参数间存在继承关系。比如说下面的方法
public void a (List arg){
}

public void a (Collection arg){
}
  • 返回0长度的数组或者集合,而不是返回null。理由:调用方可能会忘记处理null值的返回,空集合对内存和性能的消耗很少。
  • 为方法编写注释。注释包含的部分:方法为什么要这么设计的理由,而不是对代码的简单称述,调用方法的前置条件(往往是受检的参数),可能的副作用比如:使用的es的查询接口,那么它的副作用是不能查询到实时的数据

通用设计

摘要一些代码书写方面的建议

  • 将局部变量的作用域最小化,实践方式,在第一次用到它的地方进行声明。可以提升代码的可读性和可维护性
  • 使用for-each循环替代for循环,for循环需要引用索引取值,使用不慎可能会报数组越界的问题。for-each使用方法更加简洁,且性能不差
  • 如果需要精确的答案,请避免使用float和double,可以使用BigDecimal。需注意创建bigdecimal对象时传入double类型的数据也是不行的,如BigDecimal bigDecimal = new BigDecimal(0.01);这样构建出来的对象也是不准确的。
  • 如果有其他类型更合适,尽量避免使用字符串。数值,请使用数字型。若是“是”“否”这种可以使用布尔类型
  • 当心字符串连接的性能,特别是在for循环中拼接字符串,可以考虑使用stringBuilder代替
  • 通过接口引用对象,这样更灵活
  • 接口优于反射,反射机制设计的初衷是为基于组件的应用设计的,它会比普通的方法调用慢上几倍甚至几十倍。比如不要使用BeanUtils.copyProperties构建对象,会比较慢,首次构造的时间会在百毫秒级别。
  • 接受普遍的命名惯例。包名:小写,每个部分用句号分开;类名:驼峰,首字母大写;方法名:驼峰,首字母小写;变量名:驼峰,首字母小写;常量:所有字母大写,每个单词用下划线分开
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值