JAVA 静态代码分析--规范检查-checkstyle

简介

插件的用途就不多说了,主要用于JAVA代码规范检测,默认用的sun的一套检查标准,也可以自己定义。这里讲的版本是5.6

在eclipse中安装checkstyle

help--> eclipse marketplace 搜索 checkstyle,安装即可。

用checkstyle检测

选择要检测的项目,右键点击checkstyle--->check code with checkstyle即可
JAVA 静态代码分析--规范检查-checkstyle_第1张图片

会生成两项报告,点击windows-->show view ,找到checkstyle即可

JAVA 静态代码分析--规范检查-checkstyle_第2张图片

生成的结果如下:

JAVA 静态代码分析--规范检查-checkstyle_第3张图片

还有一个饼状图

JAVA 静态代码分析--规范检查-checkstyle_第4张图片

修改checkstyle参数

点击eclpse-->windows-->preferences

JAVA 静态代码分析--规范检查-checkstyle_第5张图片

可以看到,目前使用的是sun checks,点击configure,会发现,The configuration can not be edited.

也就是自带的两个内置规则是不能编辑的,于是我们copy出一份自己的规则,点击copy,起个名字,确认即可。

JAVA 静态代码分析--规范检查-checkstyle_第6张图片

再次打开,就可编辑了。

例如我们之前检测结果中,问题最大的一项是line is longer than X characters,这里默认值是80个字符,有点太短了,我

把它改成100,找到Size Violations,离得 max line length,打开,默认是80,改成100即可。

JAVA 静态代码分析--规范检查-checkstyle_第7张图片

去掉对某个文件的统计

实际操作中,由于项目中包含一个.ttc的字库,导致统计结果中几乎被这个文件占掉了一半,可以右键点击这个文件,-->checkstyle-->clear checkstyle violation,
统计列表随机跟着改变。

各种检查提示的解释


utility classes should not have a public or default constructor

还会有提示:All methods are static. Consider using Singleton instead.Alternatively,you could add a private constructor or make the class abstract to silence this warning.
工具类不应该有默认或者公共的构造函数,也就是说这个类里可能方法都是static,那就不需要构造它的实例,因此应该给加一个private的构造函数,就不会报这个错了。

a class which only has private constructors should be final

例如上一个,加了private构造函数,又会出这个,把class设置成final即可。

Array brackets at illegal positon

String array[] = {}; 改成

String[] array = {};即可,应该是指位置不标准。

conditional logic can be removed

例如:

if ("post".equalsIgnoreCase(method)) {
return true;
} else {
return false;
}

会报错,conditional logic can be removed,条件逻辑可以删掉,改成如下方式:

return "post".equalsIgnoreCase(method);

即可,比较简洁

X is not followed by whitespace

符号的左右要有空格

X modifier out of order with the JLS suggestions

是修饰符顺序不符合标准。例如:
public final static String SAFE_EVENT_AUDIT_RECORD = "安全事件类";
改成:
public static final String SAFE_EVENT_AUDIT_RECORD = "安全事件类";
即可

Name ''X'' must match pattern ''X''.

要求变量必须符合正则表达式定义的规则,
例如变量: must match pattern '^[a-z][a-zA-Z0-9]*$'
变量必须小写字母开头,可以包含大写字母和数字,但是不能包含下划线
这里如果需要改名,可以使用ECLIPSE的重新命名功能进行批量修改,快捷键是ALT + SHIFT + R
常量:^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
常量大写字母开头,包含_和数字。

参数含义


来自:http://checkstyle.sourceforge.net/availablechecks.html

AbstractClassName Ensures that the names of abstract classes conforming to some regular expression.
AnnotationUseStyle This check controls the style with the usage of annotations.
AnonInnerLength Checks for long anonymous inner classes.
ArrayTrailingComma Checks if array initialization contains optional trailing comma.
ArrayTypeStyle Checks the style of array type definitions.
AvoidInlineConditionals Detects inline conditionals.
AvoidNestedBlocks Finds nested blocks.
AvoidStarImport Check that finds import statements that use the * notation.
AvoidStaticImport Check that finds static imports.
BooleanExpressionComplexity Restricts nested boolean operators (&&, ||, &, | and ^) to a specified depth (default = 3).
ClassDataAbstractionCoupling This metric measures the number of instantiations of other classes within the given class.
ClassFanOutComplexity The number of other classes a given class relies on.
ClassTypeParameterName Checks that class type parameter names conform to a format specified by the format property.
ConstantName Checks that constant names conform to a format specified by the format property.
CovariantEquals Checks that if a class defines a covariant method equals, then it defines method equals(java.lang.Object).
CyclomaticComplexity Checks cyclomatic complexity against a specified limit.
DeclarationOrder Checks that the parts of a class or interface declaration appear in the order suggested by the Code Conventions for the Java Programming Language.
DefaultComesLast Check that the default is after all the cases in a switch statement.
DescendantToken Checks for restricted tokens beneath other tokens.
DesignForExtension Checks that classes are designed for inheritance.
EmptyBlock Checks for empty blocks.
EmptyForInitializerPad Checks the padding of an empty for initializer; that is whether a space is required at an empty for initializer, or such spaces are forbidden.
EmptyForIteratorPad Checks the padding of an empty for iterator; that is whether a space is required at an empty for iterator, or such spaces are forbidden.
EmptyStatement Detects empty statements (standalone ';').
EqualsAvoidNull Checks that any combination of String literals with optional assignment is on the left side of an equals() comparison.
EqualsHashCode Checks that classes that override equals() also override hashCode().
ExecutableStatementCount Restricts the number of executable statements to a specified limit (default = 30).
ExplicitInitialization Checks if any class or object member explicitly initialized to default for its type value (null for object references, zero for numeric types and char and false for boolean.
FallThrough Checks for fall through in switch statements Finds locations where a case contains Java code - but lacks a break, return, throw or continue statement.
FileLength Checks for long source files.
FileTabCharacter Checks to see if a file contains a tab character.
FinalClass Checks that class which has only private ctors is declared as final.
FinalLocalVariable Ensures that local variables that never get their values changed, must be declared final.
FinalParameters Check that method/constructor/catch/foreach parameters are final.
GenericWhitespace Checks that the whitespace around the Generic tokens < and > are correct to the typical convention.
Header Checks the header of the source against a fixed header file.
HiddenField Checks that a local variable or a parameter does not shadow a field that is defined in the same class.
HideUtilityClassConstructor Make sure that utility classes (classes that contain only static methods) do not have a public constructor.
IllegalCatch Catching java.lang.Exception, java.lang.Error or java.lang.RuntimeException is almost never acceptable.
IllegalImport Checks for imports from a set of illegal packages.
IllegalInstantiation Checks for illegal instantiations where a factory method is preferred.
IllegalThrows Throwing java.lang.Error or java.lang.RuntimeException is almost never acceptable.
IllegalToken Checks for illegal tokens.
IllegalTokenText Checks for illegal token text.
IllegalType Checks that particular class are never used as types in variable declarations, return values or parameters.
ImportControl Check that controls what packages can be imported in each package.
ImportOrder Ensures that groups of imports come in a specific order.
Indentation Checks correct indentation of Java Code.
InnerAssignment Checks for assignments in subexpressions, such as in String s = Integer.toString(i = 2);.
InnerTypeLast Check nested (internal) classes/interfaces are declared at the bottom of the class after all method and field declarations.
InterfaceIsType Implements Bloch, Effective Java, Item 17 - Use Interfaces only to define types.
JUnitTestCase Ensures that the setUp(), tearDown()methods are named correctly, have no arguments, return void and are either public or protected.
JavaNCSS This check calculates the Non Commenting Source Statements (NCSS) metric for java source files and methods.
JavadocMethod Checks the Javadoc of a method or constructor.
JavadocPackage Checks that all packages have a package documentation.
JavadocStyle Custom Checkstyle Check to validate Javadoc.
JavadocType Checks the Javadoc of a type.
JavadocVariable Checks that a variable has Javadoc comment.
LeftCurly Checks the placement of left curly braces on types, methods and other blocks:
LineLength Checks for long lines.
LocalFinalVariableName Checks that local final variable names conform to a format specified by the format property.
LocalVariableName Checks that local, non-final variable names conform to a format specified by the format property.
MagicNumber Checks for magic numbers.
MemberName Checks that instance variable names conform to a format specified by the format property.
MethodCount Checks the number of methods declared in each type.
MethodLength Checks for long methods.
MethodName Checks that method names conform to a format specified by the format property.
MethodParamPad Checks the padding between the identifier of a method definition, constructor definition, method call, or constructor invocation; and the left parenthesis of the parameter list.
MethodTypeParameterName Checks that class type parameter names conform to a format specified by the format property.
MissingCtor Checks that classes (except abstract one) define a ctor and don't rely on the default one.
MissingDeprecated This class is used to verify that both the
MissingOverride This class is used to verify that the
MissingSwitchDefault Checks that switch statement has "default" clause.
ModifiedControlVariable Check for ensuring that for loop control variables are not modified inside the for block.
ModifierOrder Checks that the order of modifiers conforms to the suggestions in the Java Language specification, sections 8.1.1, 8.3.1 and 8.4.3.
MultipleStringLiterals Checks for multiple occurrences of the same string literal within a single file.
MultipleVariableDeclarations Checks that each variable declaration is in its own statement and on its own line.
MutableException Ensures that exceptions (defined as any class name conforming to some regular expression) are immutable.
NPathComplexity Checks the npath complexity against a specified limit (default = 200).
NeedBraces Checks for braces around code blocks.
NestedForDepth Restricts nested for blocks to a specified depth (default = 1).
NestedIfDepth Restricts nested if-else blocks to a specified depth (default = 1).
NestedTryDepth Restricts nested try-catch-finally blocks to a specified depth (default = 1).
NewlineAtEndOfFile Checks that there is a newline at the end of each file.
NoClone Checks that the clone method is not overridden from the Object class.
NoFinalizer Checks that no method having zero parameters is defined using the name finalize.
NoWhitespaceAfter Checks that there is no whitespace after a token.
NoWhitespaceBefore Checks that there is no whitespace before a token.
OneStatementPerLine Checks there is only one statement per line.
OperatorWrap Checks line wrapping for operators.
OuterTypeFilename Checks that the outer type name and the file name match.
OuterTypeNumber Checks for the number of defined types at the "outer" level.
PackageAnnotation This check makes sure that all package annotations are in the package-info.java file.
PackageDeclaration Ensures there is a package declaration and (optionally) in the correct directory.
PackageName Checks that package names conform to a format specified by the format property.
ParameterAssignment Disallow assignment of parameters.
ParameterName Checks that parameter names conform to a format specified by the format property.
ParameterNumber Checks the number of parameters that a method or constructor has.
ParenPad Checks the padding of parentheses; that is whether a space is required after a left parenthesis and before a right parenthesis, or such spaces are forbidden, with the exception that it does not check for padding of the right parenthesis at an empty for iterator.
RedundantImport Checks for imports that are redundant.
RedundantModifier Checks for redundant modifiers in interface and annotation definitions.
RedundantThrows Checks for redundant exceptions declared in throws clause such as duplicates, unchecked exceptions or subclasses of another declared exception.
Regexp A check that makes sure that a specified pattern exists (or not) in the file.
RegexpHeader Checks the header of the source against a header file that contains a
RegexpMultiline Implementation of a check that looks that matches across multiple lines in any file type.
RegexpSingleline Implementation of a check that looks for a single line in any file type.
RegexpSinglelineJava Implementation of a check that looks for a single line in Java files.
RequireThis Checks that code doesn't rely on the "this" default.
ReturnCount Restricts return statements to a specified count (default = 2).
RightCurly Checks the placement of right curly braces.
SimplifyBooleanExpression Checks for overly complicated boolean expressions.
SimplifyBooleanReturn Checks for overly complicated boolean return statements.
StaticVariableName Checks that static, non-final variable names conform to a format specified by the format property.
StrictDuplicateCode Performs a line-by-line comparison of all code lines and reports duplicate code if a sequence of lines differs only in indentation.
StringLiteralEquality Checks that string literals are not used with == or !=.
SuperClone Checks that an overriding clone() method invokes super.clone().
SuperFinalize Checks that an overriding finalize() method invokes super.finalize().
SuppressWarnings This check allows you to specify what warnings that
SuppressWarningsHolder This check allows for finding code that should not be reported by Checkstyle
ThrowsCount Restricts throws statements to a specified count (default = 1).
TodoComment A check for TODO comments.
TrailingComment The check to ensure that requires that comments be the only thing on a line.
Translation The TranslationCheck class helps to ensure the correct translation of code by checking property files for consistency regarding their keys.
TypeName Checks that type names conform to a format specified by the format property.
TypecastParenPad Checks the padding of parentheses for typecasts.
UncommentedMain Detects uncommented main methods.
UnnecessaryParentheses Checks if unnecessary parentheses are used in a statement or expression.
UnusedImports Checks for unused import statements.
UpperEll Checks that long constants are defined with an upper ell.
VisibilityModifier Checks visibility of class members.
WhitespaceAfter Checks that a token is followed by whitespace, with the exception that it does not check for whitespace after the semicolon of an empty for iterator.
WhitespaceAround Checks that a token is surrounded by whitespace.
WriteTag Outputs a JavaDoc tag as information.


参考:

JAVA 代码分析 http://www.oschina.net/question/129540_23043

http://darkranger.iteye.com/blog/657737

官网 http://checkstyle.sourceforge.net/

http://www.51testing.com/html/34/106134-92594.html

你可能感兴趣的:(java)