这几章看的比较快,内容就如同标题一样比较容易理解,所以只有部分内容会在[]中解释,其他的就直接理解标题,并不影响阅读质量。
不过如果时间充足的话,还是仔细读一读原书的内容,相信还是有所收获的。主要最近自己想进入算法与机器学习部分,尽快结束这本书。
另一方面,讨论一些自己感兴趣的内容,我会将搞过的东西总结下。后面可能写一部分关于java字节码阅读以及编写的东西。只所以这么来,
是因为字节码编程还是非常用途实际的,这一"java编译语言"使得String与StringBuilder的性能对比又有了新的认知,为了更好的编写程序,
这些是值得学习的。之后,我会在5月份投入到机器学习中,╮(╯▽╰)╭。
转载请注明出处:http://blog.csdn.net/supera_li/article/details/45155857
枚举和注解
- 用enum代替int常量。[类|方法通用常量,enum集中起来方便管理|调用|更改]
- 用实例域代替序数
- 用EnumSet代替位域
- 用EnumMap代替序数索引
- 用接口模拟可伸缩的枚举[接口类型的枚举,建议看下]
- 注解优先于命名模式[就是注解包那个东西]
- 坚持使用Override注解[override如果不显示注解,可能引发没有真正覆盖父类的方法,使得未来程序成为潜在bug]
- 用标记接口定义类型[eg:就是一些序列化类与targe(ENUM.常量)的取舍对比的东西。如果应用特殊化接口,那么使用前者]
方法
- 检查参数的有效性[方法开头做参数校验,对传入的参数要做可信性判断]
- 必要时进行保护性拷贝[输出到客户端,客户端返回回来的数据不一定可信,如果可能,就在服务器端进行一份拷贝,这样是最可信的]
- 谨慎设计方法签名
- 慎用重载[能少就少,能通过类型转换的调用就调用,尽量避免使用重载]
- 慎用可变参数[方法参数应该尽量少]
- 返回零长度的数组或者集合,而不是null[不然上层代码一直需要做null检测,或者返回null的时候需要增加很多注释]
- 为所有导出的API元素编写文档注释
通用程序设计
- 将局部变量的作用域最小化
- For-each循环优先于传统的for循环
- 了解和使用类库
- 如果需要精确的答案,请避免使用float和double[仅用于科学计算使用浮点数类,有时候可以考虑用大数类BigDecimal代替相关运算]
- 基本类型优先于装箱基本类型[后者属于类,特别在循环中不停的进行自动拆箱与装箱,性能下降较为严重]
- 如果其他类型更适合,则尽量避免使用字符串[字符串有较高的性能开销,一个连接+号就代表着字符对象的new,考虑StringBuilder类代替?]
- 当心字符串连接的性能[类似于连接+号就是对象的new操作]
- 通过接口引用对象[更改对象实现后,只需要将接口后面的new对象类型改变,其他代码不变,可以继续使用]
- 接口优先于反射机制[反射机制主要是侵入式的,而且反射出的异常都是集中在运行期的,对于异常的把控不太容易,所以不建议使用]
- 谨慎地使用本地方法[平台迁移就over了]
- 谨慎地进行优化[分析好优化,尽量在设计好优劣好进行优化,不然优化可能导致多余的浪费]
- 遵守普遍接受的命名惯例[容易理解与团队共识的才是惯例]
异常
- 只针对异常的情况才使用异常[多正常的一句话,但是对异常情况这个界定还需要仔细斟酌]
- 对可恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要使用受检异常[传入的参数可信性]
- 优先使用标准对应的异常[标准化,容易理解]
- 每个方法抛出的异常都要有文档[方便理解]
- 在细节消息中包含能够捕捉失败的信息[应该叫做保留异常现场,方便异常出现时知道上下文的内容]
- 努力使失败保持原子性[就是不要讲多起失败都处理成一个失败]
- 不要忽略异常[catch后就做一个处理,不能忽视,或者忽视后给一个注释]