8种常见的Java不规范代码
上一篇 /
下一篇 2012-09-26 10:42:40
/ 个人分类:Java
51Testing软件测试网W/N_
e*@7B2k
MC![| 在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现的不规范代码。所以,我把它们整理成了一个列表出来分享给我的同行希望能引起注意并改善代码的质量和可维护性。51Testing软件测试网$lH9PKxU
v
*o3Ym7|C*y}0 这个列表不区分顺序,全部来自一些代码质量检查工具,如 CheckStyle, FindBugs 和 PMD。51Testing软件测试网1GO,ali A2a
+x"h%G^9R gE$]%P5~0 在Eclipse中格式化源代码并管理import语句51Testing软件测试网7cy2~'EC|b
xd/Su'W%_\0 Eclipse提供了自动格式化源代码和管理import语句的功能(并移除未使用的语句)。你可以使用下面的快捷键来使用这些功能。
4W#g$r A1H a0:\6yD%A o.hyL0 Ctrl + Shift + F – 格式化源代码。51Testing软件测试网:@;RH'q,y-\o4S
-CARH"B^K+h So
}
K0 Ctrl + Shift + O – 管理import语句并移除未使用的语句。51Testing软件测试网sD/wxVa%h
3_a
HnU0
除了手动执行这两个功能外,你还可以让Eclipse在保存文件的时候自动格式化源代码并自动管理import语句。要做到这个,在Eclipse中,
到 Window -> Preferences -> Java -> Editor -> Save Actions并启用
Perform. the selected actions on save,选中 Format source code和 organize
imports。
vfofw0cSS^.}:a`&l0 避免在方法中出现多个return语句(退出点):51Testing软件测试网
O2c[0q7ur:R|4P N
stA.f:a`0 在你的方法中,确保只有一个 退出点。不要在一个方法中使用多于一个return语句。51Testing软件测试网jv/{3H,Viw~4U
51Testing软件测试网@{4c,OoR 如,下面的代码是 不推荐的,因为它有多个退出点(return语句)。
'G"u,VLr C.X|A0- private boolean isEligible(int age){
- if(age > 18){
- return true;
- }else{
- return false;
- }
- }
|
51Testing软件测试网L E8GP)Ws9jv{ 上面的代码可以这么写(当然,下面的代码还可以改进,后面再说)。
Z,b;]a}8rX0- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
|
51Testing软件测试网U _wsdB 简化if-else方法:
v3FG5w/]G7e04rq2fX`
Y0 我们写了一些只要一个参数的工具方法,检查一些条件并根据条件返回一个值。如,在上面见到的 isEligible方法。
2h"O\M(k*TpAt*v+y0- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
|
&\)Z2@m9ag(_8d0 可以只使用一个return语句来重写此方法。
aVgEr}`D%q)u%`0- private boolean isEligible(int age){
- return age > 18;
- }
H+Tpdl7mp(D*Ld9p/~0$W,J3a
Bfq3t7S6H0 不要为Boolean,Integer或String创建新的实例:51Testing软件测试网0i8B:j
nUu
oj
I9@P+lf8U G0 避免创建新的Boolean,Integer,String等实例。使用Boolean.valueOf(true)代替new Boolean(true)。两种写法效果差不多但却可以改善性能。
+J(nG8uoh
T07MC&z*mhP0 在代码块周围使用大括号:51Testing软件测试网&T#Rudz6Z
v&cFJ#pmP0 永远不要忘记在块类型语句(如:if,for,while)周围使用大括号。这可以减少代码歧义并且避免在你修改代码块的时候产生新的bug。
a)iUw`7t0Ujt;CWlVwr/_0 不推荐51Testing软件测试网/H#M+V8\@.J+z
51Testing软件测试网Pp2z/m{["qT6dT.Ag!G0- if(age > 18)
- return true;
- else
- return false;
|
$zQh'HJ0J3_,n&g0 推荐51Testing软件测试网!Nf0]"Lrg
[M2C;N M+mtO%hN0
.D B(?[3Y0t7l0- if(age > 18){
- return true;
- }else{
- return false;
- }
|
#e%LrJ8C0 把方法的参数声明为final类型:51Testing软件测试网lY7z'A)B*x
51Testing软件测试网%t]Jm^ ZmS 总是在所有兼容的地方把把方法的参数声明为final。这样做的话,当你无意中修改了参数的值,编译时会得到警告,并且编译生成的字节码也会得到优化。51Testing软件测试网j9\[~l8du:QBF
51Testing软件测试网1?]
p2g'z6fN k5l
kY 推荐51Testing软件测试网O~p;Fzz5Y1~1y
^;v
e$cz051Testing软件测试网2@ j_y9F0Fv
private boolean isEligible(final int age){ ... } |
~_f`|L+[0 用大写命名public static final类型成员变量:51Testing软件测试网Kr {:zh(t
51Testing软件测试网Y`Y,g3N0aB4ox%~J 总是使用大写命名用public static final类型变量。这样可以让你很容易区分常量和本地变量。
ms+I2sd8@P051Testing软件测试网%L%t-o:VDJ0I u V 不推荐
$~!P BG%a3S051Testing软件测试网:u#K
zg j-C ^51Testing软件测试网yTa-\s7u P
public static final String testAccountNo = "12345678"; |
aLv.`tRK)c+L)X0 推荐51Testing软件测试网1~v,E2G+gYpAO
51Testing软件测试网
FrU'x*W
I g~h,Bq+{-Xy(hce.l;[0public static final String TEST_ACCOUNT_NO = "12345678"; |
51Testing软件测试网BP3yR,Y6AI(W 把多个if语句合并成一个:
M7y:w"M9@^k"`)`051Testing软件测试网!bsB4F:j 下面的代码
fXrFw+m*lHZ0Y yx
H1pLVN0
$C/Cd-v$C7rvJ1h0- if(age > 18){
- if( voted == false){
-
- }
- }
|
QnX8au%s0 可以使用一个if语句改写为:
5]Q{OI%O|0j3zh,~w2X`0
evD^%D%|9N0- if(age > 18 && !voted){
-
- }
|
7Bl@%U8OMga0 别忘了给switch添加default语句:51Testing软件测试网2g
p2e {7{6\
o$ynV#a0fg
^A0 总是给switch添加一个default语句。51Testing软件测试网$L7D~:l9__:s
%HH([z3\!piQ(Y/]0 避免重复使用同样的字符串,创建一个常量吧:51Testing软件测试网&N,QaL6i
51Testing软件测试网o+le7k^2~$iwr)X 如果你需要在多个地方使用同一个字符串,那就创建一个字符串常量来使用吧。51Testing软件测试网'a-O3qdh[7S$n
$Z1vg M9D,f0 下面的代码:51Testing软件测试网*]]B._g4X
51Testing软件测试网-~+x#xFj!}xf2W"Gx`U9J/Z,Pu-[0- private void someMethod(){
- logger.log("My Application" + e);
- ....
- ....
- logger.log("My Application" + f);
- }
|
}V'RfYf7@7b5U0 可以创建一个常量代替字符串"My Application":
o6M!D)Ppss0X K
O|4x0
Ld+j(n3V!eFe0- public static final String MY_APP = "My Application";
- private void someMethod(){
- logger.log(MY_APP + e);
- ....
- ....
- logger.log(MY_APP + f);
- }
收藏
举报
TAG: