- 级别I: 默认登记要求所有项目中的所有成员遵守。
- 级别II: 建议所有项目中的所有成员遵守。
-
级别III: 鼓励各个项目根据实际情况执行。
使用Tab缩进,而不是空格键--将缩进2,4,8字符的选择权留给阅读者。
每行120字符--因为已是1024*768的年代。
if,for,while语句只有单句时,如果该句可能引起阅读混淆,需要用" {"和"}"括起来,否则可以省略。
//错误,需要使用花括号{}括起来
if (condition)
if(condition) doSomething();
else
doSomething();
- 修饰符应该按照如下顺序排列: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
本文转自 :Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1443852
本规范由springside团队维护,相关评论与意见请发至springside@gmail.com,转载请注明出处。
分享到:
相关推荐
Java命名规范是编程实践中至关重要的指导原则,旨在提高代码的可读性和一致性。遵循这些规范,可以帮助团队成员更好地理解和维护代码,减少误解和错误。以下是Java命名规范的主要方面: 1. **包(Package)**: 包名...
Java 开发命名规范是指在 Java 项目中对包名、类名、变量名等命名的规则和惯例,旨在确保代码的可读性、可维护性和重用性。本文将对 Java 开发命名规范进行详细的解释和说明。 一、包名命名规范 包名是 Java 项目...
Java 命名规范是指在 Java 编程语言中为变量、类、方法、包等命名的规则和约定。遵守良好的命名规范可以提高代码的可读性、易维护性和协作性。 包命名规范: * 包名全部小写 * 针对不同的项目类型,细分为个体项目...
Java语言命名规范是Java编程中的一项基本规则,它旨在提高代码的可读性、可维护性和一致性。遵循这些规范对于任何Java开发者来说都是至关重要的,因为它使得团队成员能够更容易地理解彼此的代码,从而提高协作效率。...
以下将详细介绍Java项目开发规范中关于MVC各模块的命名规范。 **1. 命名方式** - 文件名、变量名应使用有意义的英文或英文缩写命名,确保名称与数据表结构的名称一致,以便提高查阅效率。 - 多词组合命名遵循驼峰...
### Java代码命名规范 在Java编程中,遵循良好的命名规范对于编写可读性强、易于维护的代码至关重要。尤其是对于Java初学者来说,培养正确的命名习惯能够有效减少后续开发中的问题,提升团队协作效率。本文将从变量...
这份文档详细地阐述了JAVA项目中的各类命名规范、注释规范、项目文件夹组织规范以及排版规范,旨在提升软件的可读性、可重用性、健壮性、可移植性和可维护性。 ### 命名规范 #### 包命名规范 包命名应反映项目的...
本人觉得这对于从事程序开发的程序员很有必要的了解一下。 因为这是一下很基本的东西,不解释!
Java编程语言有着严格的命名规范和注释规则,这对于提高代码的可读性、可维护性和团队协作至关重要。以下是对这些规范的详细说明: 1. **包名命名规范**: - 包名全由小写字母组成,可以包含少量数字。 - Java...
### Java开发命名规范详解 #### 一、概述 在Java软件开发过程中,遵循一套统一的命名规范至关重要。它不仅能够提高代码的可读性和可维护性,还能够增强团队协作效率。本文将根据提供的文件信息,详细介绍Java开发...
Java编程语言以其严谨的规范和良好的可读性著称...Java命名规范是编程实践中的一项基本准则,遵守这些规则可以使代码更易于理解和维护,也利于团队间的合作。熟练掌握并应用这些规范,将有助于提升编程效率和代码质量。
### Java命名规范详解 在Java开发过程中,遵循一套合理的命名规范不仅能够提高代码的可读性和可维护性,还能帮助团队成员更快地理解和协作。本文将详细介绍Java中的命名规范,并结合给定的部分内容来具体说明。 ##...
Java SSH(Spring、Struts和Hibernate)命名规范是软件开发中的一个重要方面,它确保了代码的可读性、可维护性和一致性。以下是基于提供的信息详细解释的命名规范: ### 包的命名 - 包名全为小写字母,遵循反向域名...
4. **其他命名规范**: - 避免使用Java关键字作为变量名,如`class`、`void`等。 - 避免使用缩写,除非它是广泛认可且无歧义的,例如`num`代表数字。 - 常量(Constants)通常使用全大写字母,用下划线分隔单词,...
Java编程语言的命名规范是确保代码清晰、可读和易于维护的关键部分。这些规范不仅有助于团队成员之间的沟通,还能提高代码质量。以下是一些主要的Java命名规则: 1. **包名**: - 包名应全部使用小写字母。 - ...
Java编程语言的命名规范是确保代码清晰、一致性和可读性的关键部分。这些规范帮助开发者理解和维护代码,尤其是在团队合作的大型项目中。以下是一些主要的Java命名规则: 1. **包(Package)的命名**: 包名应该...
在Java编程语言中,包(Package)是一种组织代码的方式,它可以帮助我们管理类和接口,避免命名冲突,提高代码的可维护性和可重用性。...因此,对于任何Java开发者来说,掌握包的命名规范都是至关重要的。