第8章:通用程序设计

45. 将局部变量的作用域最小化

在第一次使用它的地方声明

46. for-each循环优于传统的for循环

性能更好;

避免使用iterator时候产生的一些迭代问题

以下情况无法使用for-each

过滤:需要在遍历时删除元素

转换

平行迭代

47. 了解和使用类库

避免重复造轮子

48. 需要精确的答案,避免使用float和double

货币计算可以使用BigDecimal、int和long

49. 基本类型优于装箱基本类型

避免对象的NullPointerException方法,同时性能也会好点

50. 如果其他类......

第7章:方法

38.检查参数有效性

在编程中养成对参数做检查的习惯

39. 必要时进行保护性拷贝

对可变对象的引用可能造成错误的答案。这时候可以考虑使用保护性拷贝的方式。例如重新使用构造器生成对象。

40. 谨慎设计方法签名

方法名要易于理解;避免过长的参数列表。

参数类型优先使用接口;

boolean参数优先使用枚举类型

41. 慎用重载

最佳实践:永远不要导出两个具有相同参数的重载方法

42. 慎用可变参数

43. 返回零长度的数组或者集合,而不是null

返回类型为数组或集合的方法没理由返回null,避免上层还需要对null做额外的处理

......

第六章:枚举和注解

30. 用enum代替int常量

枚举是单例的。类型检查等措施保证其安全可靠。

枚举类中需要引用自有的枚举值做判断,建议使用策略枚举。即将引用枚举值的行为方法定义成一个内部枚举类,传递给枚举类的构造器中。例子见书P135。策略枚举是策略模式的一种延伸。

31. 用实例代替序数

枚举是有个int值序数来维护顺序的。但是避免用这ordinal()方法来获取序数。该方法仅在设计像EnumSet和EnumMap这样的类的时候才使用

32. 用EnumSet来代替位域

有时候需要将多个枚举值按照位运算的方式来做并交的操作,这个可以交个EnumSet来做,其本身内部实现也是......

JVM调优排错工具jps、jstack、jmap、jhat、jstat、jvisualvm等的使用

1. 介绍

“纸上得来终觉浅,绝知此事要躬行。”最近发现自己在JVM调优工具的使用上还存在知识盲区,故尽快调研了一些资料,总结一下这些工具的使用,以供以后自己复习查看。

JDK提供的小巧工具简单介绍一览如下:

名称

作用

jps

JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程

jstat

JVM Statistics Monitoring Tool,显示收集HptSpot虚拟机各方面的运行数据

jinfo

Configuration Info For java,显示虚拟机配置信息

jmap

Memory......

第5章:泛型

23. 不要在新代码中使用原生态类型

意思就是尽量使用泛型,可以提前做类型检查,防止出错。

24. 消除非受检警告

消除警告,保证不出现由于类型造成的ClassCastException

25. 列表优于数组

26. 优先考虑泛型

27. 优先考虑泛型方法

28. 利用有限制通配符来提升API灵活性

29. 优先考虑类型安全的异构容器