java 命令规范

基本命名规范


  包命名


  包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相反。


  由一组以“。”连接的标识符构成,通常第一个标识符为符合网络域名的两个或者三个英文小写字母。


  People TestPage XMLExample


  类,接口命名


  类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。


  People TestPage XMLExample


  方法名


  方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。可以为动词或动词+名词组合。


  设置/获取某个值的Method,应该遵循setV/getV规范


  返回长度的Method,应该命名为length


  测试某个布尔值的Method,应该命名为isV


  将对象转换为某个特定类型的Mehod应该命名为toF


  getDate(); length(); isReady(); toOracleFormat();


  变量名


  1.普通变量命名应该采用首字母小写,其他字母首字母大写的方式。


  2.final static变量的名字应该都大写,并且指出完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词如。


  NUM_DAYS_IN_WEEK MAX_VALU


  3. 如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性


  context=ctx message=msg


  4. 通过在结尾处放置一个量词,就可创建更加统一的变量


  First(一组变量中的第一个) Last(一组变量中的最后一个) Next(一组变量中的下一个变量) Prev(一组变量中的上一个) Cur(一组变量中的当前变量)


  5. 无论什么时候,均提倡应用常量取代数字、固定字符串。也就是说,程序中除0,1以外,尽量不应该出现其他数字。


  6. 索引变量:i、j、k等只作为小型循环的循环索引变量。


  7. 逻辑变量:避免用flag来命名状态变量,用is来命名逻辑变量。


  if(isClosed){ dosomeworks; return; }


  数组


  总是使用以下方式定义数组:


  int[] arr = new int[10];


  禁止使用C语言的是形式:


  禁止 int arr[] = new int[10];


  集合


  数组或者容器推荐命名方式为名词+s的方式,例如:


  List persons = getPerson(); for(Person person : persons){ dosomeworks; }


  泛型


  应该尽量简明扼要(最好是一个字母),以利于与普通的class或interface区分


  Container中的Element应该用E表示;Map里的key用K表示,value用V;Type用T表示;异常用X表示


  如果需要接收多个Type类型的参数,应该用邻接T的大写字母——例如S——来依次表示,当然也可以用T1, T2这样的方式


  public class HashSet extends AbstractSet {…} public class HashMap extends AbstractMap {…} public class ThreadLocal {…} public interface Functor { T val() throws X; }


  推荐的命名


  1.当要区别接口和实现类的时候,可以在类的后面加上“Impl”。


  interface Container class ContainerImpl


  2.Exception类最好能用“Exception”做为类命名的结尾


  DataNotFoundException InvalidArgumentException


  3.抽象类最好能用“Abstract”做为类命名的开头


  AbstractBeanDefinition AbstractBeanFactory


  4. Test类最好能用“Test”做为类命名的结尾


  ContainerTest


  5.简称与缩写(不推荐使用)


  cp代表colorPoint buf代表buffer off代表offset len代表length


  除非是在循环中,否则一般不推荐使用单个字母作为变量名,不过也有例外,即约定俗成的单个字母


  b代表byte c代表char d代表double e代表Exception f代表float i, j, k代表整数 l代表long o代表Object s代表String v代表某些类型的特定值


  代码风格


  花括号


  花括号统一采用以下格式:


  if(bool experssion){ dosomework; }


  除非花括号中为空,不然任何情况下不能省略花括号,并且花括号必须换行,例如:


  if(i==0){ return; } while(true) {}


  以下写法禁止出现:


  禁止 if(i != 0) return; 禁止 if(i !=0) {return;}


  括号


  括号的前,后一个字符不需要空格,例如:


  Person p = new Person(“Jack”, 17);


  空格


  逗号之后紧跟一个空格。


  Person p = new Person(“Jack”, 16, “China”);


  2. 二元操作符前后跟空格。


  int i = a + b – c * d;


  3. 一元操作符不需要空格,for语句分号后有空格。


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


  4. 括号前后不需要空格


  类


  类的定义结构按照顺序为:


  1) 常量


  2) 成员变量


  3) 构造函数


  4) 成员函数


  5) get和set方法


  各个部分之间留出一个空行。


  例如:


  规范类模板:


  class Person{ private final static int MAX_AGE = 100; private String firstname = “Jack”; public Person(){} public Person(String firstname){ this.firstname = firstname; } public void doExercise(){ dosomeworks; run(); } private void run(){ dosomeworks; } public getFirstname(){ return firstname; } public setFirstname(String firstname){ this.firstname = firstname; } }


  2.构造函数


  1) 参数为空的构造函数出现在最上方


  2) 有调用关系的构造函数相邻


  3) 参数尽量由少到多从上至下排序


  3.使用成员变量


  在类的方法内引用成员变量了命名冲突以外,不使用this。非特殊情况在类的方法内都不使用get和set方法存取成员变量。


  4.方法


  有调用关系的方法尽量放在相邻的位置,public和private方法可以交叉放置。


  5.get和set方法,所有需要公开的成员变量都要符合良好的javabean规范,提供get和set方法,尽量使用IDE工具自动生成。


  Javadoc注释


  在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加 Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示


<hr/>

二、

来自《The Elements of Java Style》-《Java编程风格》一书,值得一读的书籍,会让你在细节上节省很多时间,合作之间更加愉快!

好处不多说了,但是有几个原则如下

1.保持原有风格

2.坚持最小惊奇原则

3.第一次就做对

4.记录所有非规范行为

格式规范:

1.缩进嵌套的代码:在每个代码块和嵌套中加入缩进,缩进代码,加强可读性。这些地方包括【类定义,内部类定义,方法定义,静态块,for循环语句,if-else语句,try、catch和finally块,匿名内部类,while语句,do-while语句】

2.断开很长的句子:第一,如果包含了逗号,那么在每一个逗号后面都另起一行,把逗号后面的每一个表达式都和逗号前面的表达式的第一个字母对齐。第二,应该在优先级最低的运算符之前断行。

3.使用空白:关键字和左括号之间,右括号和紧随其后的关键字,除了"."之外的运算符与其前后的表达式之间用空格隔开。每个逻辑上独立的方法和代码段之间,定义类或者接口的成员之间,每个类和接口之间应该加入空白行。

4.不要直接使用Tab控制符:不同环境对Tab控制符的解释也是不同的。

命名约定:

1.名称应该具有实际意义

2.使用人们熟悉的名称

3.谨慎使用过长的名字,可以使用简明通用的缩写

4.尽量保留元音字母

5.缩写词的第一个字母大写

6.不要使用大小写来区分的名字

包命名:

1.用你所在组织的域名的倒序小写形式作为包的根限定词

2.使用单独的小写词作为每个包的根名

3.仅当新旧版本二进制兼容的时候,其包可以使用相同的名字,否则,请使用新名字

类型命名:

1.类和接口名中的每个单词的第一个字母大写

类命名:

1.用名词命名类

2.具有成组相关属性,静态服务或者常量的类名字使用复数形式

接口命名:

1.用名词或者形容词命名接口

方法命名:

1.方法名中的第一个单词小写,其后每个单词的第一个字母大写

2.用动词命名方法

3.遵循JavaBean中命名属性访问函数方法:set,get,is

变量命名:

1.变量命中的第一个单词小写,其后的每个单词的第一个字母大写

2.用名词命名变量

3.集合引用名要用复数形式

4.为不重要的临时变量简历并使用一套标准名字

字段命名:

1.使用this字段变量可以区分开局部变量

参数命名:

1.构造函数或者"set"方法给字段分配参数赋值,参数名应该和字段名相同

常量命名:

1.常量的每个单词均大写,单词之间使用下划线连接

文档约定:

1.为使用和维护你的代码的人编写文档

2.注释和代码要同步

3.使用积极的语气,省略无用的词语

注释类型:

1.用文档注释来描述编程接口

2.用标准注释格式隐藏代码而不必删除它们

3.用单行注释解释实现细节

文档注释:

1.在编写代码前描述编程接口

2.为公用,受保护,包,私有成员建立文档

3.为每个包编写总结和概述

4.为包的每个应用程序或组编写概述

注释风格

1.对所有文档注释使用统一的格式和组织结构

2.关键字,标识符和常量应放到<code>...</code>标签中

3.将代码放入<pre>...</pre>标签中

4.在标识符第一次出现的时候用{@link}标签

5.为Javadoc标签简历并使用一套固定的顺序

6.使用第三人称叙述的形式

7.编写独立的概述

8.省略概述中动作和服务的主语

9.省略事物概述中的对象和动词

10.使用this而不是the来指代当前类中的实例

11.方法名或者构造函数名不需圆括号,除非你想突出一个特殊的签名

注释内容:

1.每个类、接口、字段和方法都编写概述

2.完整描述每个方法的签名

3.包含示例

4.为前置、后置、不变条件编写文档

5.为已知的缺陷和不足编写文档

6.为同步语法编写文档

内部注释:

1.仅添加有助于理解你的代码的内部注释

2.描写代码为什么这样做,而不是在做什么

3.避免使用行尾注释

4.用行尾注释解释局部变量声明

5.建立并使用一套关键词来标识尚未解决的问题

6.在嵌套程度高的控制结构中标记出嵌套结束位置

7.如果两个case标记之间没有break语句,就在中间加入“fall-through”注释

8.标记空语句

编程约定:

1.将表示基础数据类型的类声明为final类型

2.通过本地类型和其他具体类型建立具体类型

3.定义小的类和小的方法

4.定义子类,以便任何使用超类的地方都可以使用子类

5.使所有字段私有

6.使用多态来替代instanceof

类型安全:

1.以java.lang.Object包装通用类,提供静态类型检查

2.以类的形式封装枚举类型

3.尽量使用泛型

语句和表达式:

1.用等价的方法替换重复的、复杂的表达式

2.使用块语句代替控制流结构的表达式

3.使用括号明确操作顺序

4.在switch语句中的最后一个case体使用break语句

5.使用equals(),而不是==来检测对象的对等关系

构造:

1.构造状态有效的对象

2.不要从构造函数中调用非final方法

3.用嵌套的构造函数消除冗余代码

异常处理:

1.使用不受检查、运行时的异常来报告可能在程序逻辑中出错的严重未查明错误

2.使用检查异常来报告可能发生,而在正常的程序运行时极少发生的错误

3.用返回代码报告可预知的状态改变

4.仅转化异常来添加信息

5.不要私自处置运行时或者错误异常

6.用finally语句块释放资源

断言:

1.按照约定编程

2.用无用代码消除机制实现断言

3.用断言捕捉代码中的逻辑错误

4.用断言检测方法的前置条件和后置条件

并发:

1.仅在适当的地方使用线程

同步:

1.避免同步

2.用同步的包装器,提供同步接口

3.如果方法包含几个不需要同步的重要操作,那么不要同步整个方法

4.读写实例变量的时候避免不必要的同步

5.使用notify()而不是notifyAll()

6.为同步初始化使用双重检查模式

效率:

1.使用懒惰初始化

2.避免创建不必要的对象

3.重新初始化并重新使用对象,尽量不要新建对象

4.把优化工作留在日后

打包约定:

1.将经常使用、更改、同时发布或者互相依存的类型,放在同一个包里

2.共同封闭原则

3.重用/发布等价原则

4.无环依赖原则

5.将不稳定的类和接口隔离在单独的包中

6.易于修改的包不要依赖于难以修改的包

7.最大化抽象最大化稳定性

8.将高层设计和架构作为稳定的抽象,组织为稳定的包

 




1. 模块命名、数据库表命名、域模型命名、各分层的类/方法命名、页面的命名; 模块命名: a. 包命名:com.project_name.module_name.action/service/dao/ws; service的实现都置于com.project_name.module_name.service.impl下; b. 接口命名遵守XxxxService,接口实现遵守XxxxServiceImpl; 2. 包的设计、页面的层次结构设计(jsp/css/js等文件的结构); 3. log、异常(声明式异常)的约定设计; 4. 链接、按钮、表单提交的统一方式;通用式Ajax调用与页面跳转统一模型; 5. 响应一个请求的分层结构约定,列举几个示例(常规调用、Ajax调用、WebService调用、提供WebService暴露、硬件设备接口调用); 6. 验证代码质量的约定,如JUnit、EMMA、FindBugs、CheckStyle、PMD的使用;Hudson持续集成需注意的; 7. 压力测试、防内存泄漏测试; 基础CSS:标签的各种状态的样式;表格单双行的样式; 开发一个Action请求的响应: 前置条件:该Action涉及的Entity及EntityName.hbm.xml已经准备好。 步骤: a. 前端页面触发Action的请求; 统一采用全路径请求,URL格式: 1> basePath/web/moduleName/*_ *.action {1}  EntityName,{2}  ActionMethodName 2> basePath/web/moduleName/gotoXxx.action (无需调用Service,直接跳转) 包括jQuery的Ajax方式和非Ajax方式; 包括表单提交; 参数设值的方式: 1> URL参数: basePath/web/moduleName/*_*.action?entity.propertyName=paramValue&paramName=paramValue 2> 或 另外,对于表单的提交,前后台都必须做数据校验,SWDF已提供了此能力,进行简单的配置即可,前台直接提供类似以下代码即可,点此查看前端校验详细规则说明。 前端校验示例; 后台数据校验,点此查看校验详细说明. b. 配置struts-moduleName.xml; 直接跳转示例; 调用Service示例; c. 开发对应的{EntityName}Action类; 该类必须继承com.hikvision.swdf.xx.BaseAction,该Action类有一个关键属性entity,即泛型Entity类的一个实体,该属性默认填充好了请求提交过来的entity对应参数(即entity.propertyName); d. 开发Service接口和Service接口实现,并在Action中通过set方法注入该Service; 接口文件:UserService 接口实现:UserServiceImpl 注入Service e. 开发DAO,DAO继承com.hikvision.xxx.HibernateBaseDAO; 示例 f. 配置applicationContext-*.xml; 配置DAO bean、Service Bean、Action Bean及注入的配置; g. 测试; 备注: 1. Action建议统一遵守通配符的约定,basePath/web/moduleName/*_ *.action {1}  EntityName,{2}  ActionMethodName 2. 统一命名规则:接口类似UserService,接口实现类型UserServiceImpl;(IUserService和UserServiceImpl) 开发一个Action调用关联应用提供的WebService 前置条件:该WebService?WSDL可正常获取 步骤: a. 配置applicationContext-wsclient.xml; Spring管理第三方WebService实例bean Jaxws-client配置代码 b. 生成第三方WebService接口文件;(提供系统自动生成) 自动生成代码 c. 页面调用Action请求,Action中注入WebService实例bean; Action对应方法直接调用第三方WebService的相关方法; d. 测试; 备注: 1. 步骤b,接口文件必须同包名同类名置于src目录下; 开发一个Action调用关联应用开放的HTTP请求 步骤: 1. 页面调用Action请求; 2. Action类相应方法使用封装好的HttpClient相关工具类,准备好HTTP请求的相关参数header参数和body参数并以xml的方式提交HTTP请求; 3. 解析该HTTP请求返回值(XML或JSON); 4. 响应结果; 5. 测试; 备注: 开发一个需要对第三方应用发布的WebService 步骤: a. 开发WebService接口,@WebService进行注解该接口; b. 开发WebService接口实现类,@WebService注解该实现类,并制定endpointInterface; c. 配置applicationContext-ws.xml d. 测试 备注: 开发一个需要对第三方应用发布的RESTful Service 步骤: a. 开发RS接口,提供如下Annotation; b. 开发RS接口实现,并提供如下Annotation; c. 配置applicationContext-rs.xml 备注: 所有Annotation的涵义解释如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值