- 浏览: 107435 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gogole_09:
zyandu 写道怎么不见大名鼎鼎的MySQL数据库喃 这个跟 ...
J2EE学习中一些值得研究的开源项目(TURN) -
zyandu:
怎么不见大名鼎鼎的MySQL数据库喃
J2EE学习中一些值得研究的开源项目(TURN) -
zcq100:
qq ^[1-9]\d{4-10}$
常用正则表达式[收藏] -
optimism_best:
收藏了,有用
常用正则表达式[收藏] -
likeblood:
这里非原创的文章会被和谐的还是看看发帖规则的好
常用正则表达式[收藏]
前言
本文档反映的是SpringSide 团队的编码规范,同时推荐所有使用SpringSide框架的开发人员遵循。
本文档基本遵循Sun's Coding Conventions,补充了其中没有说明或者有所改动的地方。
本文档随SpringSide的开发而不断更新,最新版本请访问SpringSide Wiki:
http://wiki.springside.org.cn/display/springside/Coding+Standards
版权声明
本规范由springside团队维护,相关评论与意见请发至springside@gmail.com,转载请注明出处。
规范等级说明
级别I: 默认登记要求所有项目中的所有成员遵守。
级别II: 建议所有项目中的所有成员遵守。
级别III: 鼓励各个项目根据实际情况执行。
1.格式与命名规范(Formating and Naming Conventions)
1.1 缩进
使用Tab缩进,而不是空格键--将缩进2,4,8字符的选择权留给阅读者。
1.2 换行
每行120字符--因为已是1024*768的年代。
if,for,while语句只有单句时,如果该句可能引起阅读混淆,需要用" {"和"}"括起来,否则可以省略。
//错误,需要使用花括号{}括起来
if (condition)
if(condition) doSomething();
else
doSomething();
1.3 命名规则
遇到缩写如XML时,仅首字母大写,即loadXmlDocument()而不是loadXMLDocument()
Package名必须全部小写,尽量使用单个单词
Interface名可以是一个名词或形容词(加上'able','ible', or 'er'后缀),如Runnable,Accessible。
为了基于接口编程,不采用首字母为I或加上IF后缀的命名方式,如IBookDao,BookDaoIF。
局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)
1.4 声明
修饰符应该按照如下顺序排列:public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。
类与接口的声明顺序(可用Eclipse的source->sort members功能自动排列):
静态成员变量 / Static Fields
静态初始化块 / Static Initializers
成员变量 / Fields
初始化块 / Initializers
构造器 / Constructors
静态成员方法 / Static Methods
成员方法 / Methods
类型(内部类) / Types(Inner Classes)
同等的类型,按public, protected, private的顺序排列。
2.注释规范(Document Convertions)
2.1 注释类型
2.1.1 JavaDoc注释
略。
2.1.2 失效代码注释
由/*...*/界定,标准的C-Style的注释。专用于注释已失效的代码。
/*
* Comment out the code
* String s = "hello";
* System.out.println(s);
*/
2.1.3 代码细节注释
由//界定,专用于注释代码细节,即使有多行注释也仍然使用//,以便与用/**/注释的失效代码分开
除了私有变量外,不推荐使用行末注释。
class MyClass {
private int myField; // An end-line comment.
public void myMethod {
//a very very long
//comment.
if (condition1) {
//condition1 comment
...
} else {
//elses condition comment
...
}
}
}
2.2 注释的格式
注释中的第一个句子要以(英文)句号、问号或者感叹号结束。Javadoc生成工具会将注释中的第一个句子放在方法汇总表和索引中。
为了在JavaDoc和IDE中能快速链接跳转到相关联的类与方法,尽量多的使用@see xxx.MyClass,@see xx.MyClass#find(String)。
Class必须以@author 作者名声明作者,不需要声明@version与@date,由版本管理系统保留此信息。(II)
如果注释中有超过一个段落,用<p>分隔。(II)
示例代码以<pre></pre>包裹。(II)
标识(java keyword, class/method/field/argument名,Constants) 以<code></code>包裹。(II)
标识在第一次出现时以{@linkxxx.Myclass}注解以便JavaDoc与IDE中可以链接。(II)
2.3 注释的内容
2.3.1 可精简的注释内容
注释中的每一个单词都要有其不可缺少的意义,注释里不写"@param name -名字"这样的废话。
如果该注释是废话,连同标签删掉它,而不是自动生成一堆空的标签,如空的@param name,空的@return。
2.3.2 推荐的注释内容
对于API函数如果存在契约,必须写明它的前置条件(precondition),后置条件(postcondition),及不变式(invariant)。(II)
对于调用复杂的API尽量提供代码示例。(II)
对于已知的Bug需要声明。(II)
2.3.3 Null规约
如果方法允许Null作为参数,或者允许返回值为Null,必须在JavaDoc中说明。
如果没有说明,方法的调用者不允许使用Null作为参数,并认为返回值是Null Safe的。
/**
* 获取对象.
*
* @ return the object to found or null if not found.
*/
Object get(Integer id){
...
}
2.3.4 特殊代码注释
代码质量不好但能正常运行,或者还没有实现的代码用//TODO: 或 //XXX:声明
存在错误隐患的代码用//FIXME:声明
3.编程规范(Programming Conventions)
3.1基本规范
当面对不可知的调用者时,方法需要对输入参数进行校验,如不符合抛出IllegalArgumentException,建议使用Spring的Assert系列函数。
隐藏工具类的构造器,确保只有static方法和变量的类不能被构造
变量定义尽量基于接口而不是具体实现类,如Map map = new HashMap()
代码中不能使用System.out.println(),e.printStackTrace(),必须使用logger打印信息。
3.2 异常处理
重新抛出的异常必须保留原来的异常,即throw new NewException("message",e); 而不能写成throw new NewException("message")。
在所有异常被捕获且没有重新抛出的地方必须写日志。
如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch块。
框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。(III)
3.3 代码度量
3.3.1 耦合度度量
DAC度量值不要不大于7 ( III )
解释:DAC(Data Abstraction Coupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。DAC度量值表示一个类中有实例化的其它类的个数。
CFO度量值不要不大于20 ( III )
解释:CFO(Class Fan Out)类扇出是描述类之间的耦合度的一种代码度量。CFO度量值表示一个类依赖的其他类的个数。
3.3.2 方法度量
方法(构造器)参数在7个以内 ( II )
太多的方法(构造器)参数影响代码可读性,还是不良设计的征兆。考虑用值对象代替这些参数,或者重新设计。
方法长度150行以内 ( II )
太长的方法影响代码可读性,还是一个方法承担了太多责任的征兆。建议拆分责任。
CC 度量值不大于10(III )
解释:CC(CyclomaticComplexity)圈复杂度指一个方法的独立路径的数量,可以用一个方法内if,while,do,for,catch,switch,case,?:语句与&&,||操作符的总个数来度量。
NPath度量值不大于200 ( III )
解释:NPath度量值表示一个方法内可能的执行路径的条数。
3.3.3 其他度量
布尔表达式中的布尔运算符(&&,||)的个数不超过3个(III)
if语句的嵌套层数3层以内(II)
文件长度2000行以内(II)
太大的源程序文件影响代码可读性,还是一个类承担了太多责任的征兆,建议拆分责任到其他类上。
匿名内部类20行以内 ( II )
太长的匿名内部类影响代码可读性。建议:重构为命名的(普通)内部类。
3.4 JDK5.0
重载方法必须使用@Override,可避免父类方法改变时导致重载函数失效。
不需要关心的warning报告用@SuppressWarnings("unused"),@SuppressWarnings("unchecked"),@SuppressWarnings("serial") 注释掉
4.自动代码检查
使用Eclipse 与 Inellij IDEA的代码校验已经可以查出很多的代码质量问题。再配合使用Checkstyle,PMD,FindBugs三重检查,涵盖了大部分的代码GuideLine。
Eclipse:在Windows->Preferences->Java-Compiler->Errors/Warnings中,按本文档的规则将一些原来Ignore的规则打开。
IDEA:在Setting->Errors中设定规则,调用Analyzer->Inspece Code进行校验。
CheckStyle:安装CheckStyle的Eclipse插件,在Windows->Preferences->CheckStyle导入springside团队预设在/tools/codereviewer/springside_check.xml的规则
PMD:安装PMD的Eclipse插件,Windows->Preferences->PMD清除原来所有规则,导入springside团队预设在/tools/codereviewer/springside_pmd.xml的RuleSet。
FindBugs:安装FindBugs的Eclipse插件,在项目属性->FindBugs中,取消下列警告MS/EI/EI2/ , SnVI/SE/WS/RS ,ST/NP/UwF/SS/UuF|UrF|SIC
5.参考资料
Sun's Coding Conventions Sun MicroSystem;
The Elements of Java Style Scott W. Ambler 等著;
代码检测工具的规则: checkstyle,pmd ,findbugs
发表评论
-
安全沙箱[TURN]
2010-07-26 14:02 1502掌握安全模型 安 ... -
J2EE学习中一些值得研究的开源项目(TURN)
2010-06-22 11:10 1032这篇文章写在我研究J ... -
实用代码大全
2009-08-21 13:37 940事件源对象 event.srcElement.tagName ... -
jsp输出静态的图片
2009-08-21 12:21 12092个方式,jsp中直接输出 ... -
java web验证码生成总结(包括servlet、jsp和struts2实现)
2009-08-21 12:19 1777一、使用纯Servlet实现验证码 (1)在web.xml配 ... -
java中相对路径和绝对路径问题总结
2009-08-06 13:51 9151.基本概念的理解 ... -
开发人员Unix基础
2009-08-03 13:41 728Unix系统永远只会越来越多,开发人员就没必要特意学 ... -
网站注入与防范的方法总结
2009-07-31 16:49 6681.首先我会检查一下服务器配置,重新配置一次服务器安全,可以参 ... -
小技巧给网页减肥-让网站访问提速
2009-07-31 14:13 837对于网站设计师来讲,网站的访问速度甚至比内容还重要。就算网站内 ... -
静态html文件js读取url参数
2009-07-30 14:47 1642静态html文件js读取url参数 一、字符串分割分析法。 ... -
SQL查询语句的各类联接
2009-07-30 14:30 867inner join 内联接(左右不为Null ... -
分享:java经典题目
2009-07-30 10:40 835l JBS 1.列举出 ... -
Java 三种模型,四种策略
2009-07-29 10:14 1126混淆事务模型与事务策略是一个常见的错误。本系列关于 事务策略 ... -
提升JSP应用程序的七大绝招
2009-07-28 09:43 729本文讲述了调 ... -
如何解决Java语言的10大问题
2009-07-28 09:40 9791、缺少闭包(closure) ... -
如何有效防止Java源程序被人偷窥
2009-07-28 09:34 927Java程序的源代码很容易被别人偷看,只要有一个反编译 ... -
HTTP请求模型简介
2009-07-24 09:50 784一、连接至Web服务器一 ... -
测试用例的几种设计方法
2009-07-23 12:19 1101一、等价类划分 等价类划分主要适用于单个输入条件,输入 ... -
JAVA强大的基础功能-------Java Reflection
2009-07-23 10:13 793Java Reflection-JAVA反射 Reflect ... -
浅谈Java中的垃圾回收机制
2009-07-21 13:41 11341.垃圾回收是一种动态 ...
相关推荐
3. **代码规范**:springside遵循Java编码最佳实践,如使用Checkstyle和FindBugs进行代码质量检查,确保代码风格统一且无明显错误。 4. **自动化构建**:利用Gradle或Maven的插件,springside支持自动构建、测试和...
它统一了项目的编码规范和构建流程,使得团队成员能更高效地协同开发。 三、springside-test:测试支持 springside-test模块提供了测试相关的工具类和配置,帮助开发者进行单元测试和集成测试。它集成了JUnit、...
1. **代码规范**:SpringSide遵循一系列编码和设计规范,帮助团队保持代码一致性,提升代码质量。 2. **自动化配置**:基于Spring的自动化配置,减少了手动配置的工作量,使开发者能更专注于业务逻辑。 3. **最佳...
2. **最佳实践集成**:springside3集成了许多Java开发的最佳实践,如Maven构建工具、Checkstyle编码规范检查、Junit测试框架等,帮助开发者遵循高质量的开发标准。 3. **快速开发**:通过提供一系列预配置的模板和...
4. **代码规范和最佳实践**:SpringSide强调代码质量,提供了统一的编码风格和最佳实践,这有助于保持团队间的代码一致性,并提高代码可读性和维护性。 5. **项目模板**:SpringSide通常包含一系列预定义的项目模板...
- **遵循最佳编码规范**:SpringSide3 强调代码的整洁性和可读性,遵循 Java 编程规范和注释标准。 - **文档编写**:学习如何编写清晰的项目文档,包括需求文档、设计文档和用户手册,以便团队协作和后期维护。 -...
9. **代码规范**:源码遵循了一套统一的编码规范,这对于团队协作和代码质量的提升至关重要,我们可以从中学习如何制定和遵循良好的编码习惯。 10. **文档注释**:springside3-core-3.0.4的源码有详尽的Javadoc注释...
SpringSide 项目遵循一定的编码规范,如 JavaBeans 规范、命名约定等,同时利用 Checkstyle 和 PMD 等工具进行代码质量检查,保证代码的整洁和一致性。 ### 九、持续集成与持续部署 项目可能包含了持续集成(CI)...
SpringSide 是一个基于 Maven 构建的 Java 企业级应用开发框架,它的核心目标是提供一个规范化的项目结构和最佳实践,帮助开发者快速地搭建起符合现代企业开发标准的项目。SpringSide 使用 Maven 的 Archetype 插件...
- SpringSide项目通常遵循一系列最佳实践,如编码规范、日志管理、异常处理等,通过阅读源码,你可以学习到如何在实际项目中实施这些规范。 通过对SpringSide 3.0.1源代码的深入研究,不仅可以加深对Spring框架的...
它提供了统一的编码规范、测试策略、日志管理、异常处理等,帮助开发者遵循最佳实践,提高代码质量。 5. **自动化测试**:项目内包含了JUnit和Mockito等测试工具,用于编写单元测试和集成测试,确保代码的健壮性和...
这个框架提供了项目生成器,使用Maven的archetype插件来创建符合特定规范的项目结构。SpringSide3.0使用Velocity语法的项目模板,生成的项目包括运行所需的配置文件和示例代码。 在开始使用SpringSide3之前,需要...
11. **文档与规范**:良好的文档和编码规范是SpringSide 4的一个重要特点。它强调代码注释和文档编写,遵循一定的命名规则和设计模式,提升团队协作效率。 通过学习SpringSide 4,开发者不仅可以掌握Spring框架的...