JTest检查的Java编程规范

合集下载

Java编程规范

Java编程规范

Java编程规范Java是一种非常流行的编程语言,被广泛用于开发各种不同类型的应用程序。

为了编写出高质量的Java代码,掌握Java编程规范至关重要。

Java编程规范是一组约定俗成的规则,指导Java开发人员编写规范、易于维护、易于阅读和易于扩展的代码。

为什么需要Java编程规范?虽然Java是一种相对简洁而易于学习的编程语言,但Java程序员仍然需要遵循一些对代码进行组织、格式化和编写的准则。

这样可以提高代码的可读性和可维护性,减少程序错误和提高可扩展性。

编程规范还提供了一致的代码格式,这有助于开发人员在团队中协作工作。

Java编程规范是什么?Java编程规范是一组约定俗成的规则和最佳实践,指导Java开发人员编写规范、易于维护、易于阅读和易于扩展的代码。

Java 编程规范涵盖了代码格式、命名规则、注释规则、代码结构等方面。

这些规范不是Java语言的特定要求,而是开发社区自己进行的标准化。

Java编程规范的好处- 提供一致的编码标准,方便团队成员对代码进行检视、维护和扩展。

- 保持代码的可读性,方便程序员理解和修改代码。

- 提高代码的可靠性,减少程序错误。

- 提高团队间沟通的效率,减少因代码格式等问题导致的无谓争论。

- 为代码的性能和安全提供保障。

Java编程规范的指导原则- 遵循简洁原则:避免冗长、复杂的代码,尽量减少代码行数和函数长度,减少程序错误。

- 遵循可读性原则:代码格式、缩进、注释、空行等要求清晰、易于阅读。

- 遵循命名规则:变量、函数、类等要使用有意义、一致的命名方式。

- 遵循安全性原则:防止代码中出现漏洞、可被攻击和误用,确保代码策略和数据安全。

- 遵循可维护性原则:代码要易于维护、修改、扩展,采用模块化、复用的方式。

Java编程规范的建议- 使用空格而不是制表符,建议使用4个空格来缩进。

- 大括号要独立一行,这样可以提高代码可读性,并能更好地处理嵌套条件和循环语句。

- 变量名和函数名要有意义,使用驼峰命名法。

jtest评分标准

jtest评分标准

jtest评分标准一、jtest评分标准概述。

jtest是一种全面的Java程序静态分析工具,它可以帮助开发人员发现代码中的潜在问题,并提供改进建议。

jtest评分标准是基于一系列的规则和指南,用于评估代码的质量和可靠性。

通过遵循jtest评分标准,开发人员可以编写出更加健壮和可维护的Java代码。

二、代码结构。

1. 代码组织。

代码应该按照功能进行组织,并且应该遵循一定的命名规范。

类、方法和变量的命名应该清晰、具有描述性,并且符合命名规范。

2. 代码注释。

代码中应该包含足够的注释,以便其他开发人员能够理解代码的意图和功能。

注释应该清晰、简洁,不应该包含无关信息。

3. 代码复杂度。

代码的复杂度应该尽量保持在可控范围内,避免出现过于复杂的逻辑结构。

长方法应该拆分成更小的方法,以提高代码的可读性和可维护性。

三、代码质量。

1. 代码规范。

代码应该符合Java编码规范,避免出现不规范的代码风格。

应该避免使用过时的API或者不推荐使用的特性。

2. 异常处理。

代码应该正确地处理异常情况,避免出现未捕获的异常或者不恰当的异常处理。

异常处理应该具有针对性和清晰的逻辑。

3. 冗余代码。

应该避免出现冗余的代码,重复的代码应该进行抽取和重构。

冗余的代码会增加维护成本,并且降低代码的可读性。

四、测试覆盖率。

1. 单元测试。

代码应该包含足够的单元测试,以覆盖主要的逻辑分支和边界情况。

单元测试应该具有高质量,覆盖率应该尽可能地全面。

2. 集成测试。

集成测试应该覆盖不同模块之间的交互,确保整个系统的功能和性能。

五、安全性。

1. 安全漏洞。

代码应该避免出现常见的安全漏洞,如SQL注入、跨站脚本等。

应该对用户输入进行充分的验证和过滤,确保系统的安全性。

2. 加密和认证。

对于涉及到用户隐私和敏感信息的处理,应该采用合适的加密和认证手段。

六、性能优化。

1. 代码性能。

代码应该避免出现性能瓶颈,应该对性能敏感的部分进行优化。

应该避免不必要的资源消耗和性能损耗。

Java代码检查规范指导书.docx

Java代码检查规范指导书.docx

Java 代码检查规范指导书审核 :日期:批准 :日期:实施日期2010 年 05 月 24 日版本号A-0密级内部修改履历版本号日期作者修订要点A-02010-5-24吴兆彬新作成目录1引言 (5)2应用范围 (5)3角色职责 (5)4输入 (5)5输出 (6)6作业流程 (6)6.1 C HECK S TYLE安装与使用 (7)6.1.1CheckStyle插件安装 (7)6.1.1.1“在线更新”安装方式 (7)6.1.1.2“手动下载”安装方式 (7)6.1.2CheckStyle的配置与使用 (9)6.1.2.1导入:规则文件 (9)6.1.2.2启用:项目检查 (10)6.1.2.3查看:结果视图 (10)6.2 E CLIPSE C ODE S TYLE的配置 (10)6.2.1.1“代码模版”的配置 (10)6.2.1.2“代码格式化”的配置 (11)6.2.1.3“代码清理”的配置 (11)6.3代码修正 (11)7问题反馈( FAQ ) (12)1)为什么第一句话需要以标点符号结束? (12)2)“”应}该”在同一行”的提示信息? (12)3)“一个局部常数,最好定义为全局常数”的提示信息? (12)4)“条件逻辑语句应该被移除”的提示信息? (13)5)“变量应该声明为 PRIVATE ”的提示信息? (13)6)“工具类不应该存在PRIVATE 或者默认构造函数”的提示信息? (14)7)“参数超过 7 个”的提示信息? (14)8)“类级的常量必须与模式”^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ ”相匹配”的提示信息?149)“避免在语句中出现嵌套的赋值语句”的提示信息? (15)1引言在编码规范推进过程中,陆续收到很多开发人员提交上来的疑问,这里逐一统一做了一个整理和收集,做成能够为开发人员提供指导意见的工作流程,以提供大家互相参考和借鉴,共通把电信信息化部的编码风格做到一致,为编码质量的提高奠定基础。

Java编程的标准之JAVA编程规范

Java编程的标准之JAVA编程规范

Java编程的标准之JA V A编程规范简介本文提供一整套编写高效可靠的 Java 代码的标准、约定和指南。

它们以安全可靠的软件工程原则为基础,使代码易于理解、维护和增强。

而且,通过遵循这些程序设计标准,你作为一个 Java 软件开发者的生产效率会有显著提高。

经验证明,若从一开始就花时间编写高质量的代码,则在软件开发阶段,对代码的修改要容易很多。

最后,遵循一套通用的程序设计标准将带来更大的一致性,使软件开发团队的效率明显提高。

最根本的原则:运用常识。

当找不到任何规则或指导方针,当规则明显不能适用,当所有的方法都失效的时侯:运用常识并核实这些基本原则。

这条规则比其它所有规则都重要。

常识是必不可少的。

程序设计标准Java 的程序设计标准很重要,原因在于它将提高开发团队各成员的代码的一致性。

一致性的提高会使代码更易理解,这意味着它更易开发和维护。

从而降低了应用程序的总开发成本。

你必须牢记的是:你的 Java 代码在你已离开并开始另一个项目之后,会保留相当长的一端时间。

因此开发过程中一个很重要的目标就是要确保在开发成员或开发团队之间的工作可以顺利交接,不必花很大的力气便能理解已编写的代码,以便继续维护和改进以前的工作。

如果代码难以理解,很有可能被废弃和重写。

命名约定我们将在整个标准中讨论命名约定,所以让我们先讨论几个基本点:1.使用可以准确说明变量/字段/类的完整的英文描述符。

例如,采用类似firstName,grandTotal或CorporateCustomer这样的名字。

虽然象x1,y1或fn这样的名字很简短,输入起来容易,但是我们难以知道它们代表什么、结果是什么含义,因而使代码难以理解、维护和改进。

2.采用该领域的术语。

如果用户称他们的“客户” (clients) 为“顾客”(customers),那么就采用术语Customer来命名这个类,而不用Client。

许多程序开发者会犯的一个错误是,不去使用工业或领域里已经存在着很完美的术语时,却生造出一些普通词汇。

Java语言编程规范(华为公司)

Java语言编程规范(华为公司)

Java语言编程规范(华为公司)DKBA华为技术有限公司企业技术规范DKBAXXXX-2001.12代替(DKBA200106-003)Java语言编程规范2001-12-XX发布2001-12-XX实施华为技术有限公司发布VVVVVVV VVVVVVVVVVVX。

XVX.X VX.X VX.X VX.XVX.X 目次前言 .............................................................................. .. (3)1 范围112 规范性引用文件113 术语和定义114 排版规范124.1 规则121.*程序块要采用缩进风格编写,缩进12的空格数为4个。

122.*分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

133.*较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

134.*不允许把多个短语句写在一行中,即一行只写一条语句5.*if, for, do, while, case,13switch, default 等语句自占一行,且if, for, do, while等语句的执行语句无论多少都要加括号{}。

6.*相对独立的程序块之间、变量说明13之后必须加空行。

7.*对齐只使用空格键,不使用TAB键。

14VVVVVVV VVVVVVVVVVVX。

XVX.X VX.X VX.X VX.XVX.X 8.*在两个以上的关键字、变量、常量14进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。

Jtest规范

Jtest规范

JA V A 编码标准规范一、JA V A编码标准规则1. JavaBeans [BEAN]2. 编码约定/ 惯例Coding Conventions [CODSTA]3. 契约设计/ Design by Contract [DBC]4. Enterprise JavaBeans [EJB]5. 异常/ Exceptions [EXCEPT]6. 格式化/ Formatting [FORMA T]7. 碎片回收集/ Garbage Collection [GC]8. 全面静态分析/ Global Static Analysis [GLOBAL]9. 初始化/ Initialization [INIT]10. 国际化/ Internationalization [INTER]11. JA V A2 微型平台/ Java 2 Micro Edition [J2ME]12. JA V A文档注释/ Javadoc Comments [JA VADOC]13. JA V A数据库连接/ Java Database Connectivity [JDBC]14. JavaServer Pages [JSP]15. JavaServer Page Metrics [JMETRICS]16. Junit测试用例/ JUnit Test Case [JUNIT]17. 类结构/ Class Metrics [METRICS]18. 不同特性/ Miscellaneous [MISC]19. 命名约定/惯例Naming Conventions [NAMING]20. 面向对象编程/ Object Oriented Programming [OOP]21. 最优化/ Optimization [OPT]22. 可能存在的BUG/ Possible Bugs [PB]23. 简便/ Portability [PORT]24. 安全/ Security [SECURITY]25. 序列化/ Serialization [SERIAL]26. Servlets [SERVLET]27. Struts 框架/ Struts Framework [STRUTS]28. 线程与同步/ Threads & Synchronization [TRS]29. 从未使用的代码/ Unused Code [UC]30. 安全(必要的许可)/ Security (License Required) [SLR]31. 安全策略规范Security/ Policy Rules (License Required) [SPR]32. Web安全(必要的许可)/ Web Security (License Required) [WSLR]二、内置与自定义的标准组1. 内置的Jtest配置/ Built-in Jtest Configurations2. 测试驱动开发(TDD)/ Test Driven Development (TDD)3. Parasoft的自动错误预防组/ Parasoft's AEP group4. Scope Examples group5. 其他配置/ Other configurations6. 自定义编码标准分析:概要/ Customizing coding standard analysis: overview一、JA V A编码标准规则1. JavaBeans [BEAN]1-1.在JavaBean类中为listener方法名使用适当的签名/Use appropriate signatures for listener method names in JavaBean classes [BEAN.BLNC-1]1-2.确保JavaBean类实现了'java.io.Serializable'/Ensure that JavaBean classes implement 'java.io.Serializable' [BEAN.SERIALIZABLE-2]1-3.在JavaBean类中覆写'Object.equals()' /Override 'Object.equals()' in JavaBean classes [BEAN.EQUALS-4] 1-4.在JavaBean类中不使用JDBC代码/Do not use JDBC code in JavaBean classes [BEAN.JDBC-4]1-5.在私有字段中定义get和set方法/Define get and set methods for each private field [BEAN.NFM-4]2. Coding Conventions [CODSTA]2-1.避免在其他表达式中嵌套赋值或内部赋值/ Avoid nested assignments or assignments embedded in other expressions [CODSTA.NEA-1]2-2.适当性的定制编辑单元成分/ Order compilation unit elements appropriately [CODSTA.ORCU-1]2-3.在一个语句中不要断言不同类型中的多个变量/ Do not declare multiple variables of different types in one statement [CODSTA.VDT-1]2-4.为Cloneable类声明'clone() throws CloneNotSupportedException'/ Declare 'clone() throws CloneNotSupportedException' for Cloneable class [CODSTA.CLONE-2]2-5.确保没有终结Cloneable类中的'clone()'方法声明了'CloneNotSupportedException'/ Ensure 'clone()' method of non-final Cloneable class declared to throw 'CloneNotSupportedException' [CODSTA.CLONET-2]2-6.避免在长整型常量后有小字母的"l"或字母的"1"/ Avoid having a lower-case "l" or the number "1" at the end of a "long" integer constant [CODSTA.LONG-2]2-7.避免字面意义的常量/ Avoid literal constants [N-2]2-8.不要使用"break" 和(或则)"continue"与符号/ Do not use "break" and/or "continue" with labels [CODSTA.ABCL-3]2-9.在"if"语句中不要使用复杂的条件表达式/ Do not use complicated conditional expressions in "if" statements [CODSTA.ACCS-3]2-10.在一个catch块中不要使用instanceof去检查异常类型/ Do not use instanceof in a catch block to check the exception type [CODSTA.AIOC-3]2-11.不要覆写父类中的非抽象方法/ Do not override non "abstract" methods of a parent class with "abstract" methods [CODSTA.AMMO-3]2-12.用较少的特定类型实现松散耦合/ Use less specific types to accomplish loose coupling [CODSTA.AUVT-3]2-13."final"以大写字符名声明字段/ Declare fields with uppercase character names as "final" [CODSTA.CFNF-3]2-14.在类中使用链构造器实现多个构造器/ Use chain constructors in classes with multiple constructors [CODSTA.CHAIN-3]2-15.在嵌套的表达式中避免使用增量或减量的算法/ Avoid using increment or decrement operators in nested expressions [CODSTA.CID-3]2-16.使用'clone()'方法仅仅是实现'Cloneable'接口/ Use the 'clone()' method only to implement 'Cloneable' interface [CODSTA.CLONE2-3]2-17.强制或避免使用条件算法/ Enforce or avoid usage of conditional operators [CODSTA.CX-3]2-18.只要可能就定义一个非自变量构造器/ Define a no argument constructor whenever possible [CODSTA.DCTOR-3]2-19.适当的定制类元素/ Order class elements appropriately [CODSTA.FO-3]2-20.不要在一个语句中声明多个变量Do not declare multiple variables in one statement [CODSTA.MVOS-3] 2-21.在构造器执行期间不要调用方法那样可能会引起意料不到的NullPointerExceptions/ Do not call methods that might cause unexpected NullPointerExceptions during constructor execution [CODSTA.NCNFC-3]2-22.避免"throws"异常;而用'Exception'的子几集/ Avoid "throws" Exceptions; use subclasses of 'Exception' [CODSTA.NTX-3]2-23.以名字来组织方法/ Organize methods by name [CODSTA.OGM-3]2-24.当你覆写'Object.hashCode()'时也覆写'Object.equals()'/ Override 'Object.equals()' when you override 'Object.hashCode()' [CODSTA.OVERRIDE2-3]2-25.确保一个类中仅有的"private"构造器声明为"final"/ Ensure that a class which has only "private" constructors is declared as "final" [CODSTA.PCF-3]2-26.避免"switch"语句有多个"case"语句/ Avoid "switch" statements with many "case" statements [CODSTA.SMC-3]2-27.每个文件中至多有一个类型/ Do not have more than one type in each file [CODSTA.AMOC-4]2-28.不要使用符号语句/ Do not use label statements [CODSTA.AULS-4]2-29.避免嵌套的块/ Avoid nested blocks [CODSTA.BLOCK-4]2-30.在比较中适当的一边放置常量/ Place constants on the appropriate side of comparisons [CODSTA.CS-4]2-31.所有形式参数声明为"final"/ Declare all formal parameters as "final" [CODSTA.FPF-4]2-32.避免或强制在import语句中使用'*'/ Avoid or enforce usage of '*' form of import statements [CODSTA.IMPTD-4]2-33.在一个"abstract"类中不要从构造器中调用一个"abstract"方法/ Do not call an "abstract" method from a constructor in an "abstract" class [CODSTA.NCAC-4]2-34.不要使用'Exception', 'RuntimeException', 或者'Throwable'在"catch"语句中/Do not use 'Exception', 'RuntimeException', or 'Throwable' in "catch" statement [CODSTA.NCE-4]2-35.避免非静态初始化/ Avoid non-static initializers [CODSTA.NSI-4]2-36.避免多个负载的方法有同样数字的参数/ Avoid multiple overloaded methods with the same number of parameters [CODSTA.OVERLOAD-4]2-37.当你覆写'Object.equals()'时也覆写'Object.hashCode()'/ Override 'Object.hashCode()' when you override 'Object.equals()' [CODSTA.OVERRIDE-4]2-38.在最后放置'main()'方法/ Place the 'main() 'method last [CODSTA.PML-4]2-39.避免或强制使用"this"和"super"表达式/ Avoid or enforce the use of "this" and "super" expressions [CODSTA.UATS-4]2-40.避免所有的类型有一个非默认的包名/ Ensure all types have a non default package name [CODSTA.UNDPN-4]2-41.在if-else中避免使用负逻辑/ Avoid using negative logic in if-else statement [CODSTA.ANL-5]2-42.在一个"interface"应定义常量/ Define constants in an "interface" [CODSTA.DCI-5]2-43.在单一的方法中不要使用过多的'!'否定算法/ Do not use too many negation operators '!' in a single method [CODSTA.DUN-5]2-44.不要使用一个"interface"去定义常量/ Do not use an "interface" to define constants [CODSTA.ISACF-5]2-45.在"public"和"protected"方法间放置'finalize()'方法/ Place 'finalize()' methods between "public" and "protected" methods [CODSTA.ORFIM-5]2-46.以整齐的字母序列呈现"import"语句/ Present "import" statements in alphabetical order [CODSTA.ORIMP-5]2-47.覆写'toString ()'/ Override 'toString ()' [CODSTA.OTOSM-5]3. Design by Contract [DBC]3-1.在契约设计中使用正确的约定语法/ Use correct syntax in the DbC contracts [DBC.SYNTAX-1]3-2.为所有"public"方法提供一个'@post'约定/ Provide an '@post' contract for all "public" methods [DBC.PUBMPOST-2]3-3.为所有"public" 类提供一个'@invariant'约定/ Provide an '@invariant' contract for all "public" classes [DBC.PUBC-2]3-4.为所有"public"方法提供一个'@pre'约定/ Provide an '@pre' contract for all "public" methods [DBC.PUBMPRE-2]3-5.为所有"protected"类提供一个'@invariant'约定/Provide an '@invariant' contract for all "protected" classes [DBC.PROC-3]3-6.为所有"protected"方法提供一个'@post'约定/ Provide an '@post' contract for all "protected" methods [DBC.PROMPOST-3]3-7.为所有"protected"方法提供一个'@pre'约定/ Provide an '@pre' contract for all "protected" methods [DBC.PROMPRE-3]3-8.为所有私有类包提供一个'@invariant'约定/ Provide an '@invariant' contract for all package-private classes [DBC.PKGC-4]3-9.为所有私有方法包提供一个'@post'约定/ Provide an '@post' contract for all package-private methods [DBC.PKGMPOST-4]3-10.为所有私有方法提供一个'@pre'约定/ Provide an '@pre' contract for all package-private methods [DBC.PKGMPRE-4]3-11.为所有"private"类提供一个'@pre'约定/ Provide an '@invariant' contract for all "private" classes [DBC.PRIC-5]3-12.为所有"private"方法提供一个'@post'约定/ Provide an '@post' contract for all "private" methods [DBC.PRIMPOST-5]3-13.为所有"private"方法提供一个'@pre'约定Provide an '@pre' contract for all "private" methods [DBC.PRIMPRE-5]4. Enterprise JavaBeans [EJB]4-1.声明bean类为"public"/ Declare bean classes "public" [EJB.CDP-1]4-2.不要以"abstract"声明bean类/ Do not declare bean classes as "abstract" [DA-1]4-3.不要以"final"声明bean类/ Do not declare bean classes as "final" [DF-1]4-4.声明'ejbCreate()'方法为"public",但即不能为"static"也不能为"final"/ Declare 'ejbCreate()' methods "public", but neither "static" nor "final" [EJB.CRTE-1]4-5.声明finder方法为"public",不过即不能为"static"也不能为"final"/ Declare finder methods "public" and neither "final" nor "static" [EJB.FNDM-1]4-6.在一个bean类中实现一个或多个'ejbCreate ()'方法/ Implement one or more 'ejbCreate ()' methods in bean classes [EJB.IECM-1]4-7.在一个实体bean类中实现一个或多个'ejbPostCreate()'方法/ Implement one or more 'ejbPostCreate()' methods in EntityBean classes [EJB.IEPM-1]4-8.在所有消息驱动bean类中实现'ejbCreate()'方法/ Implement the 'ejbCreate()' method for all Message-driven bean classes [EJB.MDBC-1]4-9.在实体bean类中为每个'ejbCreate'方法定义一个匹配的'ejbPostCreate()'方法/ Define a matching 'ejbPostCreate()' method for each 'ejbCreate' method in entity bean classes [EJB.MEC-1]4-10.在bean类中不要定义'finalize ()'方法/ Do not define 'finalize ()' method in bean classes [EJB.MNDF-1]4-11.为远程interface和远程home interface的方法抛出'java.rmi.RemoteException'/ Throw 'java.rmi.RemoteException' in the methods of remote interface and remote home interface [EJB.MRE-1]4-12.避免在消息驱动Bean的'ejbCreate()'方法有自变量/ Avoid arguments in MessageDrivenBeans' 'ejbCreate()' method [EJB.NAC-1]4-13.传入无参数则声明一个"public"构造器/ Declare a "public" constructor that takes no parameters [EJB.NFDC-1]4-14.声明'ejbPostCreate()'为"public",不过即不能为"static"也不能为"final"/ Declare 'ejbPostCreate()' "public" and neither "static" nor "final" [EJB.PCRTE-1]4-15.在一个bean的局部interface和局部home interface中不要抛出'java.rmi.RemoteException'/ Do not throw 'java.rmi.RemoteException' in a bean's local interface and local home interface [EJB.RILH-1]4-16.构造finder方法返回类型为primary key或一个primary key集合/ Make finder methods' return type the primary key or a collection of primary keys [EJB.RT-1]4-17.为SessionBeans或MessageDrivenBeans的'ejbCreate()'方法构造返回类型"void"/ Make the return type "void" for SessionBeans or MessageDrivenBeans' 'ejbCreate()' methods [EJB.RTC-1]4-18.为'ejbPostCreate()'方法构造返回类型"void"/ Make the return type "void" for the 'ejbPostCreate()' method [EJB.RTP-1]4-19.在Home interface中为EJB remote, home interfaces和bean类和确保包括所有business方法和'create'与'finder'方法的EJB bean遵循格式化名/ Follow the name format for EJB remote, home interfaces, and bean classes and ensure EJB bean contains all the business methods and 'create' and 'finder' methods in the Home interface [EJB.STD-1]4-20.远程home或局部home interfaces在创建方法时抛出'javax.ejb.CreateException'/ Throw 'javax.ejb.CreateException' in create methods of remote home or local home interfaces [EJB.TCE-1]4-21.远程home或局部home interfaces在finder方法时抛出'javax.ejb.FinderException'/ Throw 'javax.ejb.FinderException' in finder methods of remote home or local home interfaces [EJB.TFE-1]4-22.自变量避免通过"this"引用/ Avoid passing the "this" reference as an argument [EJB.THISARG-1]4-23.不要返回"this"/ Do not return "this" [EJB.THISRET-1]4-24.不要访问或修改安全配置对象/ Do not access or modify security configuration objects [EJB.AMSC-2]4-25.在'ejbLoad()'中不要调用finder方法/ Do not call finder methods in the 'ejbLoad()' [EJB.EJBLOAD-2]4-26.在一个Bean中避免加载原生库/ Avoid loading native libraries in a Bean class [EJB.LNL-2]4-27.在EJB组件"final"时声明所有"static"字段/ Declare all "static" fields in the EJB component "final" [EJB.NFS-2]4-28.重新利用EJB homes/ Reuse EJB homes [EJB.RUH-2]4-29.在任何地方避免开始,停止或管理线程/ Avoid starting, stopping, or managing threads in any way [EJB.THREAD-2]4-30.使用Session外观去控制访问实体beans/ Use a Session Facade to manage access to entity beans [F-2]4-31.在EJB类中不要使用Servlet代码/ Do not use Servlet code in EJB classes [EJB.ABCS-3]4-32.在java swing或ervlet类中不要使用EJB代码/ Do not use EJB code in java swing or servlet classes [EJB.ADCB-3]4-33.避免过多的inter-entity bean通讯/ Avoid excessive inter-entity bean communication [EJB.AIEBC-3]4-34.在EJB类内不要使用JDBC代码/ Do not use JDBC code inside of EJB classes [EJB.AJDBC-3]4-35.在session beans和entity beans间避免一对一的映射/ Avoid one-to-one mapping between session beans and entity beans [EJB.AOTO-3]4-36.可再利用的高速缓存JNDI资源将减少使用高代价的运算/ Cache reusable JNDI resources to minimize the use of expensive operations [EJB.UCIC-3]4-37.fine-grained对象不要使用Entity Beans/ Do not use Entity Beans as fine-grained objects [EJB.ABFG-4]4-38.使用有价值对象减少对服务器的调用/ Use value Objects to reduce the granularity of calls to the server [EJB.UVO-4]5. Exceptions [EXCEPT]5-1.所有字段中用户定义的'Exception'声明为"final"/ Declare all fields of user-defined 'Exception' as "final" [EXCEPT.IMMEX-3]5-2.不要捕获'ng.Error'对象/ Do not catch the 'ng.Error' object [EXCEPT.NCERR-3]5-3.不要捕获'NullPointerException'/ Do not catch 'NullPointerException' [EXCEPT.NCNPE-3]5-4.不要抛出'ng.Error'对象/ Do not throw the 'ng.Error' object [EXCEPT.NTERR-3]5-5.在控制流的语句中不要滥用异常/ Do not abuse exceptions as flow control statements [EXCEPT.AEFC-4] 5-6.不要抛出'NullPointerException'/ Do not throw 'NullPointerException' [EXCEPT.NTNPE-5]6. Formatting [FORMA T]6-1.每行书写一个语句/ Write one statement per line [FORMAT.OSPL-1]6-2.强制在主要的模块间执行数个空行/ Enforce number of blank line(s) between major sections [FORMA T.U2BL-1]6-3.强制缩进执行数个空格/ Enforce number of space(s) for indentation [FORMAT.IND-2]6-4.限制每行的最大长度/ Limit the maximum length of a line [FORMAT.LL-2]6-5.每个源文件提供一个正确的文件标题/ Provide a correct file header comment for each source file [FORMA T.MCH-2]6-6.条件表达式采用首选格式化/ Use the preferred formatting for conditional expressions [FORMA T.TE-2]6-7.使用'()'分隔复杂的表达式/ Use '()' to separate complex expressions [FORMAT.APAREN-3]6-8.在独有的行放置大括号/ Place a closing brace on its own line [FORMA T.CBRACE-3]6-9.类型分配后放置一个单独的空格符号或否/ Place a single space character or no space character after type casting [FORMA T.CMS-3]6-10.用空格代替'Tabs'/ Use spaces instead of 'Tabs' [FORMAT.DUT-3]6-11.以'[]'括号声明arrays在队列类型后和变量名前/ Declare arrays with '[]' brackets after the array type and before the variable name(s) [FORMAT.IAD-3]6-12.在一个方法名和打开的"("圆括号间放置一个单独的空格字符或否/ Place a single space character or no space character between a method name and the opening "(" parenthesis [FORMAT.MSP-3]6-13.不要在'{'打开括号相同的行放置语句/ Do not place statements on the same line as the '{' opening brace [FORMA T.NSAB-3]6-14.强制在所有逗号后执行数个空格字符/ Enforce number of space character(s) after every comma [FORMA T.SAC-3]6-15.强制在赋值算法每一边执行数个空格字符/ Enforce number of space character(s) on each side of an assignment operator [FORMAT.SAOP-3]6-16.强制在条件运算的打开圆括号"("后执行数个空格字符/ Enforce number of space character(s) after the opening parenthesis "(" of a conditional statement [FORMA T.SAP-3]6-17.强制在所有分号后执行数个空格字符/ Enforce number of space character(s) after every semicolon [FORMA T.SAS-3]6-18.强制在一个前缀一元操作和操他的作数间执行数个空格字符/ Enforce number of space character(s)between a prefixed unary operator and its operand [FORMA T.SAUOP-3]6-19.强制在位运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a bitwise operator [FORMA T.SBOP-3]6-20.强制在一个后缀一元操作和操他的作数间执行数个空格字符/Enforce number of space character(s) between a postfixed unary operator and its operand [FORMAT.SBUOP-3]6-21.强制在条件算法"?"前和后执行数个空格字符/ Enforce number of space character(s) before and after the "?" conditional operator [FORMA T.SCOP-3]6-22.强制在逻辑运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a logical operator [FORMA T.SLOP-3]6-23.强制在关系运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a relational operator [FORMA T.SROP-3]6-24.避免不必要的圆括号/ Avoid unnecessary parentheses [FORMAT.UP-3]6-25.强制在类型声明前执行数个空行/ Enforce number of blank line(s) before type declarations [FORMA T.BLCD-4]6-26.强制执行数个空行去分隔不同的"imports"包/ Enforce number of blank line(s) to separate "imports" from different packages [FORMAT.BLSIM-4]6-27.强制执行'{'大括号的位置/ Enforce the position of '{' brace [FORMAT.FCB-4]6-28.放置跟第一个类型有相同文件名的类型/ Place the type that has the same name as the file as the first type [FORMA T.FCN-4]6-29.强制定制注释和修改人/ Enforce the order of annotations and modifiers [FORMA T.MO-4]6-30.确信所有文件终止于换行字符/ Make sure all files are terminated with a newline character [FORMA T.TNL-4]6-31.不要在行末放置空个空格区字段/ Do not place empty whitespace at the end of a line [FORMAT.ATS-5]6-32.避免使用拖长的注释/ Avoid using trailing comments [FORMAT.TC-5]6-33.避免或强制在array初始化时使用拖长的逗号/ Avoid or enforce the use of trailing commas in array initializers [FORMA T.TCOMMA-5]7. Garbage Collection [GC]7-1.从'finalize ()'来调用'super.finalize ()'/ Call 'super.finalize ()' from 'finalize ()' [GC.FCF-1]7-2.不要使用'finalize ()'方法去注销监听?/ Do not use 'finalize ()' methods to unregister listeners [GC.FM-1]7-3.不要直接调用'finalize ()'/ Do not call 'finalize ()' explicitly [GC.NCF-1]7-4.当转换原始类型为String时不要使用不必要的临时变量/ Do not use unnecessary temporaries when converting primitive types to String [GC.AUTP-2]7-5.在'finalize()'方法的"finally"模块中调用'super.finalize()'/ Call 'super.finalize()' in the "finally" block of 'finalize()' methods [GC.IFF-2]7-6.调用'reset ()'时在ObjectOutputStreams预防潜在的内存泄漏/ Prevent potential memory leaks in ObjectOutputStreams by calling 'reset ()' [GC.OSTM-2]7-7.避免使用'long[]'来替代'Date[]'/ Avoid using 'Date[]', use 'long[]' instead [GC.DUD-3]7-8.不要直接调用'System.gc()'或'Runtime.gc()'/ Do not explicitly call 'System.gc()' or 'Runtime.gc()' [GC.GC-3] 7-9.避免使用"static"的collections 或maps;他们能超过范围的增长/ Avoid "static" collections or maps; they can grow without bounds [GC.STV-3]7-10.重新调用'getClipBounds()'/ Reuse calls to 'getClipBounds()' [GC.GCB-5]8. Global Static Analysis [GLOBAL]8-1.尽可能声明package-private类型难以访问/ Declare package-private types as inaccessible as possible [GLOBAL.DPAC-1]8-2.尽可能声明package-private域难以访问/ Declare package-private fields as inaccessible as possible [GLOBAL.DPAF-1]8-3.尽可能声明package-private方法难以访问/Declare package-private methods as inaccessible as possible [GLOBAL.DPAM-1]8-4.避免全局使用package-private类型/ Avoid globally unused package-private types [GLOBAL.UPAC-1]8-5.避免全局使用package-private域/ Avoid globally unused package-private fields [GLOBAL.UPAF-1]8-6.避免全局使用package-private方法/注释成分类型/ Avoid globally unused package-private methods/annotation member types [GLOBAL.UPAM-1]8-7.避免使用"throws"语句/ Avoid unused "throws" clauses [GLOBAL.AUT-2]8-8.如果一个package-private的"class/interface"没有子集则把他声明为"final"/ Declare a package-private "class/interface" "final" if it is not subclassed [GLOBAL.SPAC-2]8-9.如果一个package-private的方法没有没有被覆写则把他声明为"final"/ Declare a package-private method "final" if it is not overridden [GLOBAL.SPAM-2]8-10.在有效类中应保证正确的构造器声明/ Ensure correct constructor declarations in utility classes [GLOBAL.UCC-2]8-11.如果方法不使用实例化类成员则使他们为"static"/ Make methods "static" if they do not use instance class members [GLOBAL.ASI-3]8-12.声明"public/protected"类型尽可能无法访问/ Declare "public/protected" types as inaccessible as possible [GLOBAL.DPPC-4]8-13.声明"public/protected"字段尽可能无法访问/Declare "public/protected" fields as inaccessible as possible [GLOBAL.DPPF-4]8-14.声明"public/protected"方法尽可能无法访问/Declare "public/protected" methods as inaccessible as possible [GLOBAL.DPPM-4]8-15.避免全局从未使用"public/protected"类型Avoid globally unused "public/protected" types [GLOBAL.UPPC-4]8-16.避免全局从未使用"public/protected"字段/ Avoid globally unused "public/protected" fields [GLOBAL.UPPF-4]8-17.避免全局从未使用"public/protected" 方法和注释成员类型/ Avoid globally unused "public/protected" methods/annotation member types [GLOBAL.UPPM-4]8-18.声明一个"public/protected" "class/interface"没有子集则声明为"final"/ Declare a "public/protected" "class/interface" "final" if it is not subclassed [GLOBAL.SPPC-5]8-19.如果一个"public/protected"方法没有被覆写则声明为"final"/ Declare a "public/protected" method "final" if it is not overridden [GLOBAL.SPPM-5]9. Initialization [INIT]9-1.在初始化期间不要使用非final "static"字段/ Do not use non-final "static" fields during the initialization [INIT.NFS-2]9-2.使用外部初始化/不要用默认值对"static"字段初始化/ Use explicit initializations/Do not initialize "static" fields to default values [INIT.SF-2]9-3.避免在构造器执行前或执行期间对该字段进行非初始化的读取/ Avoid uninitialized reads of fields before or during constructor execution [INIT.UIRC-2]9-4.明确的在声明语句中初始化所有局部变量/ Initialize all local variables explicitly at the declarationstatement [INIT.LV-3]9-5.不要同非"final" "static"变量一起初始化"static" "final"变量/ Do not initialize "static" "final" variables with non "final" "static" variables [INIT.SFA-3]9-6.在所有"static final"字段被赋值前不要使用"static"初始化方式创建一个当前类的实例/ Do not use a "static" initializer that creates an instance of the current class before all "static final" fields are assigned [INIT.SICUI-3]9-7.在构造器中明确的初始化所有字段/ Explicitly initialize all fields in a constructor [INIT.CSI-4]9-8.不要对字段进行环状的初始化方式/ Do not use initialization circularities for fields [INIT.IC-4]10. Internationalization [INTER]10-1.当调用'String'转换方法时提供'Locale'自变量/ Provide 'Locale' argument when invoking 'String' conversion methods [L-3]10-2.在国际化环境中隔离可翻译的文本资源包/ Isolate translatable text in resource bundles in an Internationalized environment [INTER.ITT-3]10-3.当实例化'SimpleDateFormat'对象时提供'Locale'自变量/ Provide 'Locale' argument when instantiating 'SimpleDateFormat' objects [INTER.SDFL-3]10-4.在国际化环境中不要使用单一的逻辑操作字符/ Do not use single characters with logic operators in an Internationalized environment [INTER.CLO-4]10-5.在国际化环境中不要使用String串/ Do not use String concatenation in an Internationalized environment [INTER.COS-4]10-6.在国际化环境中对日期变量不要调用'toString ()'/ Do not call 'toString ()' on Date variables in an Internationalized environment [INTER.DTS-4]10-7.在国际化环境中对常量使用单一字面意义的字符/ Use single character literals in constants in an Internationalized environment [INTER.NCL-4]10-8.在国际化环境中对数字量不要调用'toString ()'/ Do not call 'toString ()' on numeric variables in an Internationalized environment [INTER.NTS-4]10-9.在国际化环境中不要调用'pareTo ()'/ Do not call 'pareTo ()' in an Internationalized environment [INTER.SCT-4]10-10.在国际化环境中不要调用'String.equals ()'/ Do not call 'String.equals ()' in an Internationalized environment [INTER.SE-4]10-11.在国际化环境中不要使用'StringTokenizer'/ Do not use 'StringTokenizer' in an Internationalized environment [INTER.ST-4]10-12.在国际化环境中不要调用'Time.toString ()'/ Do not call 'Time.toString ()' in an Internationalized environment [INTER.TTS-4]11. Java 2 Micro Edition [J2ME](微型平台暂时不翻译)Do not use anonymous classes as interface implementors [J2ME.ACII-1]Do not use an array length in a loop condition expression [J2ME.ARLL-1]Avoid constant initializations of primitive arrays that exceed a certain size [J2ME.CIPA-1]Avoid classes that are subclassed only once and are not publicly used [J2ME.CSOO-1]Do not access a field excessively [J2ME.EAOF-1]Ensure methods use return parameters instead of returning new objects [J2ME.EURP-1]Catch 'OutOfMemoryError' for large array allocations [J2ME.OOME-1]12. Javadoc Comments [JA VADOC]12-1.避免不使用Javadoc标记/ Avoid unused Javadoc tags [JA V ADOC.DPMT-1]12-2.在方法的Javadoc注释中使用'@return' Javadoc标记/ Use the '@return' Javadoc tag in method Javadoc comments [JA V ADOC.MRDC-1]12-3.对方法的每个参数使用'@param' Javadoc标记/ Use the '@param' Javadoc tag for each parameter of methods [JA V ADOC.PARAM-1]12-4.为类型提供Javadoc注释和描述/ Provide Javadoc comments and descriptions for types [JA V ADOC.PJDC-1]12-5.为字段提供Javadoc注释和描述/ Provide Javadoc comments and descriptions for fields [JA V ADOC.PJDF-1]12-6.为方法提供Javadoc注释和描述/Provide Javadoc comments and descriptions for methods [JA V ADOC.PJDM-1]12-7.在"synchronized"的方法和块中使用'@concurrency' Javadoc标记/ Use the '@concurrency' Javadoc tag on "synchronized" methods and blocks [JA VADOC.SMJT-1]12-8.在方法中使用'@throws'或'@exception' Javadoc标记/ Use the '@throws' or '@exception' Javadoc tag in methods [JA V ADOC.THROW-1]12-9.在"void"方法中避免使用'@return' Javadoc标记/ Avoid using the '@return' Javadoc tag on "void" methods [JA V ADOC.VMCR-1]12-10.在Javadoc注释的声明中使用'@author' Javadoc标记/ Use the '@author' Javadoc tag in declaration Javadoc comments [JA VADOC.MAJDT-3]12-11.在Javadoc注释的类型中使用'@version'标记/ Use the '@version' tag in type Javadoc comments [JA V ADOC.MVJDT-3]12-12.适当的定义Javadoc标记/ Order Javadoc tags appropriately [JA V ADOC.ORDER-3]12-13.为'toString ()'方法提供Javadoc注释/ Provide Javadoc comment for 'toString ()' method [JA V ADOC.TSMJT-3]12-14.避免没有在Javadoc注释中使用过的不支持的'@'标记和其他标记/ Avoid unsupported '@' tags and other tags that should not be used in Javadoc comments [JA V ADOC.BT-4]12-15.不要在Javadoc注释和描述中插入非Javadoc注释/ Do not insert non-Javadoc comments between Javadoc comments and declarations [JA V ADOC.JNJD-5]12-16.强制控制使用Javadoc注释的行数/ Enforce restraint on number of lines used for Javadoc comments [JA V ADOC.SINGLE-5]13. Java Database Connectivity [JDBC]13-1.在"finally"块中关闭JDBC连接/ Close JDBC connections in "finally" blocks [JDBC.CDBC-1]13-2.为JDBC连接重新使用数据源/ Reuse data sources for JDBC connections [JDBC.DSLV-2]13-3.在"finally"块中关闭JDBC资源/ Close JDBC resources in "finally" blocks [JDBC.RRWD-2]13-4.使用javax.sql.DataSource去获取数据库连接/ Use javax.sql.DataSource to get the database connection [JDBC.UDS-4]14. JavaServer Pages [JSP]14-1.不要有超过一个的同样名字的字段/ Do not have more than one field with the same name [JSP.DUPF-1] 14-2.不要有超过一个的同样名字的局部变量/Do not have more than one local variable with the same name [JSP.DUPLV-1]。

Java编程规范

Java编程规范

Java编程规范Java编程规范是一种约定俗称的规范,旨在使Java代码易于理解、维护和调试。

它使得多人合作开发更加容易,可以避免一些常见的错误和问题。

以下是一些常见的Java编程规范:1.类命名和包命名:类名使用驼峰式命名,包名使用小写字母。

类名和包名应该是有意义的,具有描述性。

2.变量命名:变量名使用驼峰式命名,尽量使用有意义的名字,避免使用单个字符作为变量名。

3.常量命名:常量名使用大写字母和下划线命名,使用final修饰。

4.缩进:使用4个空格进行缩进,不要使用制表符。

5.行长度:每行代码应该尽量控制在80个字符以内,可以在需要的地方使用换行符(\)。

6.注释:代码应该有足够的注释,包括类、方法和变量的注释。

注释应该清晰、简洁,并且易于理解。

7.引入包:只引入需要使用的包,避免通配符导入。

8.类成员的声明顺序:类成员的声明顺序应该按照以下顺序:公有静态常量、私有静态常量、私有静态变量、私有常量、私有变量、构造函数、公有方法、私有方法。

9.异常处理:避免使用异常捕获的通配符,应该只捕获需要处理的异常。

10.不要使用魔法数字:避免在代码中使用未经解释的魔法数字,应该使用常量或者枚举类型来代替。

11.使用自定义异常:当需要抛出异常时,应该使用自定义的异常类型,而不是Java提供的通用异常类型。

12.避免使用过时的API:使用最新的API,避免使用已经过时的API。

13.使用适当的命名规范:方法名应该以动词开头,变量名应该以名词或者名词短语开头。

14.避免使用嵌套过深的代码:控制代码的嵌套层次,避免代码过于复杂。

15.避免代码重复:尽量将重复的代码提取为方法或者函数,以提高代码的复用性和可维护性。

这些编程规范只是一些常见的规范,具体的规范可以根据个人或者团队的需求自行调整和约定。

遵循Java编程规范可以提高代码的质量和可读性,促进团队合作和开发效率。

JAVA编程规范v1.00

JAVA编程规范v1.00

JAVA编程规范实施日期页码/页数第1页共21页文件修改控制页修改记录编号修改内容修改人修改日期[附加说明]1.“修改记录编号”的填写内容为:本次修改后的版本号+“/”+流水号,例如:V1.01/1。

2.一次修改可以修改文档的多个位置,流水号为对该版本修改的流水号。

当版本变时,流水号归为1。

JAVA编程规范实施日期页码/页数第2页共21页目录文件修改控制页1 1命名规范41.1package(*)41.2class(*)41.3interface(*)41.4Class成员属性及变量的命名(*)41.5常量的命名(*)41.6数组的命名(*)41.7方法的参数(*)51.8方法命名(*)51.9一般命名注意事项5 2Java源文件样式52.1Class代码布局:52.2版权声明62.3Package/Imports(*)62.4Javadoc注释72.5Class Fields72.6存取方法(getter,setter)72.7构造方法(*)72.8克隆方法82.9类方法82.10toString方法92.11main方法(*)9 3代码编写风格93.1语句93.1.1简单语句93.1.2复合语句93.1.3返回语句103.2位置控制103.2.1缩进103.2.2行的长度103.2.3折叠的行103.3空白处理113.3.1空行113.3.2空格113.4声明123.4.1每行一个123.4.2初始化123.4.3位置12JAVA编程规范实施日期页码/页数第3页共21页4程序编写规范134.1使用方法来访问实例变量和类变量(*)134.2引用类变量和类方法(*)134.3常量(*)134.4?前的逻辑运算表达式134.5变量赋值134.6特殊注释144.7例外144.8方法的输入参数144.9方法的返回值14 5Struts编码规范145.1Action和ActionForm的class命名145.2ActionForm变量命名145.3Action内部结构155.4在ActionForm和数据对象之间复制数据155.5Struts标记库的使用16 6注释166.1注释格式166.1.1javadoc风格的注释166.1.2程序内部说明性注释166.2注释内容176.2.1类或接口的注释176.2.2类方法的注释186.2.3类变量的注释186.2.4类常量的注释18 7编程实践问题187.1exit()187.2垃圾收集197.3final类197.4性能197.5使用StringBuffer对象197.6换行20 8附录:20JAVA编程规范实施日期页码/页数第4页共21页1命名规范1.1package(*)包名全部由小写的ASCII字母组成,用“.”分隔。

Java测试规范

Java测试规范

Java编码规范1 javadoc 检查 (2)1.1 public方法必须注释 (2)1.2类注释中必须有作者信息 (2)1.3 public 类变量或者实例变量必须注释 (3)2 命名检查 (3)2.1 常量命名 (3)2.2 包名 (3)2.3 类名 (3)2.4 临时变量 (3)2.5 成员变量 (3)2.6 方法名 (3)2.7 参数名称 (3)2.8 静态变量名称 (3)3 导入检查 (3)3.1 不使用批量导入 (3)3.2 不允许导入sun.* (3)3.3 不存在未使用的导入 (3)3.4 不存在没有必要的导入 (4)4 约束检查 (4)4.1 单个文件不超过2000行 (4)4.2 每行不超过120字符 (4)4.3 方法不超过200行 (4)4.4 方法参数不超过7个 (4)5 修饰符检查 (4)5.1 顺序检查 (4)5.2 不存在累赘的修饰符号 (4)6 语句块检查 (4)6.1 不使用嵌套语句块 (4)6.2 不使用空语句块 (4)6.3 For循环必须使用{} (4)7 代码问题检查 (5)7.1 不允许空语句 (5)7.2 重写equals要重写hashCode (5)7.3 临时变量不能和成员变量或者类变量同名 (5)7.4 非法实例化 (5)7.5 不能函数调用内部赋值 (5)7.6 数字不能硬编码-1,0,1,2,3,4,8,16,24,1000 除外 (5)7.7 代码问题检查 (5)7.8 switch语句必须有default语句 (5)7.9 重复的throws声明 (5)7.10 boolean类型直接赋值,不用if,else (5)7.11 字符串不能直接用==比较,要使用equals方法 (5)7.12 直接返回boolean值,不用if,else (5)7.13 if语句不能嵌套超过3层 (5)7.14 try 语句不能嵌套超过3层 (5)8 设计问题检查 (6)8.1 只有static final 修饰的变量才能为public (6)8.2 如果不是static,就是实例变量,实例变量不允许设置为public。

jtest评分标准

jtest评分标准

jtest评分标准Jtest是一种基于Java的软件测试评分标准,由Mantra集团在2003年发布,旨在为测试人员提供一个可靠、可衡量的评估标准,以便从软件测试过程中提取有价值的信息。

Jtest定义了一系列可以用来评估软件测试的关键因素,可以帮助开发人员理解他们所编写的代码的质量,直接影响软件的安全性、可靠性和性能。

根据Jtest的衡量标准,软件测试可以更加客观地评估和识别潜在的隐患。

Jtest并不是固定的,它可以根据客户使用的软件和技术环境以及测试人员的经验水平等情况来定制,以满足不同的软件测试需求。

1、编码规范编码规范是测试衡量标准中最重要的指标之一,它要求开发人员遵守国际编码标准,以确保编写的程序的可读性、可维护性和可靠性。

2、软件质量软件质量是指软件的功能、可靠性和性能,这些各项指标都是软件和系统安全性及可靠性所决定的重要因素。

Jtest根据开发人员所编写的代码以及测试过程中产生的质量数据确定软件质量的评估。

3、安全性安全性是指软件的处理安全检查的能力,是指软件系统的能力来防止未经授权的访问、修改或分析系统,有效防止计算机网络安全漏洞的产生。

Jtest的评估模型可以帮助开发人员确保软件是安全的。

4、可靠性可靠性是指软件或系统的能力来准确执行指定任务,而无需人为干预,也就是说,应用程序在一定时期内可以可靠地完成指派的任务,衡量这一点可以采用Jtest的方法,以确保程序的可靠性。

5、性能性能是指软件和系统在处理特定任务时,其所花费的时间,它涉及到系统运行效率的问题,Jtest可以帮助开发人员衡量并确保软件的性能良好。

Jtest评分标准不仅可以帮助开发人员及时识别程序错误,还可以更加客观地反映软件质量,这样有利于企业实现高效的软件开发过程,以便提高软件的安全性和可靠性,并有效提高公司的盈利能力。

虽然Jtest评分标准是一种衡量软件质量的有效工具,但是,即使是最完善的评分标准也无法完全替代开发人员和测试人员的专业技术水平。

Java语言编程规范参考

Java语言编程规范参考

JAVA编程规范业务与软件产品线编辑V1.0前言Java语言编程规范是新员工进公司后必须掌握的技术基本知识,共分五部分:1、排版规范,2、注释规范,3、命名规范,4、编码规范,5、JTEST规范。

目录JAVA编程规范 (1)前言 (2)第一章JAVA语言编程规范总则 (4)第二章排版规范 (4)2.1规则 (4)2.2建议 (8)第三章注释规范 (8)3.1规则 (9)3.2 建议 (16)第四章命名规范 (18)4.1 规则 (18)4.2 建议 (20)第五章编码规范 (21)1.1 规则 (21)5.2建议 (26)第六章JTEST规范 (28)6.1 规则(1-2 级) (28)6.2 建议(3级或以上) (29)第一章 JAVA语言编程规范总则为了提高源程序的质量和可维护性,最终提高公司软件产品生产力,我们有必要对公司软件产品的源程序的编写风格作出统一的规范约束。

本规范总则是基于Java语言的编程规则的总的原则,针对不同应用环境的编程规范在遵守本规范总则的基础上,还必须遵守相应开发环境的编程规范。

本规范适用于使用Java语言编程的部门和产品。

本规范总则的内容包括:排版规范,注释规范,命名规范,编码规范,JTEST规范等。

本规范总则的示例采用以下的术语描述:★规则:编程时强制必须遵守的原则。

★建议:编程时必须加以考虑的原则.★格式:对此规范格式的说明。

★说明:对此规则或建议进行必要的解释。

★示例:对此规则或建议从正、反两个方面给出例子。

第二章排版规范2.1规则1. *程序块要采用缩进风格编写,缩进的空格数为4个。

说明:对于由开发工具自动生成的代码可以有不一致。

2. *分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。

在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:如下例子不符合规范。

java 单元测试编写标准

java 单元测试编写标准

编写Java 单元测试时,通常遵循以下标准和最佳实践:1. 使用单元测试框架:Java 中常用的单元测试框架包括JUnit 和TestNG。

选择其中一个框架,按照其规范和约定进行单元测试的编写。

2. 测试类命名规范:测试类的命名应该与被测试的类相对应,并在类名后面加上"Test"。

例如,如果要测试名为"MyClass" 的类,测试类的命名应为"MyClassTest"。

3. 测试方法命名规范:测试方法的命名应该清晰地描述被测试方法的功能和预期行为。

通常使用"test" 作为方法名的前缀,后面跟着描述性的名称。

例如,"testAddition()"、"testEmptyList()" 等。

4. 使用断言(assert):在测试方法中使用断言来验证被测试方法的行为是否符合预期。

JUnit 和TestNG 提供了各种断言方法,例如assertEquals、assertTrue、assertNotNull 等。

5. 使用注解标记测试方法:在测试方法上使用适当的注解来标记测试方法,例如@Test。

这样测试框架才能识别并执行这些方法。

6. 准备测试数据:在编写测试方法时,需要准备好合适的测试数据,包括输入参数、预期输出等。

确保测试数据覆盖了多种情况,包括正常情况、边界情况和异常情况。

7. 使用测试替身(Mock、Stub):对于需要依赖其他组件的测试,可以使用测试替身来模拟这些依赖组件的行为,以便更好地隔离被测试组件。

8. 编写清晰的测试文档:在测试类和测试方法中添加清晰的注释和文档,描述测试的目的、测试数据的准备、预期的结果等信息,以便其他开发人员理解测试的意图。

9. 运行和维护测试:在编写测试之后,确保定期运行测试套件,并及时修复测试中发现的问题。

测试代码也需要和生产代码一样进行版本控制和维护。

跟我学Java代码规范检测CheckStyle工具——如何应用CheckStyle工具检查Java代码的规范程度

跟我学Java代码规范检测CheckStyle工具——如何应用CheckStyle工具检查Java代码的规范程度

1.1跟我学Java代码规范检测CheckStyle工具——如何应用CheckStyle 工具检查Java代码的规范程度1.1.1用CheckStyle检查Java代码的规范程度1、CheckStyle是一个开源的度量代码规范性程度的检测工具(1)CheckStyle是SourceForge下的一个项目在网站中提供有下载CheckStyle的系统包文件的链接,开发人员可以在CheckStyle的官方网站/中下载其系统包文件,CheckStyle主要功能请见下图所示的介绍CheckStyle功能信息显示的页面。

(2)CheckStyle工具的主要功能特性应用CheckStyle代码规范性度量检测工具能够帮助开发人员检查在代码编程时是否遵循了某种代码编程规范——这包括代码风格、代码结构、代码冗余和典型错误等方面的检测,从而确保项目团队中各个成员的程序代码具有一致的编码规范和风格。

在如下的官方网页/checks.html中显示出对CheckStyle工具的主要功能特性的介绍信息及标准的检查项目:(3)CheckStyle工具能够自动化代码规范检查过程由于CheckStyle工具可以自动地执行,从而使得开发人员从这项重要,但却是枯燥的任务中解脱出来。

Checkstyle工具除了支持Sun公司所制定的Java标准的编码规范外,也还允许开发人员自定义编码规范以满足项目组的特殊要求,这主要是通过编写有关的配置文件来实现。

当然,Checkstyle代码规范程度度量的检测工具不仅可以检查项目中的代码是否遵循了某种编码规范,也还可以检查出项目中的代码在设计方面的错误,比如重复的代码等。

2、下载开源的CheckStyle系统包文件在CheckStyle的官方网站https:///projects/checkstyle/files/checkstyle/中找到其系统包程序文件下载的页面,开发人员可以直接下载其系统包文件,请见下图所示的CheckStyle系统包程序下载链接的页面示图。

JTest检查的Java编程规范

JTest检查的Java编程规范

JTest检查的Java编程规范目录1.前言 (3)2.JTest检查的编程规范 (3)2.1.编码规则 (3)2.2.按合约设计规则 (5)2.3.EJB规则 (5)2.4.代码格式规则 (6)2.5.垃圾回收规则 (7)2.6.全局静态分析规则 (8)2.7.初始化规则 (8)2.8.国际化规则 (8)2.9.Javadoc注释规则 (8)2.10.JUnit测试用例规则 (10)2.11.类的统计信息 (10)2.12.其它规则 (10)2.13.命名规范 (11)2.14.面向对象编程规则 (12)2.15.优化规则 (13)2.16.预防BUG规则 (14)2.17.工程项目统计 (15)2.18.兼容性规则 (15)2.19.安全性规则 (15)2.20.Servlet规则 (16)2.21.线程及同步规则 (16)2.22.不使用的代码规则 (17)1.前言JTest可以对Java代码进行静态和动态分析,可以规范化统一编程规定和帮助开发人员预防潜在的编程错误。

本文详细描述了JTest中采用的编程格式。

2.JTest检查的编程规范JTest中共有518条规定,结合实际情况,选取了其中的199条。

已经将适合的规则导出到文件中,开发人员只需将规则导入到JTest中即可。

2.1.规则导出文件《JTest代码审查规定.property》2.2.如何导入到JTest中在JTest主菜单中,选择“Jtest”>“Jtest Configurations”,弹出JTest的“TEST Configurations”设置对话框,在左端的面板中选择“User-Defined”,点击鼠标右键的“Import”菜单导入上述的property文件即可。

以下的编程规则来源于JTest检查规范,对于其中的适合部分进行了说明。

【说明】对于每条规则的利弊,请参见JTest联机帮助。

2.3.编码规则∙CODSTA.ACDO-1避免在字符串常量前使用“new”操作符;∙CODSTA.ASI-3不用!对于任何没有使用非静态变量类成员变量的方法使用“static”修饰符;∙CODSTA.AUVT-3不用!对于“List”和“Set”的接口实现的类型使用“List”和“Set”声明;∙CODSTA.CLONE-2对于Cloneable类声明“clone()throws CloneNotSupportedException“;∙CODSTA.CLS-4在比较是否相等时,将常量放在左边;∙CODSTA.CRS-4不用!在比较是否相等时,将常量放在右边;∙CODSTA.DCI-5不用!在interface中定义常量;∙CODSTA.DCTOR-3不用!在任何可能的情况下,都定义一个缺省的构造函数;∙CODSTA.DUN-5不用!在一个方法中,避免使用3个以上的“!”操作符;∙CODSTA.IMPT-4不用!不允许使用通配符“*”import类;∙CODSTA.IMPT2-4不用!使用通配符import类;∙CODSTA.ISACF-5可以考虑;避免在接口中定义常量;∙CODSTA.LONG-2使用“L”修饰符而不是“l”来表示“long”整数;∙CODSTA.MVOS-3避免在一个语句中声明多个变量;∙CODSTA.NCAC-2避免在“abstract”类的构造函数中调用其“abstract”方法;∙CODSTA.NCE-4在“catch”语句中避免使用“Exception”、“RuntimeException”和“Throwable”;∙CODSTA.NEA-1避免嵌套赋值;∙CODSTA.NTX-3避免抛出抛出“Exception”,而应该总是抛出“Exception”的子类;∙CODSTA.OGM-3不用!按照方法的名称顺序定义方法;∙CODSTA.OTOSM-3不用!总是重载“toString()”方法;∙CODSTA.OVERLOAD-4不用!避免重载多个相同参数的方法;∙CODSTA.OVERRIDE-4当重载“Object.equals()”方法时,总是重载“Object.hashCode()”方法;∙CODSTA.PML-4总是将“main()”方法放在最后;∙CODSTA.SMC-3不用!避免“switch”语句含有太多的“case”语句;∙CODSTA.UCC-2不用!对于只提供静态成员和方法的工具类,使用“private”的构造函数;∙CODSTA.UCDC-2不用!对于只提供静态成员和方法的工具类,提供“private”的构造函数;∙N-2避免使用魔术常数;∙CODSTA.VDT-1避免在一个语句中声明多种类型的变量;2.4.按合约设计规则共13个规则,全部不用!2.5.EJB规则∙EJB.AMSC-2不用!避免访问和修改配置为安全性的对象;∙EJB.CDP-1Bean类必须声明为“public”;∙DA-1不允许声明Bean类为“abstract”;∙DF-1不允许声明Bean类为“final”;∙EJB.CRTE-1声明“ejbCreate()”方法为“public”而不允许声明为“static”和“final”;∙EJB.FNDM-1声明“finder”方法为“public”而不允许声明为“static”和“final”;∙EJB.IECM-1在Bean类中,实现一个或多个“ejbCreate()”方法;∙EJB.IEPM-1在EntityBean类中,实现一个或多个“ejbPostCreate()”方法;∙EJB.LNL-2在Bean类中,避免装载本地(native)库文件;∙EJB.MDBC-1在message-driven Bean类中,实现“ejbCreate()”方法;∙EJB.MEC-1在EntityBean中,对于每一个“ejbCreate”定义匹配的“ejbPostCreate”方法;∙EJB.MNDF-1在Bean类中,不允许定义“finalize()”方法;∙EJB.MRE-1对于SessionBean的remote interface和remote home interface抛出“java.rmi.RemoteException”例外;∙EJB.NAC-1在MessageDrivenBean类中,对于“ejbCreate()”方法,不允许有参数;∙EJB.NFDC-1Bean类必须提供“public”的构造函数;∙EJB.NFS-2在EJB组件中,对于所有的“final”成员变量声明为“static”;∙EJB.PCRTE-1声明“ejbPostCreate()”方法为“public”,而不允许声明为“static”和“final”;∙EJB.RILH-1在Bean类的local interface和local home interface中不允许抛出“java.rmi.RemoteException”例外;∙EJB.RT-1使“finder”方法返回值类型为“primary key”或者“primary keys”集合类型;∙EJB.RTC-1使SessionBean类的“ejbCreate()”方法返回值为“void”;∙EJB.RTP-1使“ejbPostCreate()”方法的返回值为“void”;∙EJB.RUH-2重用已经产生返回的EJB home接口,避免JNDI查找的低效率;∙EJB.TCE-1在remote home和local home的“create”方法中抛出“javax.ejb.CreateException”例外;∙EJB.TFE-1在remote home和local home的“finder”方法中抛出“javax.ejb.FinderException”例外;∙EJB.THISARG-1避免在参数中传递“this”引用;∙EJB.THISRET-1避免返回“this”引用;∙EJB.THREAD-2避免以任何方式启动、停止和管理线程,这些全部应该由应用服务器管理;2.6.代码格式规则∙FORMAT.CBRACE-3对于“}”单独放在一行;∙FORMAT.CMS-3类型转换之后增加一个空格;∙FORMAT.DUT-3使用多个空格代替“Tabs”键;∙FORMAT.FCB-4避免将“{”另起一行;∙FORMAT.IAD-3声明数组时,要将“[]”放在类型和变量名称之间;∙FORMAT.IND-2不用!使用4个空格的缩进格式;∙FORMAT.JSPH-2在每一个JSP文件的顶部增加文件注释;∙FORMAT.LL-2每行语句的长度是80个字符;∙FORMAT.MCH-2在每一个源文件的顶部增加文件注释;∙FORMAT.MSP-3不用!在方法名称和“(”之间增加一个空格;∙FORMAT.NSAB-3避免在“{”之后书写语句;∙FORMAT.OSPL-1一行只书写一个语句;∙FORMAT.SAC-3在逗号之后增加一个空格;∙FORMAT.SAOP-3在赋值号的左右各增加一个空格;∙FORMAT.SAS-3在分号之后增加一个空格;∙FORMAT.SAUOP-3避免在前置的一元操作符和其操作数之间增加一个空格;∙FORMAT.SBOP-3在每一个二元操作符的前后各增加一个空格;s∙FORMAT.SBUOP-3避免在一元操作符和其操作数之间增加一个空格;∙FORMAT.SC-3在条件关键字和“(”之间增加一个空格;∙FORMAT.SCOP-3在“?”条件操作符的左右各增加一个空格;∙FORMAT.SLOP-3在逻辑操作符的左右各增加一个空格;∙FORMAT.SROP-3在关系操作符的左右各增加一个空格;∙FORMAT.UP-3对于“return”语句避免使用没有意义的括号;2.7.垃圾回收规则∙GC.AUTP-2在转换基本数据类型的“toString”时,避免创建不必要的临时变量;∙GC.DUD-3使用“long[]”代替“Date[]”;∙GC.FCF-1在“finalize()”中必须调用“super.finalize()”;∙GC.FM-1避免在“finalize()”中注销“listeners”;∙GC.GCB-5在一个方法中,要重复使用“getClipBounds()”的返回值,既不要调用“getClipBounds()”两次;∙GC.IFF-2在“finalize()”方法中,将对“super.finalize()”方法的调用发在“finally”程序块中;∙GC.NCF-1避免在程序中直接调用“finalize()”方法;∙GC.OSTM-2为了防止潜在的内存泄漏,要对“ObjectStreams”调用“reset()”方法;∙GC.STV-3避免对于各种集合(collection)使用“static”修饰符,因为其有可能无限制的增长;2.8.全局静态分析规则共16个规则,全部不用!2.9.初始化规则∙INIT.CSI-2在构造函数中明确的初始化全部的成员变量;∙INIT.LV-3不用!在变量声明的地方明确的初始化全部的局部变量;∙INIT.NFS-2在变量初始化时,避免使用没有修饰为“final static”的成员变量;∙INIT.SF-2明确的初始化所有的“static”成员变量;2.10.国际化规则共10个规则,全部不用!2.11.Javadoc注释规则∙JAV ADOC.BT-4避免使用不存在的“@”标签;∙JAV ADOC.MAJDT-3在类和接口的说明中,必须使用“@author”标签的注释;∙JAV ADOC.MRDC-1对于所有的“public”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC2-2对于所有的“protected”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC3-3对于所有的“private”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC4-5在“private”方法中使用“@return”标签的注释;在类的说明中,必须使用“@version”标签的注释;∙JAV ADOC.PARAM-1对于“public”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM2-2对于“protected”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM3-3对于“package-private”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM4-5对于“private”方法,必须使用“@param”标签的注释;∙JAV ADOC.PJDCC-1对于所有的“public”类使用JavaDoc注释;∙JAV ADOC.PJDCC2-2对于所有的“protected”类使用JavaDoc注释;∙JAV ADOC.PJDCC3-3对于所有的“package-pritvate”类和接口使用JavaDoc的注释;∙JAV ADOC.PJDCC4-5对于所有的“private”类和接口使用JavaDoc的注释;∙JAV ADOC.PJDCF-1对于所有的“public”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF2-2对于所有的“protected”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF3-3对于所有的“package-private”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF4-5对于所有的“private”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCM-1对于所有的“public”方法使用JavaDoc注释;∙JAV ADOC.PJDCM2-2对于所有的“protected”方法使用JavaDoc注释;∙JAV ADOC.PJDCM3-3对于所有的“package-private”方法使用JavaDoc注释;∙JAV ADOC.PJDCM4-5对于所有的“private”方法使用JavaDoc注释;∙JAV ADOC.SMJT-1对于标识为“synchronized public”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.SMJT2-2对于标识为“synchronized protected”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.SMJT3-4对于标识为“synchronized package-private”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.THROW-1要对“public”方法中抛出的例外使用“@throws”或者“@exception”标签;要对“protected”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.THROW3-3要对“package-private”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.THROW4-5要对“private”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.TSMJT-3对于“toString”方法提供JavaDoc注释;∙JAV ADOC.VMCR-3对于返回值为“void”的方法,避免使用“@return”标签;2.12.JUnit测试用例规则∙JUNIT.OSIC-2避免使用构造函数去初始化测试用例;∙JUNIT.OSUM-3总是重载“setUp()”方法;∙JUNIT.OTDM-3总是重载“tearDown()”方法;2.13.类的统计信息共23个规则,全部不用!2.14.其它规则∙MISC.AFP-5不用!避免使用方法参数进行赋值;∙MISC.ARN-3返回0长度的数组而不是“null”值;∙MISC.ASFI-2不用!将只有“abstract”方法和“static final”的成员变量的类重新声明接口;∙MISC.AUO-1避免创建一个对象实例去访问“static”成员变量或者方法;∙MISC.BLKELSE-3对于“else”程序块要使用“{}”;∙MISC.BLKFOR-3对于“for”程序块要使用“{}”;∙MISC.BLKIF-3对于“if”程序块要使用“{}”;对于“while”程序块要使用“{}”;∙MISC.CLNC-1避免在“clone()”方法中调用构造函数;∙MISC.CLONE-1在所有的“clone()”方法中调用“super.clone()”;∙MISC.CTOR-4避免在构造函数中调用非“final”、非“static”和非“private”方法;∙MISC.DPRAPI-1避免使用过时的API方法;∙MISC.DUID-1对于所有的“Serializable”类创建一个“serialVersionUID”变量;∙MISC.FF-1对于“private”的常量变量使用“final”修饰符;∙MISC.FLV-4对于常量局部变量使用“final”修饰符;∙MISC.HMF-1避免在方法中声明与类成员变量同名的局部变量;∙MISC.MSF-4不用!避免两个以上的“static”成员变量;∙MISC.PCIF-1在“for”语句中要使用条件判断和增长变量;∙MISC.PCTOR-2避免对于非“public”类声明“public”构造函数;∙MISC.PFL-5尽量使用“for”循环替换“while”循环;∙MISC.PSFA-2避免使用“public static final”的数组;∙MISC.UBD-3如果需要精确计算的变量避免使用“float”和“double”类型变量;∙T-2对于解析字符串,使用“StringTokenizer”代替“indexOf()”或者“substring()”方法;2.15.命名规范∙NAMING.CVN-5对于变量的名称尽可能使用约定成熟的名称;∙NAMING.GETA-1对于getter方法尽可能使用“get”命名;∙NAMING.GETB-3对于“booean”的getter方法尽可能使用“is,can,has,have”命名;∙NAMING.IFV-2对于“interface”的成员变量使用全部字符大写的命名;对于“is...”命名,只能作为返回值为“Boolean”的方法的名称;∙NAMING.NCL-2对于类,强制使用标准的命名规则:首字母大写;∙NAMING.NE-2对于例外,强制使用标准的命名规则:尾字母尾“…Exception”;∙NAMING.NIF-2对于非“static”成员变量使用标准的命名规则:首字母小写;∙NAMING.NITF-2对于接口,强制使用标准的命名规则:首字母大写;∙NAMING.NLV-2对于局部变量,强制使用标准的命名规则:首字母小写;∙NAMING.NM-2对于非“static”方法,强制使用标准的命名规则:首字母小写;∙NAMING.NMP-2对于方法的参数,强制使用标准的命名规则:首字母小写;∙NAMING.NSF-2对于非“final static”成员变量,强制使用标准的命名规则:首字母小写;∙NAMING.NSM-2对于“static”方法,强制使用标准的命名规则:首字母小写;∙NAMING.PKG-3对于“package”的名称全部使用小写字母;∙NAMING.SETA-2对于setter方法,尽可能使用“set”命名;∙F-2对于“final static”成员变量,避免使用小写字母;2.16.面向对象编程规则∙OOP.AHF-1避免在子类中重载父类的成员变量;∙OOP.AHSM-2避免在子类中重载父类的“static”方法;∙OOP.APPF-2不用!避免“public”或者“package-private”的实例化成员变量;∙OOP.APROF-2不用!避免“protected”实例化成员变量;s∙OOP.IIN-5对于实现接口的类,避免对于接口的方法使用“abstract”或者空的函数体;∙OOP.LEVEL-2避免两个深度级别的内部嵌套类;∙OOP.LPF-4在代码排列中,首先编码所有的“public”和“package-private”方法或者成员变量;不用!避免重载私有的“private”方法;2.17.优化规则∙OPT.AAS-3使用简短格式的赋值语句;∙OPT.CEL-3避免在循环语句中调用方法;∙OPT.CS-1在“finally”块中关闭streams;∙OPT.DIC-3在创建“ArrayList”、“HashMap”、“HashSet”、“Hashtable”、“Vector”和“WeakHashMap”时,必须定义初始的容量大小;∙OPT.IF-4不用!对于“if(cond)return;else return;”语句使用条件操作符;∙OPT.IFAS-4不用!对于“if(cond)a=b;else a=c;”语句,使用条件赋值语句;∙OPT.INSOF-5仅仅对于接口使用“instanceof”;∙OPT.IRB-2对于数组的循环拷贝,采用“System.arraycopy()”替换;∙OPT.LOOP-3不用!避免在循环体中创建变量;∙OPT.MAF-4不用!对于访问成员变量的方式使用“final”修饰符;∙OPT.PCTS-3对于单个字符的比较判断,使用“charAt()”替代“startsWith()”方法;∙OPT.SB-3在创建“StringBuffer”时,明确定义其容量;∙OPT.SDIV-4不用!使用右移操作符替代被2的指数值相除;∙OPT.SMUL-4不用!使用左移操作符替代被2的指数值相乘;∙OPT.STR-3对于单个字符,使用单引号替代双引号;∙OPT.SYN-3在循环中避免调用“synchronized”方法;∙OPT.TRY-3不用!将“try/catch/finally”程序块放在循环体外;∙OPT.UEQ-3避免使用“true”进行boolean类型的判断;∙OPT.UISO-1避免不必要的”instanceof“的判断;避免不必要的类型转换;∙B-2不用!对于非常量字符串,使用“StringBuffer”替代“String”;∙C-2对于常量字符串,使用“String”替代“StringBuffer”;∙V-3不用!尽可能使用“stack”类型的变量;2.18.预防BUG规则∙PB.ADE-1在条件程序块中,使用“{}”以避免易混淆的“else”语句;∙PB.AECB-1避免在“catch”块中使用空语句;∙PB.ASI-2避免在“if”语句中使用赋值语句;∙PB.CLP-2不允许将基本数据类型转换为比其更低精度的类型;∙PB.DCF-2避免比较“float”类型;∙PB.DCP-3不用!避免使用“+”连接数字字符串,而是先增加数字;s∙PB.DNCSS-1在“ponentResized()”中不要调用“setSize()”方法;∙PB.EQL-3不用!在“equals()”方法的实现中,要使用“getClass()方法;∙PB.EQL2-3不用!在“equals()”方法的实现中,要使用“instanceof”;∙PB.FEB-1避免在“for”语句中,使用空的循环体;∙PB.FLV A-2避免在“for”循环体中对于循环控制变量进行赋值;∙PB.IEB-1避免在“if”程序块中使用空的程序体;∙PB.IESM-3避免调用“String.equals("literal")”或者“String.equalsIgnoreCase("literal")”;∙PB.IMO-2在重载的时候一定要清晰的明确要重载的方法;∙PB.MAIN-1对于“main()”方法,仅仅用于程序的入口点;∙PB.MASP-2对于“serializable”的类的“readResolve()”和“writeReplace()”方法,使用“protected”修饰符;避免命名方法参数的名称与类的成员变量的名称一致;∙PB.NAMING-1避免命名非构造函数的名称与类名称一致;∙PB.NDC-1避免直接或者间接的子类化“Error”和“Throwable”;∙PB.NXRE-3避免直接或者间接的子类化“RuntimeException”;∙PB.OROM-2对于所有的“Serializable”类实现“readObject()”方法;∙PB.PDS-2对于“switch”程序块,提供“default:”语句;∙PB.SBC-1对于“switch”程序块,避免错误“case”语句;∙PB.TLS-1对于“switch”程序块,避免使用text条件;∙PB.UEI-3当比较对象时,使用“equals()”方法;∙PB.UEI2-3当比较字符串时,使用“equals()”方法;2.19.工程项目统计共11个规则,全部不用!2.20.兼容性规则∙PORT.ENV-1避免使用“System.getenv()”;∙PORT.EXEC-3避免使用“Runtime.exec()“;∙PORT.LNSP-1避免在程序中硬编码“\n”、“\r”作为换行符;∙PORT.NATV-3不用!避免使用用户定义的“native”方法;∙PORT.PEER-1避免直接使用“java.awt.peer.*”接口方法;2.21.安全性规则∙SECURITY.CLONE-3使你自己定义的“clone()”方法为“final”;∙SECURITY.CMP-2避免按照名称比较类的实例对象;∙SECURITY.INNER-1使所有的内部类“private”;∙SECURITY.PKG-5不要依赖“package”的作用域;∙SECURITY.SER-3使你的类为“Unserializable”;∙SECURITY.SER2-3避免使你的接口为“Serializable”;2.22.Servlet规则∙SERVLET.BINS-3避免使用“java.beans.Beans.instantiate()”;∙SERVLET.CDBC-1在“finally”块中关闭JDBC连接;∙SERVLET.DSLV-2重新利用已经创建的JDBC连接;∙SERVLET.HVR-2使用完“HttpSession”变量后要释放;∙SERVLET.MDC-1声明一个没有参数的“public”构造函数;∙SERVLET.RRWD-2使用完JDBC资源后要释放;∙SERVLET.SOP-2尽量少用“System.out.println”或者“System.err.println”;∙SERVLET.STM-2在“Servlet”类中,避免使用“SingleThreadModel”;∙SERVLET.SYN-2在Servlet中,尽量少用“synchronization”;2.23.线程及同步规则∙TRS.ANF-3不要使用“notify()”,而是使用“notifyAll()”;∙TRS.AUTG-3避免使用变量的类型为“ng.ThreadGroup”;s∙TRS.AUTY-3避免使用“Thread.yield”;∙TRS.CSFS-3要防止在“synchronized”方法中,由于调用“synchronized”而产生的死锁;∙TRS.MRUN-2对于“Thread”子类定义“run()”方法;∙TRS.NSM-5避免在方法的声明地方使用“synchronized”修改;∙TRS.NSYN-1非“synchronized”方法不应该调用“wait()”和“notify()”;∙TRS.RUN-5在“Runnable.run()”方法实现中,使用“synchronized”修改;∙TRS.THRD-1避免调用“Thread.resume()”、“Thread.stop()”、“Thread.suspend()”和“Runtime.runFinalizersOnExit()”;∙TRS.UWIL-2仅仅在“while”循环中调用“wait()”方法;∙TRS.UWNA-2在循环中,使用“wait()”和“notifyAll()”方法替代睡眠的方法;2.24.不使用的代码规则∙UC.AAI-2不用!在接口声明中,避免不必要的访问修饰符;∙UC.AUV-2避免定义不使用的局部变量;∙UC.DIL-3不要明确的“import”“ng.*”包;∙UC.PF-2避免定义不使用的“private”成员变量;∙UC.PM-2避免定义不使用的“private”方法;∙UC.UP-2避免定义不使用的参数;。

java 编程规范

java 编程规范

java 编程规范Java 编程规范是一系列的准则和推荐,用来指导 Java 开发人员在编写代码时保持一致性和最佳实践。

下面是一份简要的Java 编程规范,涵盖了代码的结构、命名、注释、代码风格等方面。

1. 使用有意义且描述性强的命名:- 类、接口和枚举使用名词或名词词组,首字母大写,采用驼峰式命名法(例如:UserService);- 方法和变量使用动词或动词短语,首字母小写,采用驼峰式命名法(例如:getUserInfo);- 常量使用全大写字母,可以使用下划线分隔单词(例如:MAX_VALUE)。

2. 对于类的结构:- 成员变量应该私有化,并提供相应的 getter 和 setter 方法; - 类应该从相关的父类或接口继承,如果没有特殊要求,应该遵循单一职责原则(SRP);- 类的方法应该按照功能进行组织,相似的方法应该放在相邻位置。

3. 使用适当的注释:- 类和方法应该用 Javadoc 注释进行文档化,描述其功能、参数、返回值和异常情况;- 在关键代码块或算法复杂的地方添加注释,以提高代码的可读性;- 避免使用不必要的注释,代码应该尽量自解释。

4. 空白行和缩进:- 使用空白行和适当的缩进来提高代码的可读性,将代码分割成逻辑块;- 使用连续的空白行来分隔不同的功能块。

5. 代码风格:- 使用适当的大括号格式,例如:```javaif (condition) {// block of code} else {// block of code}```- 每条语句应该独立一行,并且在操作符(如等号或逗号)之前不要加空格。

这只是一份简要的 Java 编程规范,实际上还有更多的细节和约定可以在团队中制定。

遵循规范编写的代码有助于提高代码质量、可读性和可维护性,同时也方便了其他开发人员的理解和合作。

JTest代码审查编程规范

JTest代码审查编程规范

" CODSTA.ACDO-1避免在字符串常量前使用"new"操作符;" CODSTA.ASI-3不用!对于任何没有使用非静态变量类成员变量的方法使用"static"修饰符; " CODSTA.AUVT-3不用!对于"List"和"Set"的接口实现的类型使用"List"和"Set"声明;" CODSTA.CLONE-2对于Cloneable 类声明"clone() throws CloneNotSupportedException"; " CODSTA.CLS-4在比较是否相等时,将常量放在左边;" CODSTA.CRS-4不用!在比较是否相等时,将常量放在右边;" CODSTA.DCI-5不用!在interface中定义常量;" CODSTA.DCTOR-3不用!在任何可能的情况下,都定义一个缺省的构造函数;" CODSTA.DUN-5不用!在一个方法中,避免使用3个以上的"!"操作符;" CODSTA.IMPT-4不用!不允许使用通配符"*"import类;" CODSTA.IMPT2-4不用!使用通配符import类;" CODSTA.ISACF-5可以考虑;避免在接口中定义常量;" CODSTA.LONG-2使用"L"修饰符而不是"l"来表示"long"整数;" CODSTA.MVOS-3避免在一个语句中声明多个变量;" CODSTA.NCAC-2避免在"abstract"类的构造函数中调用其"abstract"方法;" CODSTA.NCE-4在"catch"语句中避免使用"Exception"、"RuntimeException"和"Throwable"; " CODSTA.NEA-1避免嵌套赋值;" CODSTA.NTX-3避免抛出抛出"Exception",而应该总是抛出"Exception"的子类;" CODSTA.OGM-3不用!按照方法的名称顺序定义方法;" CODSTA.OTOSM-3不用!总是重载"toString()"方法;" CODSTA.OVERLOAD-4不用!避免重载多个相同参数的方法;" CODSTA.OVERRIDE-4当重载"Object.equals()"方法时,总是重载"Object.hashCode()"方法; " CODSTA.PML-4总是将"main()"方法放在最后;" CODSTA.SMC-3不用!避免"switch"语句含有太多的"case"语句;" CODSTA.UCC-2不用!对于只提供静态成员和方法的工具类,使用"private"的构造函数; " CODSTA.UCDC-2不用!对于只提供静态成员和方法的工具类,提供"private"的构造函数; " N-2避免使用魔术常数;" CODSTA.VDT-1避免在一个语句中声明多种类型的变量;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JTest检查的Java编程规范目录1.前言 (3)2.JTest检查的编程规范 (3)2.1.编码规则 (3)2.2.按合约设计规则 (5)2.3.EJB规则 (5)2.4.代码格式规则 (6)2.5.垃圾回收规则 (7)2.6.全局静态分析规则 (8)2.7.初始化规则 (8)2.8.国际化规则 (8)2.9.Javadoc注释规则 (8)2.10.JUnit测试用例规则 (10)2.11.类的统计信息 (10)2.12.其它规则 (10)2.13.命名规范 (11)2.14.面向对象编程规则 (12)2.15.优化规则 (13)2.16.预防BUG规则 (14)2.17.工程项目统计 (15)2.18.兼容性规则 (15)2.19.安全性规则 (15)2.20.Servlet规则 (16)2.21.线程及同步规则 (16)2.22.不使用的代码规则 (17)1.前言JTest可以对Java代码进行静态和动态分析,可以规范化统一编程规定和帮助开发人员预防潜在的编程错误。

本文详细描述了JTest中采用的编程格式。

2.JTest检查的编程规范JTest中共有518条规定,结合实际情况,选取了其中的199条。

已经将适合的规则导出到文件中,开发人员只需将规则导入到JTest中即可。

2.1.规则导出文件《JTest代码审查规定.property》2.2.如何导入到JTest中在JTest主菜单中,选择“Jtest”>“Jtest Configurations”,弹出JTest的“TEST Configurations”设置对话框,在左端的面板中选择“User-Defined”,点击鼠标右键的“Import”菜单导入上述的property文件即可。

以下的编程规则来源于JTest检查规范,对于其中的适合部分进行了说明。

【说明】对于每条规则的利弊,请参见JTest联机帮助。

2.3.编码规则∙CODSTA.ACDO-1避免在字符串常量前使用“new”操作符;∙CODSTA.ASI-3不用!对于任何没有使用非静态变量类成员变量的方法使用“static”修饰符;∙CODSTA.AUVT-3不用!对于“List”和“Set”的接口实现的类型使用“List”和“Set”声明;∙CODSTA.CLONE-2对于Cloneable类声明“clone()throws CloneNotSupportedException“;∙CODSTA.CLS-4在比较是否相等时,将常量放在左边;∙CODSTA.CRS-4不用!在比较是否相等时,将常量放在右边;∙CODSTA.DCI-5不用!在interface中定义常量;∙CODSTA.DCTOR-3不用!在任何可能的情况下,都定义一个缺省的构造函数;∙CODSTA.DUN-5不用!在一个方法中,避免使用3个以上的“!”操作符;∙CODSTA.IMPT-4不用!不允许使用通配符“*”import类;∙CODSTA.IMPT2-4不用!使用通配符import类;∙CODSTA.ISACF-5可以考虑;避免在接口中定义常量;∙CODSTA.LONG-2使用“L”修饰符而不是“l”来表示“long”整数;∙CODSTA.MVOS-3避免在一个语句中声明多个变量;∙CODSTA.NCAC-2避免在“abstract”类的构造函数中调用其“abstract”方法;∙CODSTA.NCE-4在“catch”语句中避免使用“Exception”、“RuntimeException”和“Throwable”;∙CODSTA.NEA-1避免嵌套赋值;∙CODSTA.NTX-3避免抛出抛出“Exception”,而应该总是抛出“Exception”的子类;∙CODSTA.OGM-3不用!按照方法的名称顺序定义方法;∙CODSTA.OTOSM-3不用!总是重载“toString()”方法;∙CODSTA.OVERLOAD-4不用!避免重载多个相同参数的方法;∙CODSTA.OVERRIDE-4当重载“Object.equals()”方法时,总是重载“Object.hashCode()”方法;∙CODSTA.PML-4总是将“main()”方法放在最后;∙CODSTA.SMC-3不用!避免“switch”语句含有太多的“case”语句;∙CODSTA.UCC-2不用!对于只提供静态成员和方法的工具类,使用“private”的构造函数;∙CODSTA.UCDC-2不用!对于只提供静态成员和方法的工具类,提供“private”的构造函数;∙N-2避免使用魔术常数;∙CODSTA.VDT-1避免在一个语句中声明多种类型的变量;2.4.按合约设计规则共13个规则,全部不用!2.5.EJB规则∙EJB.AMSC-2不用!避免访问和修改配置为安全性的对象;∙EJB.CDP-1Bean类必须声明为“public”;∙DA-1不允许声明Bean类为“abstract”;∙DF-1不允许声明Bean类为“final”;∙EJB.CRTE-1声明“ejbCreate()”方法为“public”而不允许声明为“static”和“final”;∙EJB.FNDM-1声明“finder”方法为“public”而不允许声明为“static”和“final”;∙EJB.IECM-1在Bean类中,实现一个或多个“ejbCreate()”方法;∙EJB.IEPM-1在EntityBean类中,实现一个或多个“ejbPostCreate()”方法;∙EJB.LNL-2在Bean类中,避免装载本地(native)库文件;∙EJB.MDBC-1在message-driven Bean类中,实现“ejbCreate()”方法;∙EJB.MEC-1在EntityBean中,对于每一个“ejbCreate”定义匹配的“ejbPostCreate”方法;∙EJB.MNDF-1在Bean类中,不允许定义“finalize()”方法;∙EJB.MRE-1对于SessionBean的remote interface和remote home interface抛出“java.rmi.RemoteException”例外;∙EJB.NAC-1在MessageDrivenBean类中,对于“ejbCreate()”方法,不允许有参数;∙EJB.NFDC-1Bean类必须提供“public”的构造函数;∙EJB.NFS-2在EJB组件中,对于所有的“final”成员变量声明为“static”;∙EJB.PCRTE-1声明“ejbPostCreate()”方法为“public”,而不允许声明为“static”和“final”;∙EJB.RILH-1在Bean类的local interface和local home interface中不允许抛出“java.rmi.RemoteException”例外;∙EJB.RT-1使“finder”方法返回值类型为“primary key”或者“primary keys”集合类型;∙EJB.RTC-1使SessionBean类的“ejbCreate()”方法返回值为“void”;∙EJB.RTP-1使“ejbPostCreate()”方法的返回值为“void”;∙EJB.RUH-2重用已经产生返回的EJB home接口,避免JNDI查找的低效率;∙EJB.TCE-1在remote home和local home的“create”方法中抛出“javax.ejb.CreateException”例外;∙EJB.TFE-1在remote home和local home的“finder”方法中抛出“javax.ejb.FinderException”例外;∙EJB.THISARG-1避免在参数中传递“this”引用;∙EJB.THISRET-1避免返回“this”引用;∙EJB.THREAD-2避免以任何方式启动、停止和管理线程,这些全部应该由应用服务器管理;2.6.代码格式规则∙FORMAT.CBRACE-3对于“}”单独放在一行;∙FORMAT.CMS-3类型转换之后增加一个空格;∙FORMAT.DUT-3使用多个空格代替“Tabs”键;∙FORMAT.FCB-4避免将“{”另起一行;∙FORMAT.IAD-3声明数组时,要将“[]”放在类型和变量名称之间;∙FORMAT.IND-2不用!使用4个空格的缩进格式;∙FORMAT.JSPH-2在每一个JSP文件的顶部增加文件注释;∙FORMAT.LL-2每行语句的长度是80个字符;∙FORMAT.MCH-2在每一个源文件的顶部增加文件注释;∙FORMAT.MSP-3不用!在方法名称和“(”之间增加一个空格;∙FORMAT.NSAB-3避免在“{”之后书写语句;∙FORMAT.OSPL-1一行只书写一个语句;∙FORMAT.SAC-3在逗号之后增加一个空格;∙FORMAT.SAOP-3在赋值号的左右各增加一个空格;∙FORMAT.SAS-3在分号之后增加一个空格;∙FORMAT.SAUOP-3避免在前置的一元操作符和其操作数之间增加一个空格;∙FORMAT.SBOP-3在每一个二元操作符的前后各增加一个空格;s∙FORMAT.SBUOP-3避免在一元操作符和其操作数之间增加一个空格;∙FORMAT.SC-3在条件关键字和“(”之间增加一个空格;∙FORMAT.SCOP-3在“?”条件操作符的左右各增加一个空格;∙FORMAT.SLOP-3在逻辑操作符的左右各增加一个空格;∙FORMAT.SROP-3在关系操作符的左右各增加一个空格;∙FORMAT.UP-3对于“return”语句避免使用没有意义的括号;2.7.垃圾回收规则∙GC.AUTP-2在转换基本数据类型的“toString”时,避免创建不必要的临时变量;∙GC.DUD-3使用“long[]”代替“Date[]”;∙GC.FCF-1在“finalize()”中必须调用“super.finalize()”;∙GC.FM-1避免在“finalize()”中注销“listeners”;∙GC.GCB-5在一个方法中,要重复使用“getClipBounds()”的返回值,既不要调用“getClipBounds()”两次;∙GC.IFF-2在“finalize()”方法中,将对“super.finalize()”方法的调用发在“finally”程序块中;∙GC.NCF-1避免在程序中直接调用“finalize()”方法;∙GC.OSTM-2为了防止潜在的内存泄漏,要对“ObjectStreams”调用“reset()”方法;∙GC.STV-3避免对于各种集合(collection)使用“static”修饰符,因为其有可能无限制的增长;2.8.全局静态分析规则共16个规则,全部不用!2.9.初始化规则∙INIT.CSI-2在构造函数中明确的初始化全部的成员变量;∙INIT.LV-3不用!在变量声明的地方明确的初始化全部的局部变量;∙INIT.NFS-2在变量初始化时,避免使用没有修饰为“final static”的成员变量;∙INIT.SF-2明确的初始化所有的“static”成员变量;2.10.国际化规则共10个规则,全部不用!2.11.Javadoc注释规则∙JAV ADOC.BT-4避免使用不存在的“@”标签;∙JAV ADOC.MAJDT-3在类和接口的说明中,必须使用“@author”标签的注释;∙JAV ADOC.MRDC-1对于所有的“public”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC2-2对于所有的“protected”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC3-3对于所有的“private”方法,必须使用“@return”标签的注释;∙JAV ADOC.MRDC4-5在“private”方法中使用“@return”标签的注释;在类的说明中,必须使用“@version”标签的注释;∙JAV ADOC.PARAM-1对于“public”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM2-2对于“protected”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM3-3对于“package-private”方法,必须使用“@param”标签的注释;∙JAV ADOC.PARAM4-5对于“private”方法,必须使用“@param”标签的注释;∙JAV ADOC.PJDCC-1对于所有的“public”类使用JavaDoc注释;∙JAV ADOC.PJDCC2-2对于所有的“protected”类使用JavaDoc注释;∙JAV ADOC.PJDCC3-3对于所有的“package-pritvate”类和接口使用JavaDoc的注释;∙JAV ADOC.PJDCC4-5对于所有的“private”类和接口使用JavaDoc的注释;∙JAV ADOC.PJDCF-1对于所有的“public”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF2-2对于所有的“protected”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF3-3对于所有的“package-private”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCF4-5对于所有的“private”成员变量使用JavaDoc注释;∙JAV ADOC.PJDCM-1对于所有的“public”方法使用JavaDoc注释;∙JAV ADOC.PJDCM2-2对于所有的“protected”方法使用JavaDoc注释;∙JAV ADOC.PJDCM3-3对于所有的“package-private”方法使用JavaDoc注释;∙JAV ADOC.PJDCM4-5对于所有的“private”方法使用JavaDoc注释;∙JAV ADOC.SMJT-1对于标识为“synchronized public”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.SMJT2-2对于标识为“synchronized protected”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.SMJT3-4对于标识为“synchronized package-private”的方法和程序块使用“@concurrency”标签;∙JAV ADOC.THROW-1要对“public”方法中抛出的例外使用“@throws”或者“@exception”标签;要对“protected”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.THROW3-3要对“package-private”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.THROW4-5要对“private”方法中抛出的例外使用“@throws”或者“@exception”标签;∙JAV ADOC.TSMJT-3对于“toString”方法提供JavaDoc注释;∙JAV ADOC.VMCR-3对于返回值为“void”的方法,避免使用“@return”标签;2.12.JUnit测试用例规则∙JUNIT.OSIC-2避免使用构造函数去初始化测试用例;∙JUNIT.OSUM-3总是重载“setUp()”方法;∙JUNIT.OTDM-3总是重载“tearDown()”方法;2.13.类的统计信息共23个规则,全部不用!2.14.其它规则∙MISC.AFP-5不用!避免使用方法参数进行赋值;∙MISC.ARN-3返回0长度的数组而不是“null”值;∙MISC.ASFI-2不用!将只有“abstract”方法和“static final”的成员变量的类重新声明接口;∙MISC.AUO-1避免创建一个对象实例去访问“static”成员变量或者方法;∙MISC.BLKELSE-3对于“else”程序块要使用“{}”;∙MISC.BLKFOR-3对于“for”程序块要使用“{}”;∙MISC.BLKIF-3对于“if”程序块要使用“{}”;对于“while”程序块要使用“{}”;∙MISC.CLNC-1避免在“clone()”方法中调用构造函数;∙MISC.CLONE-1在所有的“clone()”方法中调用“super.clone()”;∙MISC.CTOR-4避免在构造函数中调用非“final”、非“static”和非“private”方法;∙MISC.DPRAPI-1避免使用过时的API方法;∙MISC.DUID-1对于所有的“Serializable”类创建一个“serialVersionUID”变量;∙MISC.FF-1对于“private”的常量变量使用“final”修饰符;∙MISC.FLV-4对于常量局部变量使用“final”修饰符;∙MISC.HMF-1避免在方法中声明与类成员变量同名的局部变量;∙MISC.MSF-4不用!避免两个以上的“static”成员变量;∙MISC.PCIF-1在“for”语句中要使用条件判断和增长变量;∙MISC.PCTOR-2避免对于非“public”类声明“public”构造函数;∙MISC.PFL-5尽量使用“for”循环替换“while”循环;∙MISC.PSFA-2避免使用“public static final”的数组;∙MISC.UBD-3如果需要精确计算的变量避免使用“float”和“double”类型变量;∙T-2对于解析字符串,使用“StringTokenizer”代替“indexOf()”或者“substring()”方法;2.15.命名规范∙NAMING.CVN-5对于变量的名称尽可能使用约定成熟的名称;∙NAMING.GETA-1对于getter方法尽可能使用“get”命名;∙NAMING.GETB-3对于“booean”的getter方法尽可能使用“is,can,has,have”命名;∙NAMING.IFV-2对于“interface”的成员变量使用全部字符大写的命名;对于“is...”命名,只能作为返回值为“Boolean”的方法的名称;∙NAMING.NCL-2对于类,强制使用标准的命名规则:首字母大写;∙NAMING.NE-2对于例外,强制使用标准的命名规则:尾字母尾“…Exception”;∙NAMING.NIF-2对于非“static”成员变量使用标准的命名规则:首字母小写;∙NAMING.NITF-2对于接口,强制使用标准的命名规则:首字母大写;∙NAMING.NLV-2对于局部变量,强制使用标准的命名规则:首字母小写;∙NAMING.NM-2对于非“static”方法,强制使用标准的命名规则:首字母小写;∙NAMING.NMP-2对于方法的参数,强制使用标准的命名规则:首字母小写;∙NAMING.NSF-2对于非“final static”成员变量,强制使用标准的命名规则:首字母小写;∙NAMING.NSM-2对于“static”方法,强制使用标准的命名规则:首字母小写;∙NAMING.PKG-3对于“package”的名称全部使用小写字母;∙NAMING.SETA-2对于setter方法,尽可能使用“set”命名;∙F-2对于“final static”成员变量,避免使用小写字母;2.16.面向对象编程规则∙OOP.AHF-1避免在子类中重载父类的成员变量;∙OOP.AHSM-2避免在子类中重载父类的“static”方法;∙OOP.APPF-2不用!避免“public”或者“package-private”的实例化成员变量;∙OOP.APROF-2不用!避免“protected”实例化成员变量;s∙OOP.IIN-5对于实现接口的类,避免对于接口的方法使用“abstract”或者空的函数体;∙OOP.LEVEL-2避免两个深度级别的内部嵌套类;∙OOP.LPF-4在代码排列中,首先编码所有的“public”和“package-private”方法或者成员变量;不用!避免重载私有的“private”方法;2.17.优化规则∙OPT.AAS-3使用简短格式的赋值语句;∙OPT.CEL-3避免在循环语句中调用方法;∙OPT.CS-1在“finally”块中关闭streams;∙OPT.DIC-3在创建“ArrayList”、“HashMap”、“HashSet”、“Hashtable”、“Vector”和“WeakHashMap”时,必须定义初始的容量大小;∙OPT.IF-4不用!对于“if(cond)return;else return;”语句使用条件操作符;∙OPT.IFAS-4不用!对于“if(cond)a=b;else a=c;”语句,使用条件赋值语句;∙OPT.INSOF-5仅仅对于接口使用“instanceof”;∙OPT.IRB-2对于数组的循环拷贝,采用“System.arraycopy()”替换;∙OPT.LOOP-3不用!避免在循环体中创建变量;∙OPT.MAF-4不用!对于访问成员变量的方式使用“final”修饰符;∙OPT.PCTS-3对于单个字符的比较判断,使用“charAt()”替代“startsWith()”方法;∙OPT.SB-3在创建“StringBuffer”时,明确定义其容量;∙OPT.SDIV-4不用!使用右移操作符替代被2的指数值相除;∙OPT.SMUL-4不用!使用左移操作符替代被2的指数值相乘;∙OPT.STR-3对于单个字符,使用单引号替代双引号;∙OPT.SYN-3在循环中避免调用“synchronized”方法;∙OPT.TRY-3不用!将“try/catch/finally”程序块放在循环体外;∙OPT.UEQ-3避免使用“true”进行boolean类型的判断;∙OPT.UISO-1避免不必要的”instanceof“的判断;避免不必要的类型转换;∙B-2不用!对于非常量字符串,使用“StringBuffer”替代“String”;∙C-2对于常量字符串,使用“String”替代“StringBuffer”;∙V-3不用!尽可能使用“stack”类型的变量;2.18.预防BUG规则∙PB.ADE-1在条件程序块中,使用“{}”以避免易混淆的“else”语句;∙PB.AECB-1避免在“catch”块中使用空语句;∙PB.ASI-2避免在“if”语句中使用赋值语句;∙PB.CLP-2不允许将基本数据类型转换为比其更低精度的类型;∙PB.DCF-2避免比较“float”类型;∙PB.DCP-3不用!避免使用“+”连接数字字符串,而是先增加数字;s∙PB.DNCSS-1在“ponentResized()”中不要调用“setSize()”方法;∙PB.EQL-3不用!在“equals()”方法的实现中,要使用“getClass()方法;∙PB.EQL2-3不用!在“equals()”方法的实现中,要使用“instanceof”;∙PB.FEB-1避免在“for”语句中,使用空的循环体;∙PB.FLV A-2避免在“for”循环体中对于循环控制变量进行赋值;∙PB.IEB-1避免在“if”程序块中使用空的程序体;∙PB.IESM-3避免调用“String.equals("literal")”或者“String.equalsIgnoreCase("literal")”;∙PB.IMO-2在重载的时候一定要清晰的明确要重载的方法;∙PB.MAIN-1对于“main()”方法,仅仅用于程序的入口点;∙PB.MASP-2对于“serializable”的类的“readResolve()”和“writeReplace()”方法,使用“protected”修饰符;避免命名方法参数的名称与类的成员变量的名称一致;∙PB.NAMING-1避免命名非构造函数的名称与类名称一致;∙PB.NDC-1避免直接或者间接的子类化“Error”和“Throwable”;∙PB.NXRE-3避免直接或者间接的子类化“RuntimeException”;∙PB.OROM-2对于所有的“Serializable”类实现“readObject()”方法;∙PB.PDS-2对于“switch”程序块,提供“default:”语句;∙PB.SBC-1对于“switch”程序块,避免错误“case”语句;∙PB.TLS-1对于“switch”程序块,避免使用text条件;∙PB.UEI-3当比较对象时,使用“equals()”方法;∙PB.UEI2-3当比较字符串时,使用“equals()”方法;2.19.工程项目统计共11个规则,全部不用!2.20.兼容性规则∙PORT.ENV-1避免使用“System.getenv()”;∙PORT.EXEC-3避免使用“Runtime.exec()“;∙PORT.LNSP-1避免在程序中硬编码“\n”、“\r”作为换行符;∙PORT.NATV-3不用!避免使用用户定义的“native”方法;∙PORT.PEER-1避免直接使用“java.awt.peer.*”接口方法;2.21.安全性规则∙SECURITY.CLONE-3使你自己定义的“clone()”方法为“final”;∙SECURITY.CMP-2避免按照名称比较类的实例对象;∙SECURITY.INNER-1使所有的内部类“private”;∙SECURITY.PKG-5不要依赖“package”的作用域;∙SECURITY.SER-3使你的类为“Unserializable”;∙SECURITY.SER2-3避免使你的接口为“Serializable”;2.22.Servlet规则∙SERVLET.BINS-3避免使用“java.beans.Beans.instantiate()”;∙SERVLET.CDBC-1在“finally”块中关闭JDBC连接;∙SERVLET.DSLV-2重新利用已经创建的JDBC连接;∙SERVLET.HVR-2使用完“HttpSession”变量后要释放;∙SERVLET.MDC-1声明一个没有参数的“public”构造函数;∙SERVLET.RRWD-2使用完JDBC资源后要释放;∙SERVLET.SOP-2尽量少用“System.out.println”或者“System.err.println”;∙SERVLET.STM-2在“Servlet”类中,避免使用“SingleThreadModel”;∙SERVLET.SYN-2在Servlet中,尽量少用“synchronization”;2.23.线程及同步规则∙TRS.ANF-3不要使用“notify()”,而是使用“notifyAll()”;∙TRS.AUTG-3避免使用变量的类型为“ng.ThreadGroup”;s∙TRS.AUTY-3避免使用“Thread.yield”;∙TRS.CSFS-3要防止在“synchronized”方法中,由于调用“synchronized”而产生的死锁;∙TRS.MRUN-2对于“Thread”子类定义“run()”方法;∙TRS.NSM-5避免在方法的声明地方使用“synchronized”修改;∙TRS.NSYN-1非“synchronized”方法不应该调用“wait()”和“notify()”;∙TRS.RUN-5在“Runnable.run()”方法实现中,使用“synchronized”修改;∙TRS.THRD-1避免调用“Thread.resume()”、“Thread.stop()”、“Thread.suspend()”和“Runtime.runFinalizersOnExit()”;∙TRS.UWIL-2仅仅在“while”循环中调用“wait()”方法;∙TRS.UWNA-2在循环中,使用“wait()”和“notifyAll()”方法替代睡眠的方法;2.24.不使用的代码规则∙UC.AAI-2不用!在接口声明中,避免不必要的访问修饰符;∙UC.AUV-2避免定义不使用的局部变量;∙UC.DIL-3不要明确的“import”“ng.*”包;∙UC.PF-2避免定义不使用的“private”成员变量;∙UC.PM-2避免定义不使用的“private”方法;∙UC.UP-2避免定义不使用的参数;。

相关文档
最新文档