Code Conventions for Java java代码写法规范小结

来源:互联网 发布:mac装win8无法加载 编辑:程序博客网 时间:2024/05/12 11:13
  1. 命名

    1. Class、Method、Properties的命名,原则上应以2~4个英语单词的连接,将所代表的业务逻辑表述清楚。
    2. 多个英语单词的组合,一般动词在前,名词在后。
    3. 当英语单词过长时,可以采用此单词的缩写。
    4. Class名:一般每个英语单词的首字母大写,其余小写。
    5. Method名:第一个英语单词全部小写,第二个英语单词开始,首字母大写。
    6. 变量名:一般全部小写。但有多个单词时,第二个单词开始,首字母大写。
    7. 常量:全部大写。当有多个单词时,各个单词之间以下划线("_")来连接。
    8. 建议使用的英语单词以及缩写,另见《命名规则》。
  2. 格式

    1. 每行不超过80列
    2. 缩进一律用空格,不可以用Tab。缩进用4个空格。
  3. Code书写

    1. 在一个Class文件中,应以以下顺序书写:
      • 文件的主注释
      • package
      • import
      • Class/Interface的注释
      • Class/Interface的申明
      • static properties(类变量)的申明
      • static以外的properties(instance变量)的申明
      • constructor(构造器)
      • public method
      • protected method
      • private method
    2. 申明Class或Method时,在左大括号("{")后,应立即换行。
    3. 在for/if等Code的地方,在左大括号("{")后,应立即换行。
    4. 最基本的,按照处理时的顺序,自上而下的书写Code。
    5. 关联紧密的代码,应有意识的做为一个Block连续编写。Block和Block间以空行分隔。
    6. 当调用其它函数,且参数过多时,写在一行里不利于阅读。这种情况下,建议换行,一行一个参数。
    7. 每行只写一条代码。禁止将多条代码书写在一行中。
  4. import

    1. import时,绝对不可以用通配符("*")。实际用多少就import多少。
    2. 建议按照以下顺序书写:
      • java.*
      • javax.*
      • 所用构架所提供的Package(ex: spring.*)
      • 本次开发中新做的Package(ex: au.com.iwanttobuy.*)
  5. 变量

    1. 原则上,一个变量只为了一个目的使用,不可用在多个地方。
    2. 但是,用作循环计数的一般变量可以视为例外。
    3. 变量应统一在Method的最前端申明,并且在申明时赋以初值。例:
      • String str = "abc";
      • Object obj = null;
      • int i = 1;
    4. 在申明数组变量时,应在类型后加上"[]"。例:
      • OKint[]    var = {1, 2, 4, 8};
        String[] str = new String[10];NGint    var[] = {1, 2, 4, 8};
        String str[] = new String[10];
    5. 尽可能在申明数组变量的同时,将数组维数定义清楚。
    6. 尽量不要使用2维以上的数组变量。
    7. Method的调用参数、构造函数的调用参数、临时变量等,不要与类变量/Instance变量重名。
  6. 常量

    1. 常量应先申明后使用。
    2. 为了便于维护,绝对禁止将常量hard coding在代码中。
      • OKstatic final String XYZ = "ABC";
        if (i = XYZ)NGif (i = "ABC")
  7. Class/Instance变量

    1. 申明时,按照以下顺序:
      • public
      • protected
      • private
    2. 不可省略,而使用默认的。
    3. 原则上,不可定义public的变量。应定义为private,然后配合对应的set()/get()函数来使用。
    4. 每行只可申明一个变量。
      • OKint i;
        int j;NGint i, j;
  8. 构造器

    1. 原则上,参数少的先写。
  9. Method

    1. 在设计Method时,应在考虑通用性的原则下,以不可分割的机能为单位,划分每个Method。
    2. 同类型的Method,尽量采用同名异构的方式来设计。
      • 如:getUser(), getUser(int accountSts), getUser(int accountSts, int countryId)
    3. 每个Method的代码量,尽量以不超过200Steps为限。
  10. 参考

    1. http://java.sun.com/docs/codeconv/

  11. 注释

    1. Header Comment
      • Header Comment定义在Source File的最开始的地方,一个Source File只有一个Header Comment。
      • Header Comment包含的内容有:版本,更新时间,更新者,更新内容。
      • 变更历史记录的追加,应在单体测试完成后开始。
      • 版本管理,建议参考SUN的版本管理标准:Version = Major.Minor.Micro
        • Major(1位):重要的机能变更
        • Minor(1位):机能的小规模扩展
        • Micro(2位):细小的修改
      • 范例:
        •  注意格式缩进!

          /*

           * All Rights Reserved. Copyright(C) 2008 www.aaa.com, China

           *

           * History

           *   Version  Update Date   Updater     Details

           *   1.0.00    2008.01.01     name1           Create

           *   1.0.01    2001.02.02     name2          Modified for Bug No.XXX

           *   1.1.00    2001.03.03     name3         Add new function for Bugzilla No.YYY

           */


    2. Class/Interface Comment
      • Class Comment中可使用的Documentation Tag如下:
        • @see - 有重要关联的CLASS或METHOD。CLASS须包含完整Package。
        • @since - 单体测试完成时间。
        • @author - 作者名。建议用英文名称,fistname + lastname
        • @version - 版本信息。
        • <br> - 换行
        • <p> - 段落
        • <code> - 文章内出现的相对短小的代码
        • <pre> - Sample Code
      • Class Comment的第一行应是简短的概括说明,随后才是详细说明。详细说明应包括前提条件、实现上的注意点等。
      • 范例:
        •  注意Comment部分和Source的格式缩进!

          /**

           * Class的概要说明

           * <p>

           * Class的详细说明

           * </p>

           * All Rights Reserved. Copyright(C) 2008 www.aaa.com, China

           * @see  java.lang.Exception

           * @since 2008.01.01

           * @author  Sunny

           * @version  1.1.00

           */

          public class Class ○○Exception extends Exception

          {

    3. Field(Attribute, Prperties) Comment
      • 遵循JAVADOC规约,Comment应加上(/** ... */)。
      • Field的用途、可能包含的值等,在此明确的说明。
    4. Method(Operation) Comment
      • 遵循JAVADOC规约,Comment应加上(/** ... */)。
      • Method具体实现什么机能,在此明确的说明。
      • Method Comment中可使用的Documentation Tag如下:
        • @see - 有重要关联的CLASS或METHOD。CLASS须包含完整Package。
        • @param - 当Method包含参数时,参数的意思和用途要明确的说明。
        • @return - 当Method有返回值时,返回值的意思要明确的说明。
        • @throws - 当Method会往外抛Exception时,Exception的意思和抛出的Exception Class要明确的说明。
      • Method Comment的第一行应是简短的概括说明,随后才是详细说明。详细说明应包括前提条件、实现上的注意点等。
      • 特别是同名异构的Method的Comment,概要说明应有所区别,不要Copy成一样的。
      • 范例:
        •  注意Comment部分和Source的格式缩进!

          /**

           * Method概要说明

           * <p>

           * Method 的详细说明

           * </p>

           * @see java.io.InputStream

           * @param   String  param1  参数1的说明

           * @param  int  param2  参数2的说明

           * @return返回值的说明

           * @throws抛出的Exception 的说明

           * /

          public int func(String param1, int param2) throws exception1

          {

    5. Source Comment
      1. 块Comment
        • 为多行代码加注释时使用。
        • 多为记录数据构造、算法等的说明。
        • 和被说明的代码用同样的格式缩进,注释前空一行。
        •  

          /**

           * 注释

           * 注释

           * /

      2. 行Comment
        • 只用于Method内的代码说明。
        • 写在被说明代码前,并采用同样的格式缩进。
        •  

          // 注释

          statement1;

      3. 后置Comment
        • 被说明的对象的行较短,且说明内容较少的时候采用。
        • 不推荐 。建议用行Comment。
        •  

          fooBarStatement1;      // 注释

          myStatement2;          // 注释

      4. 逻辑分叉Comment
        • 当对if等逻辑分叉处理添加Comment时,写在逻辑分岔行的上方,同样的格式缩进。
        • 逻辑分叉内的处理,在每个分叉内缩进了写。
        •  

          // Check the parameter

          if (userId == null) {
              // return error
              ...
          } else {
              // normal operation
              ...
          }