JAVA
编码标准规范
一、
JAVA
编码标准规则
1. JavaBeans [BEAN]
2.
编码约定
/
惯例
Coding Conventions [CODSTA]
3.
契约设计
/ Design by Contract [DBC]
4. Enterprise JavaBeans [EJB]
5.
异常
/ Exceptions [EXCEPT]
6.
格式化
/ Formatting [FORMAT]
7.
碎片回收集
/ Garbage Collection [GC]
8.
全面静态分析
/ Global Static Analysis [GLOBAL]
9.
初始化
/ Initialization [INIT]
10.
国际化
/ Internationalization [INTER]
11. JAVA2
微型平台
/ Java 2 Micro Edition [J2ME]
12. JAVA
文档注释
/ Javadoc Comments [JAVADOC]
13. JAVA
数据库连接
/ 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 Configurations
2. 测试驱动开发(TDD)/ Test Driven Development (TDD)
3. Parasoft的自动错误预防组/ Parasoft's AEP group
4. Scope Examples group
5. 其他配置/ Other configurations
6.
自定义编码标准分析:概要/ Customizing coding standard analysis: overview
一、
JAVA
编码标准规则
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 [CODSTA.USN-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" [EJB.CNDA-1]
4-3.不要以"final"声明bean类/ Do not declare bean classes as "final" [EJB.CNDF-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 [EJB.USF-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.不要捕获'java.lang.Error'对象/ Do not catch the 'java.lang.Error' object [EXCEPT.NCERR-3]
5-3.不要捕获'NullPointerException'/ Do not catch 'NullPointerException' [EXCEPT.NCNPE-3]
5-4.不要抛出'java.lang.Error'对象/ Do not throw the 'java.lang.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 [FORMAT]
6-1.每行书写一个语句/ Write one statement per line [FORMAT.OSPL-1]
6-2.强制在主要的模块间执行数个空行/ Enforce number of blank line(s) between major sections [FORMAT.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 [FORMAT.MCH-2]
6-6.条件表达式采用首选格式化/ Use the preferred formatting for conditional expressions [FORMAT.TE-2]
6-7.使用'()'分隔复杂的表达式/ Use '()' to separate complex expressions [FORMAT.APAREN-3]
6-8.在独有的行放置大括号/ Place a closing brace on its own line [FORMAT.CBRACE-3]
6-9.类型分配后放置一个单独的空格符号或否/ Place a single space character or no space character after type casting [FORMAT.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 [FORMAT.NSAB-3]
6-14.强制在所有逗号后执行数个空格字符/ Enforce number of space character(s) after every comma [FORMAT.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 [FORMAT.SAP-3]
6-17.强制在所有分号后执行数个空格字符/ Enforce number of space character(s) after every semicolon [FORMAT.SAS-3]
6-18.强制在一个前缀一元操作和操他的作数间执行数个空格字符/ Enforce number of space character(s) between a prefixed unary operator and its operand [FORMAT.SAUOP-3]
6-19.强制在位运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a bitwise operator [FORMAT.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 [FORMAT.SCOP-3]
6-22.强制在逻辑运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a logical operator [FORMAT.SLOP-3]
6-23.强制在关系运算每一边执行数个空格字符/ Enforce number of space character(s) on each side of a relational operator [FORMAT.SROP-3]
6-24.避免不必要的圆括号/ Avoid unnecessary parentheses [FORMAT.UP-3]
6-25.强制在类型声明前执行数个空行/ Enforce number of blank line(s) before type declarations [FORMAT.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 [FORMAT.FCN-4]
6-29.强制定制注释和修改人/ Enforce the order of annotations and modifiers [FORMAT.MO-4]
6-30.确信所有文件终止于换行字符/ Make sure all files are terminated with a newline character [FORMAT.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 [FORMAT.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 declaration statement [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 [INTER.CCL-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.在国际化环境中不要调用'String.compareTo ()'/ Do not call 'String.compareTo ()' 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 [JAVADOC]
12-1.避免不使用Javadoc标记/ Avoid unused Javadoc tags [JAVADOC.DPMT-1]
12-2.在方法的Javadoc注释中使用'@return' Javadoc标记/ Use the '@return' Javadoc tag in method Javadoc comments [JAVADOC.MRDC-1]
12-3.对方法的每个参数使用'@param' Javadoc标记/ Use the '@param' Javadoc tag for each parameter of methods [JAVADOC.PARAM-1]
12-4.为类型提供Javadoc注释和描述/ Provide Javadoc comments and descriptions for types [JAVADOC.PJDC-1]
12-5.为字段提供Javadoc注释和描述/ Provide Javadoc comments and descriptions for fields [JAVADOC.PJDF-1]
12-6.为方法提供Javadoc注释和描述/Provide Javadoc comments and descriptions for methods [JAVADOC.PJDM-1]
12-7.在"synchronized"的方法和块中使用'@concurrency' Javadoc标记/ Use the '@concurrency' Javadoc tag on "synchronized" methods and blocks [JAVADOC.SMJT-1]
12-8.在方法中使用'@throws'或'@exception' Javadoc标记/ Use the '@throws' or '@exception' Javadoc tag in methods [JAVADOC.THROW-1]
12-9.在"void"方法中避免使用'@return' Javadoc标记/ Avoid using the '@return' Javadoc tag on "void" methods [JAVADOC.VMCR-1]
12-10.在Javadoc注释的声明中使用'@author' Javadoc标记/ Use the '@author' Javadoc tag in declaration Javadoc comments [JAVADOC.MAJDT-3]
12-11.在Javadoc注释的类型中使用'@version'标记/ Use the '@version' tag in type Javadoc comments [JAVADOC.MVJDT-3]
12-12.适当的定义Javadoc标记/ Order Javadoc tags appropriately [JAVADOC.ORDER-3]
12-13.为'toString ()'方法提供Javadoc注释/ Provide Javadoc comment for 'toString ()' method [JAVADOC.TSMJT-3]
12-14.避免没有在Javadoc注释中使用过的不支持的'@'标记和其他标记/ Avoid unsupported '@' tags and other tags that should not be used in Javadoc comments [JAVADOC.BT-4]
12-15.不要在Javadoc注释和描述中插入非Javadoc注释/ Do not insert non-Javadoc comments between Javadoc comments and declarations [JAVADOC.JNJD-5]
12-16.强制控制使用Javadoc注释的行数/ Enforce restraint on number of lines used for Javadoc comments [JAVADOC.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]
14-3.不要有超过一个的同样签名的方法/Do not have more than one method with the same signature [JSP.DUPM-1]
14-4.在include指令中确保不出现无限循环/ Ensure infinite loops do not occur in include directives [JSP.INF-1]
14-5.确保保留的局部变量名没有使用/ Ensure that reserved local variable names are not used [JSP.URLV-1]
14-6.为每个JSP文件提供一个标题注释/ Provide a header comment for each JSP file [JSP.JSPH-2]
15. JavaServer Page Metrics [JMETRICS]
15-1.在JSP文件中遵循限定的Java行数/ Follow limit for number of Java lines in JSP file [JMETRICS.NJL-2]
15-2.在JSP文件中遵循限定的字段数/ Follow limit for number of fields in a JSP file [JMETRICS.NOF-2]
15-3.在JSP文件中遵循限定的JSP声明数/ Follow limit for number of JSP declarations in JSP file [JMETRICS.NOJD-2]
15-4.在JSP文件中遵循限定的JSP脚本数/ Follow limit for number of JSP scriptlets in a JSP file [JMETRICS.NOJS-2]
15-5.在JSP文件中遵循限定的方法数/ Follow limit for number of methods in a JSP file [JMETRICS.NOM-2]
15-6.在JSP文件中遵循限定的package-private字段数/ Follow limit for number of package-private fields in a JSP file [JMETRICS.NOPKGF-2]
15-7.在JSP文件中遵循限定的package-private方法数/Follow limit for number of package-private methods in a JSP file [JMETRICS.NOPKGM-2]
15-8.在JSP文件中遵循限定的"private"字段数/Follow limit for number of "private" fields in JSP file [JMETRICS.NOPRIF-2]
15-9.在JSP文件中遵循限定的"private"方法数/Follow limit for number of "private" methods in a JSP file [JMETRICS.NOPRIM-2]
15-10.在JSP文件中遵循限定的"protected"字段数/Follow limit for number of "protected" fields in a JSP file [JMETRICS.NOPROF-2]
15-11.在JSP文件中遵循限定的"protected"方法数/Follow limit for number of "protected" methods in a JSP file [JMETRICS.NOPROM-2]
15-12.在JSP文件中遵循限定的"public"字段数/Follow limit for number of "public" fields in a JSP file [JMETRICS.NOPUBF-2]
15-13.在JSP文件中遵循限定的"public"方法数/Follow limit for number of "public" methods in a JSP file [JMETRICS.NOPUBM-2]
15-14.Java行数遵循限定的百分比/ Follow limit for percentage of Java lines (%) [JMETRICS.PJL-2]
16. JUnit Test Case [JUNIT]
16-1.构造'suite()'方法为"public"和"static"/ Make 'suite()' methods "public" and "static" [JUNIT.SUITE-1]
16-2.确定所有方法都有至少一个JUnit测试方法/ Make sure all methods have at least one JUnit test method [JUNIT.TEST-1]
16-3.不要使用构造器去装配测试用例/ Do not use the constructor to set up test cases [JUNIT.OSIC-2]
16-4.确保JUnit测试用例包含断言方法/ Ensure JUnit test cases include assertion methods [JUNIT.SIA-2]
16-5.在JUnit断言中包含一个消息串/ Include a message string in JUnit assertions [JUNIT.ASSERT-3]
16-6.在'setUp()'中调用'super.setUp()'和在'tearDown()'中调用'super.tearDown()'/ Call 'super.setUp()' in 'setUp()' and 'super.tearDown()' in 'tearDown()' [JUNIT.CSUPER-3]
16-7.强制一个条件失败使用fail()方法代替使用assertTrue(false)或assertFalse(true)方法/ Use the fail() method instead of forcing a failed condition using the assertTrue(false) or assertFalse(true) method [JUNIT.FAIL-3]
16-8.覆写'setUp ()'方法/ Override the 'setUp ()' method [JUNIT.OSUM-3]
16-9.覆写'tearDown ()'方法/ Override the 'tearDown ()' method [JUNIT.OTDM-3]
16-10.为JUnit测试方法包含一个适当的Javadoc标记/ Include an appropriate Javadoc tag in the Javadoc for JUnit test methods [JUNIT.UPJT-3]
16-11.单元测试对不要使用困难编码的数据/ Do not hard code the location to data used by a unit test [JUNIT.AHLOD-4]
16-12.确保JUnit类有一个main()允许他们独立执行/ Ensure that JUnit classes have a main() allowing them to be executed in isolation [JUNIT.MAIN-4]
16-13.类测试应放置每个测试类在相同的位置/ Place each test class in the same location as the class that it tests [JUNIT.DIR-5]
17. Class Metrics [METRICS]
17-1.在一个"class"或"interface"中遵循限定的注释行数/ Follow the limit for number of comment lines in a "class" or "interface" [METRICS.CCNL-2]
17-2.遵循限定的"class"或"interface"继承层次/ Follow the limit for "class" or "interface" inheritence level [METRICS.CIHL-2]
17-3.在一个方法中遵循限定的注释行数/ Follow the limit for number of comment lines in a method [METRICS.CNLM-2]
17-4.在一个"class"或"interface"中遵循限定的语句行数/ Follow the limit for number of statment lines in a "class" or "interface" [METRICS.CSNL-2]
17-5.在一个"class"或"interface"中遵循限定的行数/Follow the limit for number of lines in a "class" or "interface" [METRICS.CTNL-2]
17-6.遵循限定的字段数/ Follow the limit for number of fields [METRICS.NOF-2]
17-7.遵循限定的方法数/Follow the limit for number of methods [METRICS.NOM-2]
17-8.遵循限定的package-private字段数/Follow the limit for number of package-private fields [METRICS.NPKGF-2]
17-9.遵循限定的package-private方法数/Follow the limit for number of package-private methods [METRICS.NPKGM-2]
17-10.遵循限定的"private"字段数/Follow the limit for number of "private" fields [METRICS.NPRIF-2]
17-11.遵循限定的"private"方法数/Follow the limit for number of "private" methods [METRICS.NPRIM-2]
17-12.遵循限定的"protected"字段数/Follow the limit for number of "protected" fields [METRICS.NPROF-2]
17-13.遵循限定的"protected"方法数/Follow the limit for number of "protected" methods [METRICS.NPROM-2]
17-14.遵循限定的"public"字段数/Follow the limit for number of "public" fields [METRICS.NPUBF-2]
17-15.遵循限定的"public"方法数/Follow the limit for number of "public" methods [METRICS.NPUBM-2]
17-16.遵循限定的Javadoc注释百分比/ Follow the limit for percentage of Javadoc comments (%) [METRICS.PJDC-2]
17-17.在一个方法中遵循限定的语句行数/ Follow the limit for number of statement lines in a method [METRICS.SNLM-2]
17-18.在一个方法中遵循限定的语句数/Follow the limit for number of statements in a method [METRICS.STMT-2]
17-19.遵循限定的迭代复杂/ Follow the limit for Cyclomatic Complexity [METRICS.TCC-2]
17-20.在一个方法中遵循限定的行数/ Follow the limit for number of lines in a method [METRICS.TNLM-2]
17-21.遵循限定的方法调用数/ Follow the limit for number of method calls [METRICS.TNMC-2]
17-22.遵循限定的参数/ Follow the limit for number of parameters [METRICS.TNOP-2]
17-23.遵循限定的"return"语句数/ Follow the limit for number of "return" statements [METRICS.TRET-2]
17-24.在一个匿名类中遵循限定的行数/ Follow the limit for number of lines in anonymous class [METRICS.ACTNL-3]
17-25.遵循限定的每个switch-case语句/Follow the limit for statements of each switch-case [METRICS.CASE-3]
17-26.遵循限定的嵌套-if层次/ Follow the limit for nested-if levels [METRICS.DIF-3]
17-27.遵循限定的嵌套-try层次/ Follow the limit for nested-try levels [METRICS.DTRY-3]
17-28.在一个文件中遵循限定的import数/ Follow the limit for number of import statements in a file [METRICS.IMPT-3]
17-29.在一个方法声明中遵循限定的抛出声明数/ Follow the limit for the number of throws declarations in a method declaration [METRICS.TNOT-3]
18. Miscellaneous [MISC]
18-1.不使用一个对象去访问"static"字段或方法/ Do not use an object to access "static" fields or methods [MISC.AUO-1]
18-2.在'clone ()'方法中不要使用构造器/ Do not use constructors in the 'clone ()' method [MISC.CLNC-1]
18-3.在所有'clone ()'方法中调用'super.clone ()'/ Call 'super.clone ()' in all 'clone ()' methods [MISC.CLONE-1]
18-4.不要使用不赞成的APIs/ Do not use deprecated APIs [MISC.DPRAPI-1]
18-5.为所有'Serializable'类创建一个'serialVersionUID'/ Create a 'serialVersionUID' for all 'Serializable' classes [MISC.DUID-1]
18-6.声明"private"的常量字段为"final"/ Declare "private" constant fields "final" [MISC.FF-1]
18-7.不要使方法的局部变量和参数与类字段同名/ Do not give method local variables and parameters the same name as class fields [MISC.HMF-1]
18-8.以一个条件和增量语句声明"for"循环/ Declare "for" loops with a condition and an increment statement [MISC.PCIF-1]
18-9.重声明一个类仅用"abstract"方法和"static final"字段做为"interface"/ Redeclare a class with only "abstract" methods and "static final" fields as an "interface" [MISC.ASFI-2]
18-10.在一个非"public"类内不要声明构造器为"public"/ Do not declare "public" constructors in non-public classes [MISC.PCTOR-2]
18-11.仅仅在块的开始处添加声明/ Put declarations only at the beginning of blocks [MISC.PDBB-2]
18-12.避免使用"public static final"队列字段/ Avoid using "public static final" array fields [MISC.PSFA-2]
18-13.String分解用'StringTokenizer'代替'indexOf ()'或'substring ()'/ Use 'StringTokenizer' instead of 'indexOf ()' or 'substring ()' for String parsing [MISC.UST-2]
18-14.避免使用被依赖的包或类型/ Avoid using certain packages or types [MISC.APT-3]
18-15.返回空队列来代替"null"/ Return zero-length arrays instead of "null" [MISC.ARN-3]
18-16.为条件语句提供一个'{}'块/ Provide a '{}' block for conditional statements [MISC.BLK-3]
18-17.在"abstract"类内不要声明构造器为"public"/ Do not declare "public" constructors in "abstract" classes [MISC.NPAC-3]
18-18.确保"public"类有至少一个"public"或"protected"成员/ Ensure "public" classes have at least one "public" or "protected" member [MISC.PMPC-3]
18-19.如果需要精确的回复不要使用"float"和"double"/ Do not use "float" and "double" if exact answers are required [MISC.UBD-3]
18-20.不要使用 "break"和/或"continue"语句/ Do not use "break" and/or "continue" statements [MISC.CONTINUE-4]
18-21.不要从构造器调用非"final",非"static"和非"private"方法/ Do not call non-"final", non-"static" and non-"private" methods from constructors [MISC.CTOR-4]
18-22.在变量使用后尽可能声明变量终结/ Declare variables as close as possible to where they are used [MISC.DVCU-4]
18-23.声明局部变量为常量"final"/ Declare constant local variables "final" [MISC.FLV-4]
18-24.不要使用太多非"final" "static"字段/ Do not use too many non-"final" "static" fields [MISC.MSF-4]
18-25.避免string字面意义除了常量声明和调用System.out or System.err's 'print' or 'println'方法/ Avoid string literals except in constant declarations and calls to System.out or System.err's 'print' or 'println' methods [MISC.SL-4]
18-26.确保代码不包含TODO注释/ Ensure that code does not contain TODO comments [MISC.TODO-4]
18-27.不要对"Throwable"对象调用'printStackTrace()'方法/ Do not call the 'printStackTrace()' method of "Throwable" objects [MISC.ACPST-5]
18-28.不要对方法参数进行赋值/ Do not make assignments to method parameters [MISC.AFP-5]
18-29.避免使用"do-while"语句/ Avoid using "do-while" statements [MISC.DOWHILE-5]
18-30.使用"for"循环代替"while"循环/ Use "for" loops instead of "while" loops [MISC.PFL-5]
18-31.避免在单一个类中重复出现字面意义的string/ Avoid repeated string literals in a single class [MISC.RSL-5]
18-32.避免系统'print()'或'println()'的语句/ Avoid System 'print()' or 'println()' statements [MISC.SIO-5]
19. Naming Conventions [NAMING]
19-1.为getter方法预先以'get'命名/ Prepend 'get' to the names of getter methods [NAMING.GETA-1]
19-2.仅仅使用'is...'命名方法返回一个"boolean"/ Use 'is...' only for naming methods that return a "boolean" [NAMING.IRB-1]
19-3.不要使用一个Sun保留的包名/ Do not use a package name that is reserved by Sun [NAMING.RPKG-1]
19-4.在一个"interface"中使用大写字母命名所有字段/ Use all uppercase letters for the names of fields in an "interface" [NAMING.IFV-2]
19-5.为类使用一个约定的命名/ Use a naming convention for classes [NAMING.NCL-2]
19-6.为异常使用一个约定的命名/Use a naming convention for exceptions [NAMING.NE-2]
19-7.为非"static"字段使用一个约定的命名/Use a naming convention for non-"static" fields [NAMING.NIF-2]
19-8.为接口使用一个约定的命名/Use a naming convention for interfaces [NAMING.NITF-2]
19-9.为局部变量常使用一个约定的命名/Use a naming convention for local variables [NAMING.NLV-2]
19-10.为非"static"方法使用一个约定的命名/Use a naming convention for non-"static" methods [NAMING.NM-2]
19-11.为方法参数使用一个约定的命名/Use a naming convention for method parameters [NAMING.NMP-2]
19-12.为非"final" "static"字段使用一个约定的命名/Use a naming convention for non-"final" "static" fields [NAMING.NSF-2]
19-13.为"static"方法使用一个约定的命名/Use a naming convention for "static" methods [NAMING.NSM-2]
19-14.为"package"名使用一个约定的命名/Use a naming convention for "package" names [NAMING.PKG-2]
19-15.为setter方法预先以'set'命名/ Prepend 'set' to the names of setter methods [NAMING.SETA-2]
19-16.在"final" "static"字段命名中不要使用小写字母/ Do not use lowercase letters in "final" "static" field names [NAMING.USF-2]
19-17.预先以'is, can, has, have, are, was'来命名"boolean"getter方法/ Prepend 'is, can, has, have, are, was' to the names of "boolean" getter methods [NAMING.GETB-3]
19-18.避免类或接口命名超过14个字符的长度/ Avoid class or interface names which are more than 14 characters long [NAMING.LCIN-4]
19-19.为自变量使用匈牙利法则/ Use Hungarian notation for variables [NAMING.UHN-4]
19-20.使用常规的自变量名/ Use conventional variable names [NAMING.CVN-5]
19-21.为"abstract"类使用一个常规的命名/ Use a naming convention for "abstract" classes [NAMING.NACL-5]
19-22.为"final"局部自变量使用一个常规的命名/ Use a naming convention for "final" local variables [NAMING.NFL-5]
20. Object Oriented Programming [OOP]
20-1.避免"public"/"protected"/package-private字段/ Avoid "public"/"protected"/package-private fields [OOP.AF-1]
20-2.不要隐藏继承字段/ Do not hide inherited fields [OOP.AHF-1]
20-3.不要隐藏继承"static"成员方法/ Do not hide inherited "static" member methods [OOP.AHSM-2]
20-4.避免超过两层嵌套的匿名类/ Avoid more than two levels of nested inner classes [OOP.LEVEL-2]
20-5.不要覆写一个实例化的"private"类/ Do not override an instance "private" method [OOP.OPM-2]
20-6.在outer类中不要隐藏继承字段/ Do not hide fields in outer classes [OOP.HIF-3]
20-7.实现接口为非平凡或"abstract"/ Implement interfaces non-trivially or "abstract" [OOP.IIN-5]
21. Optimization [OPT]
21-1.当创建String对象去支持字面意义string时不要使用"new"关键字/ Do not use the "new" keyword when creating String objects to hold string literals [OPT.ACDO-1]
21-2.在"finally"块中关闭输入和输出资源/ Close input and output resources in "finally" blocks [OPT.CIO-1]
21-3.避免不必要的"instanceof"赋值/ Avoid unnecessary "instanceof" evaluations [OPT.UISO-1]
21-4.避免不必要的强制类型转换/ Avoid unnecessary casting [OPT.UNC-1]
21-5.不要通过新对象实例化来获取'Class'对象/ Do not get the 'Class' object through new object instantiation [OPT.AGC-2]
21-6.使用'System.arraycopy ()'代替使用一个循环来拷贝arrays/ Use 'System.arraycopy ()' instead of using a loop to copy arrays [OPT.IRB-2]
21-7.对非常量strings使用'StringBuffer'来代替'String'/ Use 'StringBuffer' instead of 'String' for non-constant strings [OPT.USB-2]
21-8.对非常量strings使用'String'来代替'StringBuffer'/ Use 'String' instead of 'StringBuffer' for constant strings [OPT.USC-2]
21-9.使用简短的赋值运算/ Use abbreviated assignment operators [OPT.AAS-3]
21-10.不要使用'Boolean'对象实例化/ Do not use 'Boolean' object instantiation [OPT.BOOLEAN-3]
21-11.返回单一化"boolean"/ Simplify "boolean" returns [OPT.BR-3]
21-12.在条件循环语句中不要调用方法/ Do not call methods in loop condition statements [OPT.CEL-3]
21-13.只有一个方法访问时不要使用"private"字段;改变他成为一个局部变量/ Do not use a "private" field that is accessed in only one method; change it to a local variable [OPT.CTLV-3]
21-14.定义初始的'ArrayList', 'HashMap', 'HashSet', 'Hashtable', 'Vector' and 'WeakHashMap'计算效率/ Define initial capacities for 'ArrayList', 'HashMap', 'HashSet', 'Hashtable', 'Vector' and 'WeakHashMap' [OPT.DIC-3]
21-15.避免对象实例化因为可能需要产生访问/ Avoid object instantiations that might need generated accessors [OPT.ICGA-3]
21-16.不要在一个循环体中实例化变量/ Do not instantiate variables in a loop body [OPT.LOOP-3]
21-17.同一个已知的编译时间值"static"一样声明"final"字段/ Declare "final" fields with a known compile time value as "static" [OPT.NSF-3]
21-18.对于一个字符的比较使用'charAt()'来代替'startsWith()'/ Use 'charAt()' instead of 'startsWith()' for one character comparisons [OPT.PCTS-3]
21-19.指定一个初始的'StringBuffer'容量/ Specify an initial 'StringBuffer' capacity [OPT.SB-3]
21-20.对于单一字符string串联使用单一引用代替双重引用/ Use single quotes instead of double quotes for single character string concatenation [OPT.STR-3]
21-21.不要在'java.lang.String'对象之上调用'toString()'/ Do not invoke 'toString()' on 'java.lang.String' object [OPT.STS-3]
21-22.不要在一个循环中调用"synchronized"方法/ Do not call a "synchronized" method in a loop [OPT.SYN-3]
21-23.在循环之外放置"try/catch/finally"块/ Place "try/catch/finally" blocks outside of loops [OPT.TRY-3]
21-24.不以"true"比较布尔变量/ Do not compare boolean variables with "true" [OPT.UEQ-3]
21-25.避免使用不可靠的非短路的逻辑/ Avoid questionable uses of non-short-circuit logic [OPT.USCL-3]
21-26.只要有可能就使用'stack'变量/ Use 'stack' variables whenever possible [OPT.USV-3]
21-27.为了实例化字段为"final"而构造访问的方法 Make accessor methods for instance fields "final" [OPT.MAF-4]
21-28.使用右位移运算来除去2的幂次方/ Use the right shift operator for division by powers of 2 [OPT.SDIV-4]
21-29.如果可能的话声明成员类为"static"/ Declare member classes "static" if possible [OPT.SI-4]
21-30.使用左位移运算来乘上2的幂次方/ Use the left shift operator for multiplication by powers of 2 [OPT.SMUL-4]
21-31.仅仅在接口中使用"instanceof"/ Use "instanceof" only on interfaces [OPT.INSOF-5]
21-32.在'toArray()'中使用集合大小作为array目标/ Use collection size for target array in 'toArray()' [OPT.TOARRAY-5]
22. Possible Bugs [PB]
22-1.避免不对齐的"else"语句/ Avoid dangling "else" statements [PB.ADE-1]
22-2.避免"try", "catch"和"finally"块体为空/ Avoid "try", "catch" and "finally" blocks with empty bodies [PB.AECB-1]
22-3.如果其他"return"在try-catch块内则避免"return"里有"finally"块/ Avoid "return"s inside "finally" blocks if there are other "return"s inside the try-catch block [PB.ARCF-1]
22-4.避免在一个"if"条件里赋值/ Avoid assignment within an "if" condition [PB.ASI-1]
22-5.避免条件表达式总是求一个常量的值/ Avoid conditional expressions that always evaluate to a constant value [PB.CC-1]
22-6.不要在'ComponentListener.componentResized()'中调用'setSize()'/ Do not call 'setSize()' in 'ComponentListener.componentResized()' [PB.DNCSS-1]
22-7.避免控制语句块体为空/ Avoid control statements with empty bodies [PB.EB-1]
22-8.确保IllegalArgumentException信息匹配代码逻辑/ Make sure the IllegalArgumentException message matches the code logic [PB.IIAE-1]
22-9.仅仅使用'main()'方法名作为方法的入口点/ Use the method name 'main()' only for the entry point method [PB.MAIN-1]
22-10.不要让类中的非构造方法同名/ Do not give non-constructor methods the same name as the class [PB.NAMING-1]
22-11.不要直接或间接的定义'Error'和'Throwable'的子集/ Do not define direct or indirect subclasses of 'Error' and 'Throwable' [PB.NDC-1]
22-12.避免超出范围的"char"比较/ Avoid out of range "char" comparisons [PB.OOR-1]
22-13.确保get/set方法访问了正确的变量/ Ensure get/set methods are accessing the correct variables [PB.SG-1]
22-14.确保"switch"语句没有包含排版/ Ensure "switch" statements do not contain typos [PB.TLS-1]
22-15.避免不能达到的"else if"和"else"状况/ Avoid unreachable "else if" and "else" cases [PB.UIF-1]
22-16.确保自变量转到Java包装类别没有包含排版/ Ensure that arguments passed to Java wrapper classes do not contain typos [PB.WT-1]
22-17.对于'java.util.Properties'对象避免'put, 'putAll'和'get'方法/ Avoid 'put, 'putAll' and 'get' methods of 'java.util.Properties' objects [PB.APPG-2]
22-18.对最低精度不要粗略的强制转换数据类型/ Do not cast primitive data types to lower precision [PB.CLP-2]
22-19.不要比较浮点类型/ Do not compare floating point types [PB.DCF-2]
22-20.对于总是返回false不要调用'equals()'方法/ Do not call 'equals()' methods that always return false [PB.EQUS-2]
22-21.不要在一个"for"循环体中给循环控制变量赋值/ Do not assign loop control variables in the body of a "for" loop [PB.FLVA-2]
22-22.确保覆写的方法名没有排版/ Ensure the overriding method name does not have a typo [PB.IMO-2]
22-23.在能够序列化的类中为'readResolve ()'和'writeReplace ()'方法分配"protected"的可见度/ Assign "protected" accessibility to 'readResolve ()' and 'writeReplace ()' methods in serializable classes [PB.MASP-2]
22-24.不要对'finalize()'方法负载/ Do not overload the 'finalize()' method [PB.OF-2]
22-25.确保方法自变量能够序列化/ Ensure method arguments are serializable [PB.ONS-2]
22-26.为每个"switch"语句提供"default:"/ Provide "default:" for each "switch" statement [PB.PDS-2]
22-27.避免字段和/或局部变量的自我赋值/初始化/ Avoid self assignments/initializations to fields and/or local variables [PB.SAFL-2]
22-28.避免空语句/ Avoid empty statements [PB.AES-3]
22-29.避免在"finally"块中有"throw"语句/ Avoid "throw" statements in "finally" blocks [PB.ATSF-3]
22-30.避免从未使用的循环变量/ Avoid unused loop variables [PB.AULV-3]
22-31.避免错乱的构造器自变量赋值/ Avoid confusing assignments to constructor arguments [PB.AWP-3]
22-32.不要使用"+"字符连续运算去连接数字;仅仅使用他来对数字相加/ Do not use the "+" string concatenation operator to concatenate numbers; use it only to add numbers [PB.DCP-3]
22-33.避免空的类/ Avoid empty classes [PB.EC-3]
22-34.在'equals()'方法执行时使用'getClass()'/ Use 'getClass()' in the 'equals()' method implementation [PB.EQL-3]
22-35.在'equals()'方法执行内部使用'instanceof'/ Use 'instanceof' within an 'equals()' method implementation [PB.EQL2-3]
22-36.确保因为不同的参数类型覆写的方法没有是非预料的协变/ Ensure overriding methods are not unintended covariants due to parameter type differences [PB.IMC-3]
22-37.确保"static" "final"字段是恒量的/ Ensure "static" "final" fields are immutable [PB.IMM-3]
22-38.不要调用'String.equals ("literal")' or 'String.equalsIgnoreCase("literal")'/ Do not call 'String.equals ("literal")' or 'String.equalsIgnoreCase("literal")' [PB.ISEM-3]
22-39.不要在多个嵌套"for"循环语句上对同个自变量增量或减量/ Do not increment or decrement on the same variable over multiple nested "for" loop statements [PB.JI-3]
22-40.避免类不可访问/ Avoid classes that are not accessible [PB.NACC-3]
22-41.不要定义'RuntimeException'的直接或间接子集/ Do not define direct or indirect subclasses of 'RuntimeException' [PB.NXRE-3]
22-42.确保正好一个类型有同样的名与文件名/ Ensure that exactly one type has the same name as the file name [PB.OCSF-3]
22-43.在"switch"语句的最后情形放置"default"/ Place "default" as the last case of the "switch" statement [PB.PDCL-3]
22-44.在一个"catch"子句中不要重抛出一个异常/ Do not rethrow an exception in a "catch" clause [PB.RTE-3]
22-45.一个错误的"case"不要使用一个"switch"语句/ Do not use a "switch" statement with a bad "case" [PB.SBC-3]
22-46.不要使用'=='或'!='比较对象/ Do not use '==' or '!=' to compare objects [PB.UEIC-3]
22-47.确保'Iterator.next()'方法实现抛出'NoSuchElementException'/ Ensure 'Iterator.next()' method implementations throw 'NoSuchElementException' [PB.CTNSE-4]
22-48.确保方法返回值被使用/ Ensure method return values are used [PB.NASSIG-4]
22-49.避免可疑的八进制溢出/ Avoid suspicious octal escapes [PB.OE-5]
22-50.确保类或接口有同名且文件声明为"public"/ Ensure that the class or interface that has the same name as the file is declared "public" [PB.PCSF-5]
23. Portability [PORT]
23-1.不要使用'System.getenv ()'/ Do not use 'System.getenv ()' [PORT.ENV-1]
23-2.不要刻板的编写'/n'或'/r'来分隔行/ Do not hard code '/n', or '/r' as a line separator [PORT.LNSP-1]
23-3.不要直接使用"java.awt.peer.*"接口/ Do not use "java.awt.peer.*" interfaces directly [PORT.PEER-1]
23-4.不要使用'Runtime.exec()'/ Do not use 'Runtime.exec()' [PORT.EXEC-3]
23-5.不要使用用户定义"native"方法/ Do not use user-defined "native" methods [PORT.NATV-3]
24. Security [SECURITY]
24-1.在'writeObject()'方法中不要让DataOutputStream通过二进制/ Do not pass byte arrays to DataOutputStream in the 'writeObject()' method [SECURITY.CBA-1]
24-2.使所有成员类"private"/ Make all member classes "private" [SECURITY.INNER-1]
24-3.不要对类对象名进行比较/ Do not compare Class objects by name [SECURITY.CMP-2]
24-4.不要使用匿名类/ Do not use inner classes [SECURITY.AUIC-3]
24-5.为了安全使你的'clone ()'方法为"final"/ Make your 'clone ()' method "final" for security [SECURITY.CLONE-3]
24-6.使你的类nondeserializeabl/ Make your classes nondeserializeable [SECURITY.DSER-5]
24-7.使你的类不能克隆/ Make your classes noncloneable [SECURITY.MCNC-5]
24-8.为所有'Serializable'类实现'readObject()'/ Implement 'readObject()' for all 'Serializable' classes [SECURITY.OROM-5]
24-9.不要依赖"package"范围/ Do not depend on "package" scope [SECURITY.PKG-5]
24-10.使你的类不能序列化/ Make your classes nonserializeable [SECURITY.SER-5]
25. Serialization [SERIAL]
25-1.避免类实现'Externalizable'但不要定义一个空自变量构造器/ Avoid classes that implement 'Externalizable' but do not define a no-argument constructor [SERIAL.ENNAC-2]
25-2.避免能够序列化的类在零自变量的构造器外继承一个超类/ Avoid serializable classes that extend a superclass without a zero-argument constructor [SERIAL.SNNAC-3]
25-3.对于"synchronized"不要声明'readObject()'方法/ Do not declare the 'readObject()' method as "synchronized" [SERIAL.SROS-3]
25-4.确保能够序列化的类是正确的/ Ensure Serializable classes are correct [SERIAL.NSFSC-4]
26. Servlets [SERVLET]
26-1.声明一个"public"构造器获取为空参数/ Declare a "public" constructor that takes no parameters [SERVLET.MDC-1]
26-2.把System.out.println或System.err.println的使用减少的最低/ Minimize use of System.out.println or System.err.println [SERVLET.SOP-2]
26-3.不要在Servlet类中使用'SingleThreadModel'/ Do not use 'SingleThreadModel' in Servlet classes [SERVLET.STM-2]
26-4.在Servlets中尽量减少同步/ Minimize synchronization in Servlets [SERVLET.SYN-2]
26-5.不要在Servlet类中使用JDBC代码/ Do not use JDBC code in Servlet classes [SERVLET.AJDBC-3]
26-6.不要使用'java.beans.Beans.instantiate ()'/ Do not use 'java.beans.Beans.instantiate ()' [SERVLET.BINS-3]
26-7.确保在web.xml file文件中Servlet类有他们自己的引用名Ensure Servlet classes have their own reference names in the web.xml file [SERVLET.SNM-3]
26-8.使用一个背景对象管理HTTP请求参数/ Use a Context Object to manage HTTP request parameters [SERVLET.UCO-4]
27. Struts Framework [STRUTS]
27-1.在一个表格bean中每个字段都应该有适当的getter和setter方法/ Each field in a form bean should have an appropriate getter and setter method [STRUTS.FIELDS-3]
27-2.仅仅在表格beans里包含getter和setter方法/ Include only getter and setter methods in form beans [STRUTS.FORM-3]
27-3.不要在Struts Action类中声明实例变量/ Do not declare instance variables in Struts Action classes [STRUTS.INST-3]
27-4.不要在Struts代码中构造任何'getParameter'调用/ Do not make any calls to 'getParameter' in Struts code [STRUTS.PARAM-4]
28. Threads & Synchronization [TRS]
28-1.避免调用'Thread.resume()', 'Thread.stop()', 'Thread.suspend()',或'Runtime.runFinalizersonExit()'/ Avoid calling 'Thread.resume()', 'Thread.stop()', 'Thread.suspend()', or 'Runtime.runFinalizersonExit()' [TRS.THRD-1]
28-2.给线程的子集一个'run ()'方法/ Give subclasses of Thread a 'run ()' method [TRS.MRUN-2]
28-3.确保'wait()', 'notify()'和'notifyAll()'被调用于一个对象且在他们的方法范围内明确的被同步/ Ensure 'wait()', 'notify()' and 'notifyAll()' are invoked on an object that is clearly synchronized in its enclosing method scope [TRS.NSYN-2]
28-4.仅仅在一个"while"或"do-while"循环中调用'wait ()'/ Call 'wait ()' only inside a "while" or "do-while" loop [TRS.UWIL-2]
28-5.使用'wait()'和'notifyAll()'代替轮流检测的循环/ Use 'wait()' and 'notifyAll()' instead of polling loops [TRS.UWNA-2]
28-6.不要使用'notify()';使用'notifyAll()'来代替/ Do not use 'notify()'; use 'notifyAll()' instead [TRS.ANF-3]
28-7.不要使用'java.lang.ThreadGroup'类型的变量/ Do not use variables of type 'java.lang.ThreadGroup' [TRS.AUTG-3]
28-8.不要使用'Thread.yield'/ Do not use 'Thread.yield' [TRS.AUTY-3]
28-9.不要从一个"synchronized"方法中调用一个"synchronized"方法引起死锁/ Do not cause deadlocks by calling a "synchronized" method from a "synchronized" method [TRS.CSFS-3]
28-10.不要在一个继承于'Thread'的类的构造器里调用'start()'/ Do not call 'start()' inside the constructors of classes that extend 'Thread' [TRS.CSTART-3]
28-11.不要使用"Double Check Locking Pattern"/ Do not use "Double Check Locking Pattern" [TRS.DCL-3]
28-12.不要捕获'IllegalMonitorStateException'/ Do not catch 'IllegalMonitorStateException' [TRS.IMSE-3]
28-13.类实现'java.lang.Runnable'时不要调用'run()'方法/ Do not call 'run()' methods of classes implementing 'java.lang.Runnable' [TRS.IRUN-3]
28-14.不要同步非"final"字段/ Do not synchronize on non-"final" fields [TRS.SOUF-3]
28-15.避免缓慢初始化,那是不安全的线程/ Avoid lazy initializations that are not thread-safe [TRS.ILI-4]
28-16.不要在方法声明中使用"synchronized" modifier/ Do not use the "synchronized" modifier in the method declaration [TRS.NSM-5]
28-17.在方法中使用"synchronized"要实现'Runnable.run()'/ Use the "synchronized" modifier on methods that implement 'Runnable.run()' [TRS.RUN-5]
29. Unused Code [UC]
29-1.避免无用的局部变量 /Avoid unused local variables [UC.AUV-2]
29-2.避免对从未读取的变量赋值/ Avoid assignments to variables that are never read [UC.AVNR-2]
29-3.避免不使用的"private"字段/ Avoid unused "private" fields [UC.PF-2]
29-4.避免不使用的"private"方法/ Avoid unused "private" methods [UC.PM-2]
29-5.在"catch"块中使用捕获异常/ Use a caught exception in the "catch" block [UC.UCATCH-2]
29-6.避免不使用"import"的语句/ Avoid unused "import" statements [UC.UIMPORT-2]
29-7.避免不使用的参数/ Avoid unused parameters [UC.UP-2]
29-8.避免不使用的"private"类或接口/ Avoid unused "private" classes or interfaces [UC.UPC-2]
29-9.避免空的static初始化/ Avoid empty static initializers [UC.AESTAT-3]
29-10.避免不使用的标签/ Avoid unused labels [UC.AUL-3]
29-11.不要明确的"import"java.lang.*中的"package"/ Do not explicitly "import" the java.lang.* "package" // [UC.DIL-3]
29-11.避免空的'finalize()'方法 /Avoid empty 'finalize()' methods [UC.EF-3]
29-12.避免空的"synchronized" 语句/ Avoid empty "synchronized" statements [UC.SNE-3]
29-13.避免不必要的if语句/ Avoid unnecessary 'if' statements [UC.UCIF-3]
29-14.避免在"void"方法最后使用不必要的"return"语句/ Avoid unnecessary "return" statement at the end of "void" methods [UC.VR-3]
29-14.确保使用的类没有明确继承'java.lang.Object'/ Ensure that classes do not explicitly extend 'java.lang.Object' [UC.AEEO-4] /////
29-15.避免多余的throw子句/ Avoid redundant throw clauses [UC.ARTD-4]
29-16.避免不必要的"boolean"比较/ Avoid unnecessary "boolean" comparisons [UC.BCMP-4]
29-17.不要从已经包含当前类的包里导入类/ Do not import classes from the package that contains the current class [UC.PIMPORT-4]
29-18.避免方法仅仅调用覆写的实现(超类实现)/ Avoid methods that only call the overridden implementation (superclass implementation) [UC.SO-4]
29-19.避免在一个"interface"中不必要的modifiers / Avoid unnecessary modifiers in an "interface" [UC.AAI-2]
30. Security (License Required) [SLR]
30-1.不要在'writeObject()'方法中通过可变的对象去'DataOutputStream'/ Do not pass mutable objects to 'DataOutputStream' in the 'writeObject()' method [SLR.CMO-1]
30-2.不要在'main'方法外部设置自定义的安全管理/ Do not set custom security managers outside of 'main' method [SLR.DSSM-1]
30-3.使用'java.security.SecureRandom'来代替'java.util.Random'或'Math.random()/ Use 'java.security.SecureRandom' instead of 'java.util.Random' or 'Math.random()' [SLR.SRD-1]
30-4.不要访问系统属性/ Do not access system properties [SLR.SYSP-1]
30-5.不要定义自定义的类装载器/ Do not define custom class loaders [SLR.CL-2]
30-6.可能的话使用类的SSL-enabled version/ Use the SSL-enabled version of classes when possible [SLR.USC-2]
30-7.不要使用static集合/ Do not use static Collections [SLR.ASC-3]
30-8.检查实例化的'ClassLoader'对象/ Inspect instantiations of 'ClassLoader' objects [SLR.CLI-3]
30-9.除了'loadClass()'不要覆写任何'ClassLoader'方法/ Do not override any 'ClassLoader' method except 'loadClass()' [SLR.CLO-3]
30-10.不要定义自定义的'SecurityManager'/ Do not define custom 'SecurityManager' [SLR.DCSM-3]
30-11.确保所有异常被记入标准日志或重新抛出/ Ensure all exceptions are either logged with a standard logger or rethrown [SLR.LGE-3]
30-12.不要声明字段为"public" "static" "final" 的'Collection'或'Map'对象/ Do not declare fields as "public" "static" "final" 'Collection' or 'Map' objects [SLR.PSFC-3]
30-13.避免方法返回值可能会暴露他内部的描述/ Avoid methods that might expose internal representations by returning arrays [SLR.RA-3]
30-14.检查序列化对象的实例字段以确保将不会暴露敏感信息/ Inspect instance fields of serializable object to make sure it would not expose sensitive information [SLR.SIF-3]
30-15.确保具有恰当的安全管理设置 //Ensure that an appropriate security manager is set [SLR.SSM-3]
30-16.检查'Date''Time'对象和'System.currentTimeMillis()'方法调用的使用/ Inspect usage of 'Date', 'Time' objects and 'System.currentTimeMillis()' method invocations [SLR.ADT-5]
30-16.从'java.lang.Class' 对象中检查'getName()'的使用/ Inspect usage of 'getName()' from 'java.lang.Class' object [SLR.AUG-5]
30-17.检查'Random'对象或'Math.random()'方法能够揭示恶意代码所在区域/ Inspect 'Random' objects or 'Math.random()' methods that could indicate areas where malicious code has been placed [SLR.RDM-5]
30-18.避免使用main()方法/ Avoid 'main()' methods [SLR.UMAIN-5]
31. Security Policy Rules (License Required) [SPR]
31-1.确保所有敏感的方法调用都被记入日志/ Ensure all sensitive method invocations are logged [SPR.ENFL-2]
31-2.保持所有访问控制方法能集中以加强一致性/ Keep all access control methods centralized to enforce consistency [SPR.CACM-3]
31-3.保持所有鉴定方法能集中以加强一致性/ Keep all authentication methods centralized to enforce consistency [SPR.CAM-3]
31-4.调用鉴定方法来加强一致性/ Call authentication methods to enforce consistency [SPR.PAC-4]
31-5.调用访问控制方法来加强一致性/ Call access control methods to enforce consistency [SPR.PACC-4]
31-6.为了防止应用程序泄露敏感信息,不要允许输出异常信息/ Do not pass exception messages into output in order to prevent the application from leaking sensitive information [SPR.PEO-4]
31-7.用一个变量函数封装所有危险数据的返回方法/ Encapsulate all dangerous data returning methods with a validation function [SPR.VPPD-4]
32. Web Security (License Required) [WSLR]
32-1.不要在一个web组件中访问类装载器/ Do not access the class loader in a web component [WSLR.ACL-3]
32-2.不要在web组件中使用AWT类/ Do not use AWT classes in Web components [WSLR.AWT-3]
32-3.不要在一个web组件中停止JVM/ Do not stop the JVM in a web component [WSLR.JVM-3]
32-4.不要在一个web组件中调用'Socket.setSocketImplFactory()'或'URL.setURLStreamHandlerFactory()'/ Do not call 'Socket.setSocketImplFactory()' or 'URL.setURLStreamHandlerFactory()' in a web component [WSLR.NSF-3]
32-5.不要在一个web组件中使用static字段/ Do not use static fields in a web component [WSLR.SF-3]
32-6.不要在一个web组件中改变'java.lang.System'的输入流/ Do not change the input streams of 'java.lang.System' in a web component [WSLR.SIS-3]
32-7.不要在一个web组件中询问或更改按却策略信息/ Do not interrogate or modify security policy information in a web component [WSLR.SPI-3]
32-8.不要在一个web组件中使用服务sockets/ Do not use server sockets in web components [WSLR.SS-3]
32-9.不要在一个web组件中调用'System.setProperty()'/ Do not call 'System.setProperty()' in a web component [WSLR.SSP-3]
32-10.不要在一个web组件中使用线程/ Do not use threads in web components [WSLR.THR-3]
二、内置与自定义的标准组
1. 内置的Jtest配置/Built-in Jtest Configurations
Jtest
包含如下的重新装配(内置)
Jtest
配置。
/Jtest includes the following preconfigured (built-in) Jtest Configurations:
编码标准组/Coding Standards group
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
SUN
著
《
JavaTM
编程语言代码规范》
/Code Conventions for the JavaTM Programming Language by Sun
|
All selected resources
|
基于
SUN
微系统公司的代码规范准则
Rules based on Sun Microsystems' Code Conventions for the Java Programming Language (available at http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html)
|
无
None
|
无
None
|
Alur, Cupr
和
Malks
著《
J2EE
核心模式》
/Core J2EE Patterns by Alur, Cupri and Malks
|
All selected resources
|
Rules based on Deepak Alur, John Cupri, and Dan Malks' Core J2EE Patterns:Best Practices and Design Strategies book
|
无
None
|
无
None
|
Joshua Bloch著
《高效JAVA》
/Effective Java by Joshua Bloch
|
All selected resources
|
Rules based on Joshua Bloch's Effective Java book
|
无
None
|
无
None
|
Scott Ambler著
《Java编码规范》
/Elements of Java Style by Scott Ambler
|
All selected resources
|
Rules based on Scott Ambler's Elements of Java Style book
|
无
None
|
无
None
|
Jtest6.0
版本后新规则
/New Rules Since Jtest 6.0
|
All selected resources
|
Rules added since Jtest 6.0
|
无
None
|
无
None
|
Parasoft
推荐的规则
/Parasoft's Recommended Rules
|
All selected resources
|
The basic set of Jtest coding standards; rules are based on various Java resources
|
无
None
|
无
None
|
Security - Priority 1 - Must Have
|
All selected resources
|
Rules that identify the most critical security vulnerabilities Requires optional Security Analysis license.
|
无
None
|
无
None
|
Security - Priority 2 - Should Have
|
All selected resources
|
Security - Priority 1 - Must Have rules, plus additional rules that identify a wider range of security vulnerabilities. Requires optional Security Analysis license.
|
无
None
|
无
None
|
Security - Priority 3 - Nice to Have
|
All selected resources
|
Security - Priority 2 - Should Have rules, plus additional rules that provide a more comprehensive security assessment. Requires optional Security Analysis license.
|
无
None
|
无
None
|
Ambysoft
著
《编写健壮的
Java
代码》
Writing Robust Java Code by Ambysoft
|
All selected resources
|
Rules based on Scott Ambler and Ambysoft's Writing Robust Java Code publication (available athttp://www.ambysoft.com/javaCodingStandards.pdf"> http://www.ambysoft.com/javaCodingStandards.pdf).
|
无
None
|
无
None
|
Code Smells (TDD)
|
All selected resources
|
Rules based on the Code Smells document (available at
http://xp.c2.com/CodeSmell.html
) by Kent Beck and Martin Fowler.
|
无
None
|
无
None
|
2. 测试驱动开发(TDD)/Test Driven Development (TDD)
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
测试驱动开发
/TDD
|
All selected resources
|
Rules based on the Code Smells document (available at http://xp.c2.com/CodeSmell.html), rules that check whether the JUnit test classes are comprehensive for the tested class, and rules from the Critical Rules (Must Have) Jtest Configuration.
|
None
|
With code coverage and Design by Contract checking
Reports an error if coverage is not 90% or higher.
|
Contract著《测试驱动开发设计》TDD with Design by Contract
|
All selected resources
|
All rules from the TDD Jtest Configuration, plus rules that determine if code contains appropriate DbC contracts.
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
Reports an error if coverage is not 90% or higher.
|
3. Parasoft的自动错误预防组/Parasoft's AEP group
一般集合/General set
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
临界的准则
/Critical Rules (Must Have)
|
All selected resources
|
Rules Parasoft recommends for all groups implementing coding standards; these are critical Java development rules proven to make immediate and significant improvement to code reliability, functionality, security, and performance
|
None
|
None
|
推荐的准则
/Recommended Rules (Should Have)
|
All selected resources
|
Rules Parasoft recommends for groups who have already implemented the Critical Rules This set includes Critical Rules (Must Have)
|
None
|
None
|
补充的准则
/Supplemental Rules (Nice to Have)
|
All selected resources
|
Rules Parasoft recommends for groups who have already implemented the Critical Rules and Recommended Rules
This set includes Recommended Rules (Should Have)
|
None
|
None
|
阶段 I 规定
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
每夜构建
/Build Machine Nightly (standards)
|
Tests all code modified since the specified cutoff date Designed for automated nightly testing
|
Same as Parasoft's Recommended Rules
|
None
|
None
|
开发者
/Developer (standards)
|
Tests only lines of code last modified by the user since the specified cutoff date
Designed for automated nightly testing
|
Same as Parasoft's Recommended Rules
|
None
|
None
|
阶段 II 规定
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
每夜构建
/Build Machine Nightly (standards + generation + execution)
|
Tests all code modified since the specified cutoff date. Designed for automated nightly testing
|
Same as Parasoft's Recommended Rules
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
开发者
/Developer (standards + execution)
|
Tests only lines of code last modified by the user since the specified cutoff date Designed for automated nightly testing
|
Same as Parasoft's Recommended Rules
|
None The Build Machine Nightly tests will generate test classes and add them to source control. This configuration will access those generated test classes
|
With code coverage and Design by Contract checking
|
4. Scope Examples group
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
测试所有文件
/Test All Files
|
All selected resources
|
Same as Parasoft's Recommended Rules
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
测试局部被更改处
/Test Locally Modified
|
Tests only files and lines of code added or modified on the local machine
|
Same as Parasoft's Recommended Rules
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
测试安装后的更改
/Test Modified Since Installation
|
Tests all files and lines of code added or modified since the date Jtest was installed
|
Same as Parasoft's Recommended Rules
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
5. 其他配置/Other configurations
名称
/Name
|
范围
/Scope
|
检测的标准
/Standards Checked
|
测试用例生成
/Test Case Generation
|
测试用例执行
/Test Case Execution
|
检测编码标准
/Check Coding Standards
|
All selected resources
|
Same as Parasoft's Recommended Rules
|
None
|
None
|
检测标准和运行单元测试
/Check Standards and Run Unit Tests
|
All selected resources
|
Same as Parasoft's Recommended Rules
|
None
|
With code coverage and Design by Contract checking
|
默认配置
/Default Configuration
|
All selected resources
|
Same as Parasoft's Recommended Rules, but does not check rules from the Global Static Analysis category
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
强制更新单元测试
/Force Regenerate Unit Tests
|
All selected resources
|
None
|
For classes without existing test classes, classes with out-of-date test classes, and classes with up-to-date test classes
|
None
|
生成和运行单元测试
/Generate and Run Unit Tests
|
All selected resources
|
None
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
生成单元测试
/Generate Unit Tests
|
All selected resources
|
None
|
For classes without existing test classes and classes with out-of-date test classes
|
None
|
运行所有测试
/Run All Tests
|
All selected resources
|
Yes, same as Parasoft's Recommended Rules
|
For classes without existing test classes and classes with out-of-date test classes
|
With code coverage and Design by Contract checking
|
运行单元测试
/Run Unit Tests
|
All selected resources
|
None
|
None
|
With code coverage and Design by Contract checking
|
6. 自定义编码标准分析:概要 /Customizing coding standard analysis: overview
Jtest提供多种途径,为你独特的需求和偏好制作编码标准分析。
/Jtest provides a variety of ways to tailor coding standard analysis to your unique needs and preferences.
配置编码标准分析设置/Configuring coding standard analysis settings
编码标准分析能通过多种不同途径自定义。使用如下表的介绍,以确定如何达成你想要的自定义效果。
/Coding standard analysis can be customized in a variety of different ways. Use the following table as a reference to determine how to achieve the customization effect you are seeking:
Desired Customization
希望的自定义
|
Required Action
必要的操作
|
Reference
介绍
|
在编码标准分析期间测定正确的被检测规则
/
Determine exactly what rules are checked during coding standard analysis
|
Change the rules settings in the Coding Standards tab of the Jtest Configuration(s) you want to apply
|
Modifying coding standard analysis parameters
|
限定编码标准错误报告的每一个规则数量
/
Limit the number of coding standard errors reported per rule
|
Change the Limit maximum number of errors reported per rule to setting in the Coding Standards tab of the Jtest Configuration(s) you want to apply
|
Modifying coding standard analysis parameters
|
自定义内置规则
/
Customize the built-in rules
|
Edit rule parameters in the Coding Standards tab of the Test Configurations dialog
|
Creating custom coding standard rules
|
更改规则种类
/
Change rule categories
|
Define the changes with rule mappings
|
Modifying rule categories, IDs, headers, and severity levels
|
更改规则严格设置
/
Change rule severity settings
|
Define the changes with rule mappings
|
Modifying rule categories, IDs, headers, and severity levels
|
更改规则标题
/
Change rule headers
|
Define the changes with rule mappings
|
Modifying rule categories, IDs, headers, and severity levels
|
创建新的规则种类
/
Create new rule categories
|
Define the changes with rule mappings
|
Modifying rule categories, IDs, headers, and severity levels
|
防止
Jtest
报告附加出现的特殊编码标准错误
/
Prevent Jtest from reporting additional occurrences of a specific coding standard error
|
Suppress the messages using GUI controls or by adding special suppression comments in your source code
|
Suppressing coding standard errors
|