这一章里面讲的都是一些编码的小技巧,或者说是编码时建议遵守的一些原则,下面就一条一条来列举:
1、局部变量的作用域最小。这条规则的原因很简单,在用到局部变量的时候采取创建局部对象,这样便于阅读程序,同时,能够保证局部变量在使用完后能够尽快释放,同时,在创建局部变量时,最好对局部变量进行赋值,如果实在没有办法,可以用null代替。
2、用for-each代替传统的for循环。在JDK1.5之后,Java提供了for-each的循环方式来代替传统的迭代循环,包括集合对象以及数组对象的循环方式。for-each的循环方式在没有降低传统的循环方式效率的情况下,方便了阅读及编写,而且可以避免传统的for-each循环方式下容易出现的一些问题,下面举个例子:
for(Iterator i = suits.iterator();i.hasNext();){ for(Iterator j = ranks.iterator();j.hasNext();){ deck.add(i.next(),j.next()); } }
在这段代码中,输出的结果肯定是错的,在循环j变量时,使得i不断地指向下一个对象,从而没有达到遍历的效果。
当然,传统的遍历方式也没有废弃,在如果需要对集合中的元素进行删除等操作时,for-each方式就不那么试用了。
3、了解和使用类库。这个原则很简单,不要重复发明轮子,由第三方实现的功能,是积累了大量的专家们的知识,在方法的效率以及稳定性上面肯定比我们自己写的要好很多,而且,使用类库可以使得某些方法得到持久的更新,而不用我们自己去动手,并且,由于使用类库的用户比较多,资料比较全,可以减少学习的时间成本。
4、对于精确程度要求较高的计算,用BigDemical代替float和double。代替的缺点和优点同样明显,缺点在于性能及编写的复杂性,优点就是可以提供正确的计算结果。
5、基本类型由于装箱基本类型。这个在前面的文章中有过一次性能的比较,基本类型在性能上完爆引用类型,不仅如此,装箱基本类型在数值比较时,尤其是判断是否相等时,很容易犯错误,因为装箱基本类型从本质上来讲,还属于引用类型,所以在判断两个数值是否相等时很容易出错。
6、尽量使用合适的类型表示所要表示的内容。这个针对的是输入,一般输入都是保存到字符串中,但应该在第一时间将输入的内容转换为其所应该表示的形式。
7、当心字符串连接的性能。字符串的连接,相当于,每一次连接过程都是重新创建对象的过程,这样子耗时耗性能,可以使用用StringBuilder的append代替。
8、通过接口引用对象。通过接口引用对象可以带来很强的灵活性,当需要改变接口需要引用的对象时,只需要改变一行代码,其他的代码可以不变,也是因为如此,Java里面提倡一种面向接口编程。
9、接口优先于反射机制。反射机制只应该用在不知道具体类的情况下,但这种情况应该少用,如果必须要使用,那么,反射只应该负责初始化实例,实例中方法的调用应该通过接口来实现。