编程质量提高建议总结1(持续总结)
编程质量提高建议总结1(持续总结)
1.混淆字母要明显
比如
long i = 1l; |
最好写成
long i = 1L; |
字母意义突出明显。
2.常量定义不要包含非常量因子
final static long a = 当前日期的long数值 |
3.变长方法重载JVM优先采用最精确的重载方法
4.变长参数如果调用者传的是null,那么就不好应付了,应该是让JVM知道客户端显示调用的是哪个类型的变长参数,哪怕值是null,都可以编译过去。
5.自增操作千万不要和自己赋值在一起
a=a++; |
这种操作是十分不可取的。
6.如果自身的静态变量与import的静态变量有冲突,则JVM编译器会遵循最短路径的原则使用静态值。
7.final变量尽量单纯
8.switch-case-别忘记break
9.在实际开发中,如果某个历史类class文件变更了,最好重新build整个项目,否则,可能造成的现象是:牵一发而错全身。
10.判断奇偶数用偶数作为标准
11.数值位数敏感的使用NumberFormat工具进行格式处理
NumberFormat f = new DecimalFormat("#.##"); f.format(10.00-9.60) |
或者使用更加敏感的数值运算BigDecimal类型,或者直接使用整形扩大1000倍,运算后再缩小1000倍。
12.数值运算时注意数值类型的最大值,一般发生在int与long之间存在运算的时候
13.当int或者long的最大值与其他的数值参与运算的时候,会发生不能预期的效果
14.对于外界的参数值永远抱着怀疑、需要验证的态度,包括null空指针异常
15.==;<;>的操作符要注意。==相对于对象只是比较指针(物理地址),在简单数值类型中比较的是数值,而<与>只能用于数值的包装类或者简单数值。
16.在Integer使用时,在数值-128至127之间的数会被缓存到整型池中。
17.数值使用的时候,如果没有什么复杂的运算逻辑,使用原型,最好
18.对象展现为2面,一面是具体实际类型,一种是表面类型。在实例方法被调用的时候展现出来的是实际类型,静态方法被调用的时候展现出来的是表面类型。
19.面向对象的设计原则,对象的构造函数要尽量简单,不要含有复杂的业务逻辑,仅仅就是初始化成员变量。
20.执行块语句{}可以提炼出重复的业务逻辑,构造函数都是先执行执行块语句再在自己的逻辑中执行。
21.保证工具类不能实例化,反射也不能调到构造函数
private A(){throw new Error("错误,不能实例化工具类");} |
22.覆写toString方法输出的内容有助于程序调试
23.不到万不得已,不要手工FullGC
24.为了编码统一,一律调成UTF-8编码
25.变长数组采用数组拷贝的原理完成扩容的
26.泛型要规范使用,尤其是集合,数组操作的时候,泛型一定要加上。淘汰无泛型的时代
27.以Array为底层实现的集合,在遍历的时候使用下标for循环的效率比较高,因为实现了随机读取接口,表明元素间无任何上下行关系。如果以链表结构方式实现的集合,最好使用for-each的方式遍历,底层使用迭代器模式,适用于链表的形式。
28.两个不同类型的集合,只要是里面的元素相等,比较结果就想等。
29.List的asList方法生成的List只读,不能做任何的add与remove的变更性操作。
30.List的子列表仅仅是原始列表的视图,子列表依然保持元列表元素的引用,使用子列表处理局部元素数据的时候效率更高。
31.二分查找算法使用的前提是元素是已经按照一定的规律排序好的
32.ArrayList与HashMap底层都是基于数组实现,ArrayList扩容是1.5倍,而HashMap扩容则是2倍。
33.集合中TreeSet排序需要使用List解决,Collections.sort()对list进行重新排序。
34.commons-collections、google-collections是值得拿来使用的比JDK提供的自身集合类要优越的集合工具包。
35.Java的泛型在编译期间有效,运行期间会被擦除
36.反射机制性能不一定差,有人提出没有因为反射而导致程序运行效率变差的。
37.按照系统业务需要封装自己的异常类,让运营维护的人员也能看得懂。
38.Java分层是不可避免的,构建良好的Exception异常链是决定软件可维护性的关键
39.在JDK1.7之前,finally代码块最好仅仅作为资源的回收,不要做任何的逻辑处理或者返回操作。
40.最好将方法可能出现的异常作为显示的受检异常(接口规范中明确指定要抛出哪些异常)
41.线程的优先级数字的底层,依赖于操作系统对线程资源占CPU的具体实现。优先级一般是1、5、10这三种等级体现最佳。
42.异步运算考虑使用Callable接口,实现该接口的call方法的返回值。可以得知线程运行的状况。通过配合Future的submit方法执行具有返回值的线程。可以控制并行计算的能力。
43.new对象比克隆对象效率高一些
44.位操作比直接的加减乘除操作要快几个数量级,但是可读性差
45.适时调控JVM参数
46.处理日期可以采用Joda工具包
47.开源技术的选型基本原则是:广而用之;社区背景硬;专一(做的有深度);唯一(不要让一个项目同时存在两个功能一样的开源框架)
48.永远保持代码+注释的好习惯
49.//TODO注释让开发人员只好还有什么没做的
50.多总结
上一篇: Memcache工作原理总结
下一篇: 内存开涨之后SSD硬盘跟进:一周大涨7%