Java中十个常见的违规编码

上一篇 / 下一篇  2012-09-13 09:04:52 / 个人分类:Java

~6[V3Fpt0  摘要:作者Veera Sundar在清理代码工作时发现一些常见的违规编码,因此,Veera Sundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。

f IVx7b7e4b051Testing软件测试网S)wB%c S GN

  最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中。因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性。51Testing软件测试网-GvIh:]"E&] Dn}$R

51Testing软件测试网q2bz:f LKH

  这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出。一起来看下:51Testing软件测试网i"?|$@*d-\q:Q2v

51Testing软件测试网'}x(HI6F:S3K3U'P

  一、Eclipse编译器提供源代码格式输入51Testing软件测试网| P9_v5v}@

+vN7Y)Ak$i1Ov,zCC0  Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。51Testing软件测试网ur U'j*NQ5NYp)O

51Testing软件测试网}&w~S ^UC k

  Ctrl + Shift + F——源代码格式

2Lf3K6oFE_|-K%pL7X0

8N1n _v-S;C3D%s\(U @0  Ctrl + Shift + O——组织输入并删除未使用的代码

.V/d(J+LC-`051Testing软件测试网g-I?QS5@9p

  代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。51Testing软件测试网-V2Ep3}SLsiA+I

51Testing软件测试网 @"F0VV+Q*wX9?

   操作步骤,在Eclipse中进入Window -> Preferences -> Java -> Editor -> Save Actions,然后以选定的方式保存,最后检查Format source code + Organize imports。

*p])r0|[R{051Testing软件测试网;L A#y3V9N/_:alo#VX

  二、避免多个返回(退出点)51Testing软件测试网$O)i `tG0K

d|!k5h'i5g/lr2g)v0  依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOT RECOMMENDED(不建议),这是因为有多个退出点(返回语句)。

K;g"Hk*@Q0
  1. private boolean isEligible(int age){  
  2.   if(age > 18){  
  3.     return true;  
  4.   }else{  
  5.     return false;  
  6.   }  
  7. }
51Testing软件测试网W y"cc3x y

  下面的代码有所提升,这是更高版本的。51Testing软件测试网vqmkw

  1. private boolean isEligible(int age){  
  2.   boolean result;  
  3.   if(age > 18){  
  4.     result = true;  
  5.   }else{  
  6.     result = false;  
  7.   }  
  8.   return result;  
  9. }

O$T9_2vLm;]-W8i[-M0  三、简化if-else

Rk*Y,w9z5Ys0

/jJ{#D,Yz|R0  我写了几个实用的方法作为参考,检查语句条件并且基于该条件返回值。比如,考虑到isEligible方法,正如你之前所看到的:51Testing软件测试网~ HF:?g^1^)N U Y

  1. private boolean isEligible(int age){  
  2.   boolean result;  
  3.   if(age > 18){  
  4.     result = true;  
  5.   }else{  
  6.     result = false;  
  7.   }  
  8.   return result;  
  9. }

*{jN4Ek0  整个方法以一个单一的return语句重新编写:

1X^S1qMR"`/?l0
  1. private boolean isEligible(int age){  
  2. 51Testing软件测试网8z0U1?:_Y;R F*w
  3. return age > 18;  
  4. 51Testing软件测试网b9K~ G4q
  5. }

9aW0Yzx"F}0  四、不要给Boolean, Integer或者String创建新的实例

5E*e Ed ll0

3`0vO8X9hwmQ9] v0  避免给Boolean,Integer,String创建新的实例。比如,使用new Boolean(true),Boolean,valueOf(true)。修改后的语句与之前的效果基本相同,除了在性能上有所提升。51Testing软件测试网{'{6U,gg(Cv Q-q

d"U{vAxIb0  五、使用大括号模块语句

Ae&OgktU0d@A0

:t E k;K&CfE&[0  永远别忘了使用大括号模块语句比如if、for、while。这样做的好处是当你在修改模块级语句时减少了模糊代码并且避免引进bug的机会。

UK{UZ @iv0

9EQ.XU C/s0O:I/n-t0  不建议:

6q"qC b%yI0
  1. if(age > 18)  
  2.   result = true;  
  3. else  
  4.   result = false;
51Testing软件测试网0cn{-~Cu!n

  建议:

C Yc!w3xD0
  1. if(age > 18){  
  2.   result = true;  
  3. }else{  
  4.   result = false;  
  5. }
51Testing软件测试网Wt*` o6uT B0f

KAV V#|:l-xr0  六、以final类型标记方法参数,任何时候都适用51Testing软件测试网Z8qS I{|M!D3C+Q

d3C w.b/O-~$Y0  请记住,以final类型标记方法参数,任何时候都适用。这样做的好处在于当你不小心修改参数值时,编译器会给你警告,同时它还能以更好的方式优化编译器代码字节。

+Olhi0xIv051Testing软件测试网$_)d,UtG$?/P r

  建议:51Testing软件测试网+sJ*Cq!CRL

51Testing软件测试网A-Fe o-z&}}0C

3u9tGN%^s0
private boolean isEligible(final int age){ ... }

jC-H#wZ I0  七、在UPPERCASE中命名public static final字段

#Rp8d%\3T EYB/Ot H0

-u7D `p2X1U0  在UPPERCASE中命名public static final字段(通常也被称之为常量)。这个可以让你轻松区分常量字段和局部变量之间的不同。51Testing软件测试网!b^4gYYe

51Testing软件测试网&T'yP%j3J$t7~

  不建议:

a4l S4dpx0

hDKb)F}.b"H0

2I*{1|8qW&C0
public static final String testAccountNo = "12345678";

hu1s9P:Uhx"wgC0  建议:

@ K e$I'b v051Testing软件测试网yP0D7t&`

51Testing软件测试网 J5O/@5K*u

public static final String TEST_ACCOUNT_NO = "12345678";,

)B6s7?'kJ \;l%]!\0p4D"v0  八、组合成单一的if语句

%Nt4aG5O/kO!Ek0

,R y@,d)r'Xq j*v0  在尽可能多的情况下,把多个if语句组合成单一的if语句,比如下面的代码:

?z Of3a"X|'r0

^ I H.Y Z.?Y051Testing软件测试网5UHb,|k0Lh

  1. if(age > 18){  
  2.   if( voted == false){  
  3.     // eligible to vote.  
  4.   }  
  5. }
51Testing软件测试网`}-aCT7M{4[9bs

  合并成单一的if语句:

m8Dj xq;D5kf051Testing软件测试网v.cU'H1O5du_ `

"lF`)Bs} Il0
  1. if(age > 18 && !voted){  
  2.   // eligible to vote  
  3. }
51Testing软件测试网bW;y as+zF7T

  九、Switch应该有default51Testing软件测试网t@ ]oC$x"{] i$o d

51Testing软件测试网.x;d W)uF0Ew*C

  始终给Switch语句添加default。51Testing软件测试网AFy.Op'[,M

51Testing软件测试网Q%J-@'O6_0_4RIk1T

  十、使用常量来避免重复定义相同的字符串值51Testing软件测试网 qSw#B%eE^

51Testing软件测试网3{^3N.J+C#O _

  如果你在多个地方必须使用字符串,那么使用常量来避免重复定义拥有相同值的字符串。

N(hqE0\"^{'~;x d051Testing软件测试网6tHf h?Z

  比如,看下面的代码:51Testing软件测试网'z+C,nn KVq[2D

51Testing软件测试网;s*c/u:^(@W kR

$XO` g[?0
  1. private void someMethod(){  
  2.   logger.log("My Application" + e);  
  3.   ....  
  4.   ....  
  5.   logger.log("My Application" + f);  
  6. }

?)eA/m\%QU*h*XD0  string literal“我的应用”可以作为常量并且能在代码中使用。

;b#G!_z X|051Testing软件测试网,Q9U([mB(I6Vb

51Testing软件测试网T+de4kf0eE j

  1. public static final String MY_APP = "My Application";  
  2.  
  3. private void someMethod(){  
  4.   logger.log(MY_APP + e);  
  5.   ....  
  6.   ....  
  7.   logger.log(MY_APP + f);  
  8. }

TAG:

 

评分:0

我来说两句

Open Toolbar