1. 最小的作用范围
(1)尽量使用局部变量,如果需要使用成员变量的地方,可见度尽可能小(private,protected,默认,public)
(2)确认成员变量为不可变性应申明为final
(3) 一个类的方法需要提供给子类有不同的实现而进行重写,或者需要把实现交给子类去完成应该声明为protected。其它的统统声明为private 尽可能的把方法隐藏起来, public方法越少这个类就越简洁。就更便于使用,测试和重构
(4) 访问成员变量总是使用this关键字。这样使得我们总是给期望的成员变量进行访问。而解决变量的多议性。
(5) 局部变量名变该相对短而成员变量名应该相对冗长。例如,i应该是一个变部变量, userInfo应该是一个成员变量。
2. 不要使用字面常量
除了一些大家都明白的如0值,空值null,和空串””外,不要在java代码中使用字面常量(如下面的数字100)
if (ware.getWareDetailList() != null&& ware.getWareDetailList().size() > 100) {
request.setAttribute(super.SERVICE_BUSINESS_INFO, "物品数量超过了上限,请您将物品数量控制在100件以内");
看上面的例子。无耐的是,我们经常在开发中大量出现这样的代码。
(1) 这样的代码没有明确的意义。必须被迫阅读代码来猜测100的含义。
(2) 代码容易出错,我们必须被迫比较不同的字面值来确信它们是相同的,而且我们很容易错误的输入。
(3) 数值也定死了,修改100这个常数时,可能需要修改多处,这样造成了不必要的麻烦,即要吧采用如下:
private static final int WARE_COUNT_LIMIT = 100;
……
if (ware.getWareDetailList() != null&& ware.getWareDetailList().size() > WARE_COUNT_LIMIT) {
request.setAttribute(super.SERVICE_BUSINESS_INFO, "物品数量超过了上限,请您将物品数量控制在100件以内");
(4) 有时这样定义个常量也无法应对需求,这样的情况还可以采用动态赋值或重写常量字段子那个方法.
3. 字符串处理
(1) 在处理大量字符串累加时,应该使用StringBuffer来提高性能,而不应使用String.
(2) 在用Log4j等日志组件打印信息时,应该先判断日志级别再打印,这样能先避免字符串累加带来的性能问题.如下:
If(log.isDebug()){
log.debug(WARE_COUNT_LIMIT+“物品数量不对,请重请输入!”);
}
(3)不要使用String s = new String(“leo”);
应该使用String s = “leo”;
第一种方式会创建N个字符串,第二种会把字符串存到”缓存”中.如果”缓存”中没有该值,则再创建.
4. 空指指针针异常
NullPointException是一个常见的错误,由于他是unchecked异常,所以总是隐式的出现,应采取一些原则来规避这样的情况发生.
a. 不要依赖”外界”的控制而忽略了自身空指针异常的处理.
b. 在对变量进行检查时,发现null或””的情况应该即时处理.
c. 例子如下:
当list 为null时,那么它后面的遍历代码就抛出NullPointException.所以在遍历集合时应该总是小心一些。
for(int i = 0; list != null && i < list.size();i++){
...
}
If(user==null || “”.equals(user)){
...
}
5.在处理系统日志时,尽量以if(logger.isDebugable()){ logger.xxx();}方式去先判断,再记录
6.关于异常处理的一个文章:http://klyuan.javaeye.com/blog/72170