编写高质量代码:改善Java程序的151个建议

一、Java开发中通用的方法和准则

1:不要在常量和变量中出现易混淆的字母。

注意:包名全小写,类名首字母全大写,常量全部大写并用下划线分隔,变量采用驼峰命名法等。

2:莫让常量蜕变成变量。

例:public static final int RAND_CONST = new Random().nextInt();

注意:务必让常量的值在运行期保持不变。

3:三元操作符的类型务必一致。

若两个操作数不可转换,则不转换,返回值为Object类型。

若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。

若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,刚转换为T类型;若S超出了T类型的范围,则T转换为S类型。

若两个操作数都是直接量数字,则返回值类型为范围较大者。

4:避免带有变长参数的方法重载。

5:别让null值和空值威胁到变长方法。

6:覆写变长方法也循规蹈矩。

注意:覆写的方法参数与父类相同,不仅仅是类型、数量,还包括显示形式。

7:警惕自增的陷阱。

public static void main(String[] args){

int count = 0;

for(int i = 0 ; i < 10 ; i++){

count = count++;

}

System.out.println("count=" + count);  //count=0

}

8:不要放旧语法困扰你。

9:少用静态导入。

对于静态导入,一定要遵循两个规则:

不使用*通配符,除非是导入静态常量类。

方法名是具有明确、清晰表象意义的工具类。
10:不要在本类中覆盖静态导入的变量和方法。

11:养成良好的习惯,显示声明UID。

注意:显式声明serialVersionUID可以避免对象不一致,但尽量不要以这种方法向JVM”撒谎“。

12:避免用序列化类在构造函数中为不变量赋值。

注意:在序列化类中,不使用构造函数为final变量赋值。

13:避免为final变量复杂赋值。

14:使用序列化类的私有方法巧妙解决部分改改持久化问题。

15:break万万不可忘。

16:易变业务使用脚本语言编写。

17:慎用动态编译。

18:避免instanceof非预期结果。

19:断言绝对不是鸡肋。

20:不要只替换一个类。

注意:发布应用系统时禁使用类文件替换方法,整体WAR包发布才是万全之策。


二、基本类型

21:用偶判断,不用奇判断。

注意:对于基础知识,我们应该"知其然,并知其所以然"。

22:用整数类型处理货币。

23:不要让类型默默转换。

注意:基本类型转换时,使用主动声明方式减少不必要的Bug。

24:边界,边界,还是边界。

25:不要让四舍五入亏了一方。

注意:根据不同的场景,慎重选择不同的舍入模式,以提高项目的精准度,减少算法损失。

26:提防包装类型的null值 。

27:谨慎包装类型的大小比较。

28:优先使用整型池。

注意:通过包装类的valueOf生成包装实例可以显著提高空间和时间性能。

29:优先选择基本类型。

注意:重申,基本类型优先考虑。

30:不要随便设置随机种子。

注意:若非必要,不要设置随机数种子。


三:类、对象及方法

31:在接口中不要存在实现代码。

注意:接口中不能存在实现代码。

32:静态变量一定要先声明后赋值。

注意:两次重申变量要先声明后使用,这不是一句废话。

33:不要覆写静态方法。

34:构造函数尽量简化。

注意:构造函数简化,再简化,应该达到”一眼洞穿“的境界。

35:避免在构造函数中初始化其他类。

36:使用构造代码块精炼程序。

37:构造代码块会想你所想。

注意:放心地使用构造代码块吧,Java已经想你所想了。

38:使用静态内部类提高封装性。

39:使用匿名类的构造函数。

40:匿名类的构造函数很特殊。

41:让多重继承成为现实。

42:让工具类不可实例化。

注意:如果一个类不允许实例代,就要保证”平常“渠道都不能实例化它。

43:避免对象的浅拷贝。

注意:浅拷贝只是Java提供的一种简单拷贝机制,不便于直接使用。

44:推荐使用序列化实现对象的拷贝。

45:覆写equals方法时不要识别不出自己。

46:equals应该考虑null值情景。

47:在equals中使用getClass进行类型判断。

48:覆写equals方法必须覆写hashCode方法。

49:推荐覆写toString方法。

50:使用package-info类为包服务。

51:不要主动进行垃圾回收。


四:字符串


五:数组和集合


六:枚举和注解


七:泛型和反射


八:异常


九 :多线程和并发


十:性能和效率


十一:开源世界


十二:思想为源


猜你喜欢

转载自blog.csdn.net/yangooxx/article/details/41948967