java编码规范

 

开发命名规范

JAVA编码规范

 

目 录

1 概述 4

2.1 编写目的 4

2.1 预期读者 4

2.1 适用范围 4

2.1 关键词 4

2 命名规范 5

2.1 包命名规则 5

2.1.1 一般原则 5

2.1 5

2.1.2 建议 5

2.1 类名、接口命名规则 6

2.1.3 一般原则 6

2.2 方法命名规则 6

2.2.1 一般原则 6

2.2.2 建议 7

2.3 变量命名规则 9

2.3.1 一般原则 9

2.3.2 建议 9

2.3.3 循环变量命名规则 11

2.4 常量命名规则 12

2.4.1 一般原则 12

3 代码书写规范 13

3.1 代码编写格式 13

3.1.1 严格遵守 13

3.1.2 建议 15

3.2 if, if-else, if else-if else 语句 20

3.3 for 语句 21

3.4 while 语句 22

3.5 do-while 语句 22

3.6 switch 语句 22

3.7 try-catch Statements 23

3.8 返回值 24

3.9 异常 24

3.9.1 严格遵守 25

3.9.2 建议 25

3.10 表达式 25

3.11 体前代码 26

3.12 注释 26

3.13 修改他人代码的注意事项 29

3.13.1 在他人代码中增加代码的时候 29

3.13.2 修改他人代码的时候 29

3.13.3 删除他人代码的时候 30

4 面向对象实现(建议) 31

 


版本变更说明

版本

完稿时间

撰写人

说明

0.1

2013.1.6

曹钦

初稿

1.0

2013.4.19

魏利洁

定稿

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  1. 概述
    1. 编写目的

本文描述了JAVA开发中的有关包、类、接口、方法、实例变量、变量和常量的命名规则,用于规范JAVA编程过程中的命名和代码书写规范。

    1. 预期读者

开发一部JAVA开发组全体成员。

    1. 适用范围

适用于开发部所有基于JAVA开发的项目。

    1. 关键词
  • <projectname>为项目英文简称或缩写;
  1. <modulename>为模块英文名称或简称
    命名规范
    1. 包命名规则

开发组将基于JAVA开发中产生的包分为两类,一是与各业务系统相关的包,一是与业务系统无关的、可公用的包。

      1. 一般原则
    1. 包名应全部是小写字母,包名中不能出现下划线,并且第一个字母不能是数字
    2. 与业务系统相关的包命名格式为:

com.zxt.<projectname>.<modulename>。

其中: <projectname>为项目英文简称或缩写;<modulename>为模块英文名称或简称,如果无细分模块的话可省略模块名。

    1. 与业务系统无关的、可公用的包,通用包命名格式为:

com.zxt.common.<modulename>//所有项目通用

com.zxt.<projectname>.common//单个项目内各模块通用

      1. 建议
  • 工具函数类包名前缀为——util
  • Servlet类包名前缀为——servlet
  • test case类包名前缀为——test
  • 异常包名为——exception
  • 接口实现包名——impl
  • 基础包——base
    1. 类名、接口命名规则
      1. 一般原则

类和接口的名称应是一个名词,采用大小写混和的方式,如果使用拼音则应是全拼,所有单词都应紧靠在一起,其中每个单词的首字母应大写,接口名称应以大写I开始。例如:

class User;

interface ICommonConnection;

class BuMen;//此处为部门全拼

    1. 方法命名规则
      1. 一般原则

第一个单词的首字母用小写,其后单词的首字母大写。

方法名应是一个动词或动名结构,采用大小写混和的方式,其中例如:

Xxxxx.getBmList();

每个方法前必须加说明包括:参数说明、返回值说明、异常说明。如果方法名实在是太长可以对变量名缩写,但是必须添加相应的说明。

      1. 建议
  • 对一般属性的取值,赋值采用get/set模式

例: public void getParameters()

public void setParameters(String strName)

  • 对具有Boolean值的属性使用is/set命名模式

例: public boolean isRunning()

public void setRunning(boolean bRunning)

  • 把值加入到对象中使用load, put

例: public loadCorpExtInfo()

  • 变换类型to

例: public toInt()

  • 静态工厂valueOf

例:public static Boolean valueOf(boolean b) {

return (b ? Boolean.TRUE : Boolean.FALSE);

  }

  • 常用的命名方法:

动词

使用方法

get

返回值。

set

设定値(覆盖)。

is

判断返回boolean

load

读取object

insert

将値读入object

delete

删除object

update

升级object

search

查找

put

追加値(向列表等里面)

print

向指定的stream里输出

to

变换类型

 

    1. 变量命名规则
      1. 一般原则

变量命名一般采用大小写混和的方式,第一个单词的首字母小写,其后单词的首字母大写,变量名一般不要用下划线或美元符号开头。变量名应简短且有意义,即,能够指出其用途。除非是一次性的临时变量,应尽量避免单个字符的变量名。

(1)类的实例对象定义如下:

Person person;

(2)同一个类的多个对象可以采用一下定义方式:

Person  person1;

Person  person2;

(3集合类的实例命名使用集合包含元素的英文名称的复数表示,例如:

Vector persons;

(4)如果变量名实在是太长可以对变量名缩写,但是必须在类说明或方法说明部分(视缩写的范围而定)进行说明。

(5)数组的声明要用"int[] packets"的形式,而不要用"int  packets[]"。

      1. 建议

变量的命名采用匈牙利命名法,即由小写的前缀加上首字母大写的英文单词组成,但前缀可以不加。

  • 常用的基本数据类型前缀如下(Java/Javascript):

类型

缩写(前缀)

int, Integer

int

long

lng

float

flt

double

dbl

byte

byt

boolean

bln

Date

dat

char

chr

String

str

StringTokenizer

stk

StringBuffer

sb

Exception

e

SQLException

sqle

Other Exception

ex

Properties

prps

Application

app

Request

req

Response

res

Session

sess

Cookie

ck

Connection

conn

Statement

stmt

PrepareStatement

ps

CallableStatement

cs

Resultset

rs

Collection

clt

ArrayList

al

Vector

vc

HashTable

ht

Object

obj

其他

不加前缀

      1. 循环变量命名规则

一般采用i、j、k、m、n表示。

例如:

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

    1. 常量命名规则
      1. 一般原则

类常量和ANSI常量的命名应全部用大写,单词间用下划线隔开。例如:

final static int MIN_WIDTH = 4;

  1. final static int MAX_WIDTH = 99;
    代码书写规范
    1. 代码编写格式
      1. 严格遵守
  • 类的方法的代码行数不能过长,尽量控制在100行(不包括空行)以内,长的方法要拆分成私有函数。
  • 页宽应该设置为80字符. 源代码一般不超过这个宽度, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进4个字符.
  • 程序(.java)文档建议采用Javadoc自动生成。
  • 在程序编写时,要通过行缩进体现代码的层次感。
  • 为了避免冲突,import的时候尽量精确到类名字(即不要使用*)。
  • import包按以下顺序,每一类import后面加一个换行。
  1. jdk标准包
  2. java扩展包(例如servlet,javamail,jce等)
  3. 使用的外部库的包(例如xml parser)
  4. 使用的项目的公共包
  5. 使用的模块的其他包

【范例】

import java.io.*;

import java.util.*;

 

import javax.servlet.*;

import javax.mail.*;

 

import org.apache.xml.*;

 

import net.ebseries.*;

import net.ebseries.util.*;

 

import net.ebseries.ebwebmail.*;

  • 每一行至多只有一条语句。

【范例】

argv++;        //正确

argc--;        //正确

argv++; argc--; //避免

  • “{”必须在复合语句起始处的一行的末尾,“}”必须在复合语句结尾另起一行。

【范例】

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

intCount=i;

}

 

      1. 建议

当一个表达式不能在一行里写完,需要转行,按照以下规则转行:

  • 在一个逗号后转行。
  • 在一个操作符前。
  • 数学表达式转行尽量在高的级别而不在低的级别上(参见例子)。
  • 在上一行同一级别的位置对齐新的一行。
  • 如果以上的规则导致混乱,以8个缩进格代替。

【范例】

someMethod(longExpression1, longExpression2, longExpression3,

        longExpression4, longExpression5);

 

var = someMethod1(longExpression1,

                someMethod2(longExpression2,

                        longExpression3));

下面是两个数学表达式转行的例子,第一种是首选,转行在括号外(高级别)。

longName1 = longName2 * (longName3 + longName4 - longName5)

           + 4 * longname6; // 推荐

   

longName1 = longName2 * (longName3 + longName4

                       - longName5) + 4 * longname6; // 不赞成

下面是两个方法声明的例子。第一个是惯例。第二个如果按照惯例将会太靠右,所以仅用8格空格代替。

 

//通常缩排格式

someMethod(int anArg, Object anotherArg, String yetAnotherArg,

           Object andStillAnother) {

    ...

}

 

//用8格空格代替

private static synchronized horkingLongMethodName(int anArg,

        Object anotherArg, String yetAnotherArg,

        Object andStillAnother) {

    ...

}

行转行 如果按照通常的缩进(4格)会看不清楚,行转行缩进规定一般是缩进8格。例如:

//不要用这种缩进

if ((condition1 && condition2)

    || (condition3 && condition4)

    ||!(condition5 && condition6)) { //错误的转行

    doSomethingAboutIt();            //使这行容易混淆

}

 

//要用这种缩进

if ((condition1 && condition2)

        || (condition3 && condition4)

        ||!(condition5 && condition6)) {

    doSomethingAboutIt();

}

  • 避免太多的使用synchronized关键字,应该在必要的时候再使用,这是一个避免死锁的好方法。 
  • if, for语句的逻辑不要太深。这样可读性会非常低,因此请尽量控制在最多三层。 还需要更深时,另外作为一个private method分开处理。 
  • 变量声明的顺序:public——>protected——>private;
  • 使用?:操作时必须写在一行中,并且判断条件必须加括号:

【范例】

return ((i==j) ? intSize : intDefaultSize)

  • 没有特别的考虑,变量都必须赋予初始值;类必须进行实例化;
  • 变量的定义应该放在程序块(条件、循环等)的外面;
  • 变量应逐个进行声明,不要将多个变量放在一行中进行声明;
  • 空的方法体必须在一行中完成:

【范例】

public static void main(String[] args) throws SQLException {}

  • 方法之间必须用空行隔开;
  • 由于数据库不区分大小写,只能采用驼峰命名法,Java程序中和数据库对应的属性不允许驼峰命名法,必须转换成匈牙利命名法。
  • 避免用实例访问类的静态值和方法,应该用类名。

【范例】

classMethod();             //赞成

AClass.classMethod();      //赞成

anObject.classMethod();    //避免

 

  • 避免在一条语句里给几个变量赋同一个值。

【范例】

fooBar.fChar = barFoo.lchar = 'c'; //避免

  • 用圆括号避免优先级的不同,防止出错。

【范例】

if (a == b && c == d)     //避免

if ((a == b) && (c == d)) //赞成

  • 尽量使结构符合预期的目的。

【范例】

if (booleanExpression) {

    return true;

} else {

    return false;

}

应写成

return booleanExpression;

同样的

if (condition) {

    return x;

}

return y;

应写成

return (condition ? x : y);

  • 整个项目要自始至终采用一种编码方式,如java部分采用utf-8编码,jsp部分也要采用此编码。建议使用UTF-8编码方式
    1. if, if-else, if else-if else 语句

if语句必须用{}。

【范例】

if (condition) {

    statements;

}

 

if (condition) {

    statements;

} else {

    statements;

}

 

if (condition) {

    statements;

} else if (condition) {

    statements;

} else{

    statements;

}

 

避免下面的写法:

if (condition) //不赞成

    statement;

    1. for 语句

for语句必须用{}。

【范例】

for (initialization; condition; update) {

    statements;

}

    1.  while 语句

while语句必须用{}。

【范例】

while (condition) {

    statements;

}

    1.  do-while 语句

do-while语句必须用{}。

【范例】

do {

    statements;

} while (condition);

    1.  switch 语句

每一个 switch 必须包括默认子句(default),默认子句中的break是多余的,但它预防流程出错。

【范例】

switch (condition) {

case ABC:

    statements;

 

case DEF:

    statements;

    break;

 

case XYZ:

    statements;

    break;

 

default:

    statements;

    break;

}

    1.  try-catch Statements

【范例】

try {

    statements;

} catch (Exception e) {

    statements;

} finally {

    statements;

}

 

    1. 返回值
  • 在一般情况下,方法返回值不应返回null。而是尽量使用异常代替返回null。如果在特殊情况必须返回null, 必须在方法说明中加以特别说明,如使用“特别注意”等字样。例如:从一个集合类实例中提取一个对象,因为有些集合类实例是允许null作为键或值的,这个时候用异常取代返回null就不合适了。
  • 如果方法的返回值是集合类对象,而且返回的集合对象不包含任何元素时,则应返回0长度或0大小的集合对象。不能返回null。
  • 返回值除了比较的情况之外,尽量不用括号。

【范例】

return;

return myDisk.size();

return (size ? size : defaultSize);

    1. 异常
      1. 严格遵守
  • 一般在try..catch之后,用finally保证资源的正确释放
  • 严禁忽略Exception(如catch(…){},括号内没有处理),这样的程序可读性很差。
      1. 建议

整个应用系统使用自行设计的唯一异常类,该类包括message(表示错误信息)和ID号(整型,表示异常类型)两部分,该类在创建时是自动获得类名、方法名、行号等信息。

在系统开发和上线之后的一段时间内,异常信息要直接发送到浏览器页面,以便于开发人员迅速定位错误。

 

    1. 表达式
  1. 所有的算术、逻辑表达式的每一项运算都需要加圆括号,避免使用java语言的运算符优先级,例如:

(2 *(x + y))/(1 - x);

((n > 1)?(n - 1):(n = 1))

result =(result && (lastOperand > nextOperand));

  1. 二元算术运算符(除去“/”)、二元逻辑元素符、赋值运算符,既“+、-、*、%、+=、-=、*=、/=、%=、>、<、 ==、 >=、<=、 =”等符号左右两边要加空格,

【范例】

 

if(lastOperand  >=  lastOperand)

参数说明部分的逗号“,”和for语句循环说明部分的分号“;”之前不需要留空格,之后需要留空格。

【范例】

Calculator.add(int a, int b);

for(int i = 0; i < 100; i ++);

    1. 体前代码

体前代码包括:

    1. 方法的参数说明和异常说明;
    2. 条件语句,如if语句、switch语句;
    3. 循环语句,如while语句、for语句。

这些语句的参数说明、条件说明和循环控制都放在圆括号内。如果不是特别长,应尽量放在同一行内。

同时注意,参数说明、条件说明和循环控制的结束圆括号“)”与体开始花括号“{”之间留一个空格。

    1. 注释

注释是软件可读性的具体体现。程序注释量一般占程序编码量的20%,软件工程要求不少于20%。以下是四种必要的注释:

  1. 类说明注释

注释一般位于 package/import 语句之前,class 描述之前。要求至少写出内容说明、创建者、创建时间和特别注意事项等内容。

【范例】

/**

 * 名称: ${file_name}<br>

 * 描述: <br>

 * 类型: JAVA<br>

 * 最近修改时间:${date} ${time}<br>

 * @since  ${date}

 * @author 作者

 */

  1. 方法说明注释

对几乎每个方法都应有适当的说明,位于方法声明之前,包括:说明,参数说明、异常说明、返回值说明和特别说明等。【范例】:

/**

 * 方法描述

 *

 * ${tags}

 * @param id  String唯一标识       

 * @param personid String 用户唯一标识

 * @return rtobj BaseReturn 基本返回对象

 * @变更记录 ${date} ${time}  作者 创建

 *

 */

  1. 体内代码的注释

体(方法体、代码块体、静态代码块体等)内的代码按照功能分成多个虚拟的功能块,每个块以块注释“/* xxx */”注释开始,以空行结束;

【范例】:

/**是否超级管理员**/

private Boolean isadmin = false;

if(null!=curOuId&&!curOuId. equals (“”))

{

/*组织机构ID不为空时 */

curOuId = 000000;

   空行

}

空行

if(curOuId==null)

{

/*组织机构ID为空时 */

 

}

  1. 行注释

行注释“//”仅用于调试注释,在程序稳定之后,行注释必须被删除,以免影响程序的可读性。

    1. 修改他人代码的注意事项
      1.  在他人代码中增加代码的时候

当需要在他人代码中增加自己的代码的时候,请按照如下规则增加相应注释:

//Add By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD Begin

……(所增加的代码)

//Add By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD End

      1.  修改他人代码的时候

当需要修改他人写的代码的的时候,请按照如下规则增加注释并修改代码:

//Modify By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD Begin

/*

*………(他人写的变更前的代码)

*/

…………(变更后的代码)

//Modify By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD End

      1. 删除他人代码的时候

当需要删除他人写的代码的时候 ,请按照如下规则删除并增加注释:

//Remove By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD Begin

/*

* …………(要删除的代码)

*/

//Remove By XXX(英文名字) For XXXXX(功能或模块,最好用英文) In YYYY-MM-DD End

  1. 面向对象实现(建议)
  • 严谨性原则:不能只按照正常的流程编写代码,对于非正常情况(如资源状态异常、对象为空、输入不合法、程序运行环境不正常等)必须给予处理。

处理的原则是:能自动恢复的尽量自动恢复,如果不能自动恢复,则提示信息必须友好、清楚,便于定位错误,同时在日志中必须记录。

  • 封装性原则1:类属性的可见性不能为public
  • 封装性原则2:在什么地方创建了对象或请求了资源,一般情况下必须就地释放对象或资源。
  • 复用性原则1:必须使用pub等已经实现的方法,而不是重新编写;
  • 复用性原则2:注重可复用性,将公共操作封装成公共方法,严禁拷贝重复代码。
  • 复用性原则3:尽量采用多态方式实现程序的灵活性

即在父类中定义方法,在不同的子类中实现不同的处理。而其它用户在调用时,只需知道父类的接口,而不需知道不同子类的不同实现,最大程度的实现了程序的灵活性和封装性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值