最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

JAVA代码规范详细版

来源:动视网 责编:小OO 时间:2025-09-24 10:15:24
文档

JAVA代码规范详细版

JAVA代码规范本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUNJava标准代码规范。如果两边有冲突,以SUNJava标准为准。1.标识符命名规范概述标识符的命名力求做到统一、达意和简洁。统一统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同
推荐度:
导读JAVA代码规范本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUNJava标准代码规范。如果两边有冲突,以SUNJava标准为准。1.标识符命名规范概述标识符的命名力求做到统一、达意和简洁。统一统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同
JAVA代码规范

本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。

1. 标识符命名规范

 概述

标识符的命名力求做到统一、达意和简洁。

 统一

统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。

 达意

达意是指,标识符能准确的表达出它所代表的意义,比如: newSupplier, OrderPaymentGatewayService等;而 supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是 order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。

 简洁

简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长, transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。

"

 骆驼法则

Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是 supplier_name, add_new_contract。

 英文 vs 拼音

尽量使用通俗易懂的英文单词,如果不会可以向队友求助,实在不行则使用汉语拼音,避免拼音与英文混用。比如表示归档,用archive比较好, 用pigeonhole则不好,用guiDang尚可接受。

 包名

使用小写字母如 ,不要 

单词间不要用字符隔开,比如 ,而不要 类名

 首字母大写

类名要首字母大写,比如 SupplierService, PaymentOrderAction;不要 supplierService, paymentOrderAction.

 后缀

类名往往用不同的后缀表达额外的意思,如下表:

后缀名#

意义

举例
Service表明这个类是个服务类,里面包含了给其他类提同业务服务的方法PaymentOrderService
Impl这个类是一个实现类,而不是接口PaymentOrderServiceImpl
Inter这个类是一个接口LifeCycleInter
$

Dao

这个类封装了数据访问方法PaymentOrderDao
Action直接处理页面请求,管理页面逻辑了类UpdateOrderListAction
Listener响应某种事件的类PaymentSuccessListener
Event这个类代表了某种事件{

PaymentSuccessEvent

Servlet一个ServletPaymentCallbackServlet
Factory生成某种对象工厂的类PaymentOrderFactory
Adapter用来连接某种以前不被支持的对象的类DatabaseLogAdapter
Job

某种按时间运行的任务

PaymentOrderCancelJob
Wrapper这是一个包装类,为了给某个类提供没有的能力SelectableOrderListWrapper
Bean这是一个POJOMenuStateBean
 方法名

首字母小写,如 addOrder() 不要 AddOrder()

动词在前,如 addOrder(),不要orderAdd()

动词前缀往往表达特定的含义,如下表:

前缀名@

意义

举例
create创建createOrder()
delete删除deleteOrder()
add创建,暗示新创建的对象属于某个集合addPaidOrder()
?

remove

删除removeOrder()
init或则initialize初始化,暗示会做些诸如获取资源等特殊动作initializeObjectPool
destroy销毁,暗示会做些诸如释放资源的特殊动作destroyObjectPool
open打开&

openConnection()

close关闭closeConnection()<
read读取readUserName()
write写入writeUserName()
get-

获得

getName()
set设置setName()
prepare准备prepareOrderList()
copy复制copyCustomerList()
:

modity

修改modifyActualTotalAmount()
calculate数值计算calculateCommission()
do执行某个过程或流程doOrderCancelJob()
dispatch判断程序流程转向:

dispatchUserRequest()

start开始startOrderProcessing()
stop结束stopOrderProcessing()
send发送某个消息或事件sendOrderPaidMessage()
receive

接受消息或时间

receiveOrderPaidMessgae()
respond响应用户动作responseOrderListItemClicked()
find查找对象findNewSupplier()
update更新对象updateCommission()
)

find方法在业务层尽量表达业务含义,比如 findUnsettledOrders(),查询未结算订单,而不要findOrdersByStatus()。 数据访问层,find,update等方法可以表达要执行的sql,比如findByStatusAndSupplierIdOrderByName, 345)

 域(field)名

 静态常量

全大写用下划线分割,如

public static find String ORDER_PAID_EVENT = “ORDER_PAID_EVENT”;

 枚举

全大写,用下划线分割,如

public enum Events {

ORDER_PAID,

ORDER_CREATED

}

 其他

首字母小写,骆驼法则,如:

public String orderName;

 局部变量名

参数和局部变量名首字母小写,骆驼法则。尽量不要和域冲突,尽量表达这个变量在方法中的意义。

2. 代码格式

用空格字符缩进源代码,不要用tab,每个缩进4个空格。

 源文件编码

源文件使用utf-8编码,结尾用unix n 分格。

 行宽

行宽度不要超过80。Eclipse标准

 包的导入

删除不用的导入,尽量不要使用整个包的导入。在eclipse下经常使用快捷键 ctrl+shift+o 修正导入。

 类格式

·

 域格式

每行只能声明一个域。

域的声明用空行隔开。

 方法格式

 代码块格式

 缩进风格

大括号的开始在代码块开始的行尾,闭合在和代码块同一缩进的行首,例如:

package ;

 

public class TestStyle extends SomeClass implements AppleInter, BananaInter {

     public static final String THIS_IS_CONST = "CONST VALUE";

 

!

    private static void main(String[] args) {

        int localVariable = 0;

    }

 

    public void compute(String arg) {

        if () >  0) {

                    }

 

        for (int i = 0; i < 10; i++) {

                      }

 

.

       while (condition) {

 

       }

 

      do {

          otherMethod();

      } while (condition);

 

  switch (i) {

  case 0:

     callFunction();

{

     break;

  case 1:

     callFunctionb();

     break;

  default:

     break;

  }

 }

}

 空格的使用

 表示分割时用一个空格

不能这样:

if       (               a >        b   )            {

     连续两行的空行代表更大的语义分割。

 方法之间用空行分割

 域之间用空行分割

 超过十行的代码如果还不用空行分割,就会增加阅读困难

3. 注释规范

 注释 vs 代码

 注释宜少二精,不宜多而滥,更不能误导

 命名达意,结构清晰, 类和方法等责任明确,往往不需要,或者只需要很少注释,就可以让人读懂;相反,代码混乱,再多的注释都不能弥补。所以,应当先在代码本身下功夫。

 不能正确表达代码意义的注释,只会损害代码的可读性。

 《

 过于详细的注释,对显而易见的代码添加的注释,罗嗦的注释,还不如不写。

 注释要和代码同步,过多的注释会成为开发的负担

 注释不是用来管理代码版本的,如果有代码不要了,直接删除,svn会有记录的,不要注释掉,否则以后没人知道那段注释掉的代码该不该删除。

 Java Doc

表明类、域和方法等的意义和用法等的注释,要以javadoc的方式来写。Java Doc是个类的使用者来看的,主要介绍 是什么,怎么用等信息。凡是类的使用者需要知道,都要用Java Doc 来写。非Java Doc的注释,往往是个代码的维护者看的,着重告述读者为什么这样写,如何修改,注意什么问题等。 如下:

/**

* This is a class comment

*/

public class TestClass {

    /**

    * This is a field comment

}

    */

    public String name;

 

    /**

    * This is a method comment

    */

    public void call() {

 

    }

}

 块级别注释

#

 块级别注释,单行时用  */。

 较短的代码块用空行表示注释作用域

 较长的代码块要用

/*------ start: ------*/

/*-------- end: -------*/

包围

如:

/*----------start: 订单处理 ------- */

要比 if order’s isPaid method returns true, … 更容易理解

 减少代码嵌套层次

代码嵌套层次达3层以上时,一般人理解起来都会困难。下面的代码是一个简单的例子:

public void demo(int a, int b, int c) {

    if (a > b) {

        if (b > c) {

            doJobA();

        } else if (b < c) {

            doJobB()

        }

    } else {

        if (b > c) {

            if (a < c) {

                doJobC();

|

            }

        } 

    } 

}

减少嵌套的方法有很多:

 合并条件

 利用 return 以省略后面的else

 利用子方法

比如上例,合并条件后成为:

public void demo(int a, int b, int c) {

    if (a > b && b > c) {

:

        doJobA();

    }

    if (a > b && c > b) {

        doJobB();

    }

    if (a <= b && c < b && a < c) {

        doJobC();

    }

}

如果利用return 则成为:

public void demo(int a, int b, int c) {

<

    if (a > b) {

        if (b > c) {

            doJobA();

            return;

        }

        doJobB()

        return;

    }

 

    if (b > c) {

        if (a < c) {

$

            doJobC();

        }

    } 

}

利用子方法,就是将嵌套的程序提取出来放到另外的方法里。

 程序职责单一

关注点分离是软件开发的真理。人类自所以能够完成复杂的工作,就是因为人类能够将工作分解到较小级别的任务上,在做每个任务时关注更少的东西。让程序单元的职责单一,可以使你在编写这段程序时关注更少的东西,从而降低难度,减少出错。

 变量的声明,初始化和被使用尽量放到一起

比方说如下代码:

int orderNum= getOrderNum();

//do something withou orderNum here

~

call(orderNum);

上例中的注释处代表了一段和orderNum不相关的代码。orderNum的声明和初始化离被使用的地方相隔了很多行的代码,这样做不好,不如这样:

//do something withou orderNum here

int orderNum= getOrderNum();

call(orderNum);

 缩小变量的作用域

能用局部变量的,不要使用实例变量,能用实例变量的,不要使用类变量。变量的生存期越短,以为着它被误用的机会越小,同一时刻程序员要关注的变量的状态越少。实例变量和类变量默认都不是线程安全的,局部变量是线程安全的。比如如下代码:

public class OrderPayAction{

    private Order order;

 

    public void doAction() {

;

        order = ();

        doJob1();

        doJob2();

    }

 

    private void doJob1() {

        doSomething(order);

    }

 

    private void doJob2() {

        doOtherThing(order);

~

    }

}

上例中order只不过担当了在方法间传递参数之用,用下面的方法更好:

public class OrderPayAction{

    public void doAction() {

        order = ();

        doJob1(order);

        doJob2(order);

    }

 

    private void doJob1(Order order) {

        doSomething(order);

    }

 

    private void doJob2(Order order) {

        doOtherThing(order);

    }

}

 尽量不要用参数来带回方法运算结果

比如:

public void calculate(Order order) {

    int result = 0;

    //do lots of computing and store it in the result

    (result);

}

 

public void action() {

    order = ();

    calculate(order);

    // do lots of things about order

}

例子中calculate方法通过传入的order对象来存储结果, 不如如下写:

public int calculate(Order order) {

    int result = 0;

    //do lots of computing and store it in the result

    return result;

}

 

public void action() {

    order = ();

    (calculate(order));

    // do lots of things about order

}

文档

JAVA代码规范详细版

JAVA代码规范本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUNJava标准代码规范。如果两边有冲突,以SUNJava标准为准。1.标识符命名规范概述标识符的命名力求做到统一、达意和简洁。统一统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top