8种常见的Java不规范代码_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 8种常见的Java不规范代码

8种常见的Java不规范代码

 2013/11/29 9:26:47  flycars001  程序员俱乐部  我要评论(0)
  • 摘要:在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现的不规范代码。所以,我把它们整理成了一个列表出来分享给我的同行希望能引起注意并改善代码的质量和可维护性。这个列表不区分顺序,全部来自一些代码质量检查工具,如CheckStyle,FindBugs和PMD。在Eclipse中格式化源代码并管理import语句Eclipse提供了自动格式化源代码和管理import语句的功能(并移除未使用的语句)。你可以使用下面的快捷键来使用这些功能
  • 标签:Java 代码

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

  这个列表不区分顺序,全部来自一些代码质量检查工具,如 CheckStyle, FindBugs 和 PMD。

  在Eclipse中格式化源代码并管理import语句

  Eclipse提供了自动格式化源代码和管理import语句的功能(并移除未使用的语句)。你可以使用下面的快捷键来使用这些功能。

  Ctrl + Shift + F – 格式化源代码。

  Ctrl + Shift + O – 管理import语句并移除未使用的语句。

   除了手动执行这两个功能外,你还可以让Eclipse在保存文件的时候自动格式化源代码并自动管理import语句。要做到这个,在Eclipse中, 到 Window -> Preferences -> Java -> Editor -> Save Actions并启用 Perform the selected actions on save,选中 Format source code和 organize imports。

  避免在方法中出现多个return语句(退出点):

  在你的方法中,确保只有一个 退出点。不要在一个方法中使用多于一个return语句。

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

  1. class="alt">private?boolean?isEligible(int?age){ ?
  2. ??if(age?>?18){ ?
  3. ????return?true; ?
  4. ??}else{ ?
  5. ????return?false; ?
  6. ??} ?
  7. }

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

  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. }

  简化if-else方法:

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

  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. }

  可以只使用一个return语句来重写此方法。

  1. private?boolean?isEligible(int?age){ ?
  2. ??return?age?>?18; ?
  3. } 不要为Boolean,Integer或String创建新的实例:

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

      在代码块周围使用大括号:

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

      不推荐

    ?

    1. if(age?>?18) ?
    2. ??return?true; ?
    3. else?
    4. ??return?false;

      推荐

    ?

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

      把方法的参数声明为final类型:

      总是在所有兼容的地方把把方法的参数声明为final。这样做的话,当你无意中修改了参数的值,编译时会得到警告,并且编译生成的字节码也会得到优化。

      推荐

    ?

    private?boolean?isEligible(final?int?age){?...?}

      用大写命名public static final类型成员变量:

      总是使用大写命名用public static final类型变量。这样可以让你很容易区分常量和本地变量。

      不推荐

    ?

    public?static?final?String?testAccountNo?=?"12345678";

      推荐

    ?

    public?static?final?String?TEST_ACCOUNT_NO?=?"12345678";

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

      下面的代码

    ?

    1. if(age?>?18){ ?
    2. ??if(?voted?==?false){ ?
    3. ????//?eligible?to?vote. ?
    4. ??} ?
    5. }

      可以使用一个if语句改写为:

    ?

    1. if(age?>?18?&&?!voted){ ?
    2. ??//?eligible?to?vote ?
    3. }

      别忘了给switch添加default语句:

      总是给switch添加一个default语句。

      避免重复使用同样的字符串,创建一个常量吧:

      如果你需要在多个地方使用同一个字符串,那就创建一个字符串常量来使用吧。

      下面的代码:

    ?

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

      可以创建一个常量代替字符串"My Application":

    ?

    1. public?static?final?String?MY_APP?=?"My?Application"; ?
    2. private?void?someMethod(){ ?
    3. ??logger.log(MY_APP?+?e); ?
    4. ??.... ?
    5. ??.... ?
    6. ??logger.log(MY_APP?+?f); ?
    7. }
发表评论
用户名: 匿名