45.将局部变量的作用域最小化
可以增强代码的可读性和可维护性,使局部变量的作用域最小化,最有利的方法就是在第一次使用它的地方声明
循环中提供了特殊的机会来讲变量的作用域最小化,作用域被限定在正好需要的范围之内,在循环终止之后不再需要循环变量的内容,for循环优先于while循环
for(int i=0,n=ex();i<n;i++){
}
第二个变量n被用作保存第一个变量的极限值
最后一种使局部变量的作用域最小化的方法是使方法小而集中,如俩个操作在一个方法中,会导致其中一个操作相关的局部变量可能出现在另一个操作中,把俩个操作分成俩个方法
46.for-each循环优化于传统的for循环
47.了解和使用类库
48.需要精确的答案,避免使用float和double
float和double类型尤其不适合货币计算,用BigDecimal,int,Integer或者long进行计算
public static void main(String[] args) {
final BigDecimal TEN_CENTS =new BigDecimal(".10");
int itemsBought = 0;
BigDecimal funds = new BigDecimal("1.00");
for(BigDecimal price =TEN_CENTS;funds.compareTo(price)>=0;price = price.add(TEN_CENTS)){
itemsBought++;
funds = funds.subtract(price);
}
System.out.println(itemsBought+" items bought");
System.out.println("Money left over:$" +funds);
}
49.基本类型优先于装箱基本类型一个操作中混合使用了int和Integer操作,会自动拆箱,如果Integer是null,null和int比较会报空指针异常,频繁拆箱装箱会有性能问题
使用装箱基本类型的几个地方,1.作为集合中的元素,键和值,2.必须使用装箱类型作为类型参数,3.反射调用时,必须使用装箱基本类型
50.如果其他类型更适合,尽量避免使用字符串
字符串不适合代替其他的值类型,,如果是数值,就用数值类型,如果是是否或,用boolean类型
字符串不适合代替枚举类型
字符串不适合代替聚集类型
字符串也不适合代替能力表
51.当心字符串连接的性能
不要使用字符串连接操作符合并多个字符串,除非性能无关紧要,应该使用StringBuilder的append方法,或者使用字符数组,或每次只处理一个字符串,而不是将它们连接起来
52.通过接口引用对象
如果没有合适的接口存在,完全可以用类而不是接口来引用对象
53.接口优先于反射机制
核心反射机制提供了通过程序来访问关于已装载的类的信息的能力,给定一个类,可以获取构造器,方法和域
丧失了编译时类型检查的好处,包括异常检查,如果程序企图用反射方法调用不存在或者不可访问的方法,在运行时会失败
代码笨拙冗长
速度慢
54.谨慎的使用本地方法
55.谨慎的进行优化
56.遵守普遍接受的命名规范