用动态编译
动态编译一直是java的梦想,从java6版本开始他支持动态编译了
但是现在的java的动态编译还比较鸡肋,建议不要使用
18 建议18:避免instanceof非预期结果
用了判断一个对象是否属于一个类
19 建议19:断言绝对不是鸡肋
20 建议20:不要只替换一个类
对于final修饰的基本类型和String类型,编译器会认为它是稳定态,所以在编译时就直接把
值编译到字节码中了,避免了在运行期引用,以提高代码的执行效率。
21 建议21:用偶判断,不用奇判断
注意 -1%2 结果为-1 结果永远不大于0
22 建议22:用整数类型处理货币
在某些行业要求小数位多,而且要求计算准确(
计算机也有盲区)
此时可以使用 BigDecimal,或者在不苛刻的
系统中,先都扩大100倍
24 建议24:边界,边界,还是边界。
特别是方法接受int类型数据的时候,一定要主要3个值,0,正最大,负最小。
要注意数据值越界
问题。
25 建议25: 不要让四舍五入亏了一方
Math.round采用的是 正无穷方向舍入规则
即先加0.5d,然后Math.floor(),即小于等于的整数
但是对于银行里面,这种方
式会造成银行的损失,产生了新的银行舍入法:
四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
BigDecimal d=new BigDecimal(888888);
BigDecimal r=new BigDecimal(0.001875*3);
BigDecimal i=d.multiply(r).setScale(2,RoundingMode.HALF_EVEN);//使用银行家舍入法
26 建议26:提防包装类型的null值
因为集合中List中可以放置null,这个要注意
27 建议27:谨慎包装类型的大小比较
Integer i=new Integer(100)
Integer j=new Integer(100);
System.out.println(i==j);//false
因为==比较的是对象引用的地址
28 建议28:优先使用整形池
public static Integer Integer.valueOf(int i){
final int offset=128;
if(i>=-128&;&;i<=127){
return IntegerCache.cache[i+offset];
}
return new Integer(i);
}
这个整形池,缓存了-128和127之间的整数,因此使用Integer.valueOf,获得包装类型时候,在
此范围内的数是被缓存过的,例如,如果多次获得 57,则此包装类型为用一个引用
29 建议29:优先选择基本类型
30 建议30:不要随便设置随机种子
在面向对象变成oop的世界里,类和对象是真实世界的描述工具,方法是行为和动作的展示形式,封装
、继承、多态则是其多姿多彩的主要实现方式,如此oop才会像现在这样繁荣昌盛、欣欣向荣
31 建议31:在接口中不要存在实现代码
诡异的变成,接口中的常量使用匿名内部类赋值
32 建议32:静态变量一定要先声明后赋值
静态变量分两步处理的,现在内存中指定一个地址,然后开始赋值,赋值按照程序中赋值先后顺序执行的