8种常见的Java不规范代码

上一篇 / 下一篇  2012-09-26 10:42:40 / 个人分类:Java

51Testing软件测试网W/N_ e*@7B2k MC![|

  在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现的不规范代码。所以,我把它们整理成了一个列表出来分享给我的同行希望能引起注意并改善代码的质量和可维护性。51Testing软件测试网$lH9PKxU v

*o3Y m7|C*y}0  这个列表不区分顺序,全部来自一些代码质量检查工具,如 CheckStyle, FindBugs 和 PMD。51Testing软件测试网1GO,a liA2a

+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%Ao.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。

vfofw0

cSS^.}:a`&l0  避免在方法中出现多个return语句(退出点):51Testing软件测试网 O2c[0q7u r:R|4PN

stA.f:a`0  在你的方法中,确保只有一个 退出点。不要在一个方法中使用多于一个return语句。51Testing软件测试网jv/{3H,Viw~4U

51Testing软件测试网@{4c,OoR

  如,下面的代码是 不推荐的,因为它有多个退出点(return语句)。

'G"u,VLr C.X|A0
  1. private boolean isEligible(int age){  
  2.   if(age > 18){  
  3.     return true;  
  4.   }else{  
  5.     return false;  
  6.   }  
  7. }
51Testing软件测试网L E8GP)Ws9jv{

  上面的代码可以这么写(当然,下面的代码还可以改进,后面再说)。

Z,b;]a}8rX0
  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. }
51Testing软件测试网U _wsdB

  简化if-else方法:

v3FG5w/]G7e0

4rq2fX` Y0  我们写了一些只要一个参数的工具方法,检查一些条件并根据条件返回一个值。如,在上面见到的 isEligible方法。

2h"O\M(k*TpA t*v+y0
  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. }

&\)Z2@m9a g(_8d0  可以只使用一个return语句来重写此方法。

aVgEr}`D%q)u%`0
  1. private boolean isEligible(int age){  
  2.   return age > 18;  
  3. }

  4. H+Tpdl7mp(D*Ld9p/~0

    $W,J3a Bf q3t7S6H0  不要为Boolean,Integer或String创建新的实例:51Testing软件测试网0i8B:j nUu oj

    I9@P+lf8U G0  避免创建新的Boolean,Integer,String等实例。使用Boolean.valueOf(true)代替new Boolean(true)。两种写法效果差不多但却可以改善性能。

    +J(nG8uoh T0

    7MC&z*m hP0  在代码块周围使用大括号:51Testing软件测试网&T#Rud z6Z

    v&cFJ#pmP0  永远不要忘记在块类型语句(如:if,for,while)周围使用大括号。这可以减少代码歧义并且避免在你修改代码块的时候产生新的bug

    a)iUw`7t0

    Ujt;CWlVwr/_0  不推荐51Testing软件测试网/H#M+V8\@.J+z

    51Testing软件测试网Pp2z/m{[

    "qT6dT.Ag!G0
    1. if(age > 18)  
    2.   return true;  
    3. else 
    4.   return false;

    $zQh'HJ0J3_,n&g0  推荐51Testing软件测试网!Nf0]"Lrg

    [M2C;N M+m tO%hN0

    .D B(?[3Y0t7l0
    1. if(age > 18){  
    2.   return true;  
    3. }else{  
    4.   return false;  
    5. }

    #e%LrJ8C0  把方法的参数声明为final类型:51Testing软件测试网lY7z'A)B*x

    51Testing软件测试网%t] Jm^ ZmS

      总是在所有兼容的地方把把方法的参数声明为final。这样做的话,当你无意中修改了参数的值,编译时会得到警告,并且编译生成的字节码也会得到优化。51Testing软件测试网j9\[~l8du:QBF

    51Testing软件测试网1?] p2g'z6fNk5l 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:VDJ0IuV

      不推荐

    $~!P BG%a3S051Testing软件测试网:u#K zg j-C^

    51Testing软件测试网yTa-\s7uP

    public static final String testAccountNo = "12345678";

    aLv.`tRK)c+L)X0  推荐51Testing软件测试网1~v,E2G+gYpAO

    51Testing软件测试网 FrU'x*W Ig~h,Bq

    +{-Xy(hce.l;[0
    public static final String TEST_ACCOUNT_NO = "12345678";
    51Testing软件测试网BP3yR,Y6AI(W

      把多个if语句合并成一个:

    M7y:w"M9@^k"`)`051Testing软件测试网!bsB4F:j

      下面的代码

    fXrFw+m*lHZ0

    Yyx H1pLVN0

    $C/Cd-v$C7rvJ1h0
    1. if(age > 18){  
    2.   if( voted == false){  
    3.     // eligible to vote. 
    4.   }  
    5. }

    QnX8a u%s0  可以使用一个if语句改写为:

    5]Q{OI%O|0

    j3zh,~w2X`0

    evD^%D%|9N0
    1. if(age > 18 && !voted){  
    2.   // eligible to vote 
    3. }

    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~$iw r)X

      如果你需要在多个地方使用同一个字符串,那就创建一个字符串常量来使用吧。51Testing软件测试网'a-O3qdh[7S$n

    $Z1v g M9D,f0  下面的代码:51Testing软件测试网*]]B._g4X

    51Testing软件测试网-~+x#xFj!}xf

    2W"Gx`U9J/Z,Pu-[0
    1. private void someMethod(){  
    2.   logger.log("My Application" + e);  
    3.   ....  
    4.   ....  
    5.   logger.log("My Application" + f);  
    6. }

    } V'RfYf7@7b5U0  可以创建一个常量代替字符串"My Application":

    o6M!D)Ppss0

    X K O|4x0

    Ld+j(n3V!eFe0
  5. public static final String MY_APP = "My Application";  
  6. private void someMethod(){  
  7.   logger.log(MY_APP + e);  
  8.   ....  
  9.   ....  
  10.   logger.log(MY_APP + f);  
  11. }

TAG:

 

评分:0

我来说两句

Open Toolbar