代码review 方法之降龙十八掌
1. 书写规范
口诀:编程书写要规范
示例:(1)类名首字母大写,方法和变量名首字母小写;且首字母都是英文。
(2)if和else书写要加{}。下面是不规范的写法
If (int i=2)
Int j=3;
Else int k=4;
2. If判断
口诀:见到if就找else
示例:在程序中需要异常处理时,看有没有else的异常处理。
3. Switch判断
口诀:switch中要有break、default,判断条件类型要正确。
示例:下面是不正确的写法
String a=“fsz123”;
Int i=Integer.parseInt(a);
Switch(i){
Case 0: system.out.paintln(“test”);
Break;
}
4. For循环判断
口诀:见到for循环多看两眼,边界是重点。
示例:对for循环中,看循环条件的边界是否正确。如
(1) 程序要求循环10次推出,你循环9次,就不正确。
(2) 程序变量是0;然后减减,条件小于10就成了死循环。
For(int i=0;i--;i<10){
}
(3) 传参数进来的变量要保证是正整数型。
5. While判断
口诀:while要看内部的判断,防止死循环。
示例:(1) 对于判断条件是true的,要在while内部看到break。
While(true){
Break;
}
(2)对于给出了变量跳出条件的,程序内部的判断要有该条件赋值的跳出循环处理。 Int i=0;
While(i<10){
I++;
}
6. 类内存分配
口诀:类内存分配要释放,对象加载传递参数不可重复new。
示例:(1)类在new分配空间后,在不用的时候要进行内存释放的操作,特别是C++程序没有自动回收机制的。
(2)类在new分配加载参数后传递使用,不能在此new,否则参数丢失。
Class Test{
public static void main(String[] args){
A a=new A() //动态分配A类
a.setName(“feng Mr”);//添加参数
B b=new B() //动态分配B类
b.reslut(a); //调用方法并传递A的对象。
}
}
Public class B{
Public void result(A a){
//这里不能在进行对A 类new,A a=new A();
System.out.painltn(a.getName());
}
}
7. 数组越界
口诀:看见数组把神提,问题往往在下标。
示例:数组使用的时候,往往越界会抛出异常;所以在使用的时候,占用的空间在合理空间内。
8. 返回值检查
口诀:返回值引用的类型要一致,值的流转深入方法内部多看看。
示例:(1)返回值的类型要和使用的类型一致。
(2)对于方法返回值,进入内部看看返回的值是否符合要求,如返回的true、false等是否写反了。
(3)对异常情况处理的,要看看不同异常情况返回的错误提示信息或标识码是否符合要求。
9. 字符串长度
口诀:不要小看字符串,长度是个大问题。
示例:String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE了。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。
A、 字符串长度没有控制,超过了最大的长度,就会抛异常。
B、 字符串长度过长,消耗内存影响性能。
C、 自定义字符串长度,使用时超出范围。
10. 类型转换
口诀:类型转换要合法,小心转换丢数据。
示例:要防止数据丢失或非法转换,如:double转换整数精度丢失,中文字符串转换整数,转换数据不符合要求。
11. 对象空验证
口诀:为空对象不能对参数进行去调用
示例:若类对象为空的时候,进行参数调用会抛异常。如下
Class Test {
Private B b=null;//设置b类对象为空。
Public void ceshi(){
//没有new,进行分配内存就开始调用了,这里是不允许的。
If(b.result==2){
System.out.paintnl(“测试啦”);
}
}
}
Public class B {
Public int result(){
Return value=2;
}
}
12. 流数据try、catch、finally
口诀:数据的流转要有异常扑获和流关闭。
示例:(1)io流数据处理的时候,在遇到异常或使用完毕后的时候要有finally做流关闭,释放内存的处理。否则下一步使用时,无法执行。
(2)连接数据库的类同样需要关闭数据流的处理。
13. If、else、for循环嵌套太多
口诀:If、else、for不宜过多的嵌套。
示例:嵌套太多,造成机器反复翻译代码,性能也会下降。
14. 全局变量
口诀:全局变量引用注意值的变化和状态。
示例:(1)验证变量是否为需要的值或引用
(2)查看调用的全局变量代表的状态是否符合要求。如:引用的变量状态为a时是正确的,但引用变量时用了变量为B的就错误了。
15. 多层嵌套的for循环
口诀:for的循环有多层,判断变量条件命名各不同;防止同一变量名,反复加减死循环。
示例:禁止使用同一个变量条件,否则容易造成死循环。还有对变量反复加减要注意,防止跳不出循环。
16. 变量初始化
口诀:赋值函数最危险,变量没有初始化。
示例:变量在做赋值使用的时候,要进行初始化处理。如下是错误的写法
Int i;//应该初始化 i的值为正整数,如0;
If(i==3){
}
17. 运算符顺序
口诀:遇到运算符,符号使用误混淆,优先运算要用好。
示例:(1)>和>=,&&和||的使用要考虑好,不要混淆乱用,区别是很大的。
(2)遇到加减乘除的运算,需要加括号的地方不要忘记加,否则运算会乱掉。见如下
If(!a&&b+C*d||e){
}
18. 随机码的生成
口诀:使用随机验证码有诀窍,时间间隔配合好。
示例:(1)防止一定时间内,验证码没有过期被重复使用。如:随机数为3个,过期时间为5分钟,在5分钟内有1002次请求,就会有2次发送的验证码重复使用。若加了防重复提交,就会造成后面的用户无法提交验证码。若设置过期时间为4分钟,就不会存在这个问题。