Checkstyle配置例子
<?xml?version="1.0"?>
??2<!DOCTYPE?module?PUBLIC
??3????"-//Puppy?Crawl//DTD?Check?Configuration?1.2//EN"
??4????"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
??5
??6<!--
??7
??8??Checkstyle?configuration?that?checks?the?sun?coding?conventions?from:
??9
?10????-?the?Java?Language?Specification?at
?11??????http://java.sun.com/docs/books/jls/second_edition/html/index.html
?12
?13????-?the?Sun?Code?Conventions?at?http://java.sun.com/docs/codeconv/
?14
?15????-?the?Javadoc?guidelines?at
?16??????http://java.sun.com/j2se/javadoc/writingdoccomments/index.html
?17
?18????-?the?JDK?Api?documentation?http://java.sun.com/j2se/docs/api/index.html
?19
?20????-?some?best?practices
?21
?22??Checkstyle?is?very?configurable.?Be?sure?to?read?the?documentation?at
?23??http://checkstyle.sf.net?(or?in?your?downloaded?distribution).
?24
?25??Most?Checks?are?configurable,?be?sure?to?consult?the?documentation.
?26
?27??To?completely?disable?a?check,?just?comment?it?out?or?delete?it?from?the?file.
?28
?29??Finally,?it?is?worth?reading?the?documentation.
?30
?31-->
?32
?33<module?name="Checker">
?34????<!--
?35????????重复代码的检查,超过8行就认为重复,UTF-8格式?本检查一定要放在"TreeWalker"节点前,否则在
?36????????Checkclipse中会无法使用。(在ant下可以)
?37????-->
?38????<module?name="StrictDuplicateCode">
?39????????<property?name="min"?value="8"?/>
?40????????<property?name="charset"?value="UTF-8"?/>
?41????</module>
?42????<module?name="TreeWalker">
?43????????<!--?javadoc的检查?-->
?44????????<!--?检查所有的interface和class?-->
?45????????<module?name="JavadocType"?/>
?46????????<!--?检查所有方法的javadoc,可以不声明RuntimeException?-->
?47????????<module?name="JavadocMethod">
?48????????????<property?name="allowUndeclaredRTE"?value="true"?/>
?49????????</module>
?50????????<!--?检查某个变量的javadoc?-->
?51????????<module?name="JavadocVariable"?/>
?52????????<!--?命名方面的检查,它们都使用了Sun官方定的规则。?-->
?53????????<!--?类名(class?或interface)?的检查?-->
?54????????<module?name="TypeName"?/>
?55????????<!--?变量的检查?-->
?56????????<module?name="MemberName"?/>
?57????????<!--?方法名的检查?-->
?58????????<module?name="MethodName"?/>
?59????????<!--?方法的参数名?-->
?60????????<module?name="ParameterName?"?/>
?61????????<!--?常量名的检查?-->
?62????????<module?name="ConstantName"?/>
?63????????<!--?长度方面的检查?-->
?64????????<!--?文件长度不超过1500行?-->
?65????????<module?name="FileLength">
?66????????????<property?name="max"?value="1500"?/>
?67????????</module>
?68????????<!--?每行不超过120个字-->
?69????????<module?name="LineLength">
?70????????????<property?name="max"?value="120"?/>
?71????????</module>
?72????????<!--?方法不超过30行?-->
?73????????<module?name="MethodLength">
?74????????????<property?name="tokens"?value="METHOD_DEF"?/>
?75????????????<property?name="max"?value="30"?/>
?76????????</module>
?77????????<!--?方法的参数个数不超过3个。?-->
?78????????<module?name="ParameterNumber">
?79????????????<property?name="max"?value="3"?/>
?80????????</module>
?81????????<!--?多余的关键字?-->
?82????????<module?name="RedundantModifier"?/>
?83????????<!--?对区域的检查?-->
?84????????<!--?不能出现空白区域?-->
?85????????<module?name="EmptyBlock"?/>
?86????????<!--?所有区域都要使用大括号。?-->
?87????????<module?name="NeedBraces"?/>
?88????????<!--?多余的括号?-->
?89????????<module?name="AvoidNestedBlocks">
?90????????????<property?name="allowInSwitchCase"?value="true"?/>
?91????????</module>
?92????????<!--?编码方面的检查?-->
?93????????<!--?不许出现空语句?-->
?94????????<module?name="EmptyStatement"?/>
?95????????<!--?每个类都实现了equals()和hashCode()?-->
?96????????<module?name="EqualsHashCode"?/>
?97????????<!--?不许使用switch?-->
?98????????<module?name="IllegalToken">
?99????????????<property?name="tokens"?value="LITERAL_SWITCH"?/>
100????????</module>
101????????<!--?不许内部赋值?-->
102????????<module?name="InnerAssignment"?/>
103????????<!--?绝对不能容忍魔法数?-->
104????????<module?name="MagicNumber"?/>
105????????<!--?循环控制变量不能被修改?-->
106????????<module?name="ModifiedControlVariable"?/>
107????????<!--?多余的throw?-->
108????????<module?name="RedundantThrows"?/>
109????????<!--?不许使用未被简化的条件表达式?-->
110????????<module?name="SimplifyBooleanExpression"?/>
111????????<!--?不许使用未被简化的布尔返回值?-->
112????????<module?name="SimplifyBooleanReturn"?/>
113????????<!--?String的比较不能用!=?和?==?-->
114????????<module?name="StringLiteralEquality"?/>
115????????<!--?if最多嵌套3层?-->
116????????<module?name="NestedIfDepth">
117????????????<property?name="max"?value="3"?/>
118????????</module>
119????????<!--?try最多被嵌套1层?-->
120????????<module?name="NestedTryDepth"?/>
121????????<!--?clone方法必须调用了super.clone()?-->
122????????<module?name="SuperClone"?/>
123????????<!--?finalize?必须调用了super.finalize()?-->
124????????<module?name="SuperFinalize"?/>
125????????<!--?不能catch?java.lang.Exception?-->
126????????<module?name="IllegalCatch">
127????????????<property?name="illegalClassNames"?value="java.lang.Exception"?/>
128????????</module>
129????????<!--?JUnitTestCase?的核心方法存在。?-->
130????????<module?name="JUnitTestCase"?/>
131????????<!--?一个方法中最多有3个return?-->
132????????<module?name="ReturnCount">
133????????????<property?name="max"?value="3"?/>
134????????</module>
135????????<!--?不许对方法的参数赋值?-->
136????????<module?name="ParameterAssignment"?/>
137????????<!--?不许有同样内容的String?-->
138????????<module?name="MultipleStringLiterals"?/>
139????????<!--?同一行不能有多个声明?-->
140????????<module?name="MultipleVariableDeclarations"?/>
141????????<!--?各种量度?-->
142????????<!--?布尔表达式的复杂度,不超过3?-->
143????????<module?name="BooleanExpressionComplexity"?/>
144????????<!--?类数据的抽象耦合,不超过7?-->
145????????<module?name="ClassDataAbstractionCoupling"?/>
146????????<!--?类的分散复杂度,不超过20?-->
147????????<module?name="ClassFanOutComplexity"?/>
148????????<!--?函数的分支复杂度,不超过10?-->
149????????<module?name="CyclomaticComplexity"?/>
150????????<!--?NPath复杂度,不超过200?-->
151????????<module?name="NPathComplexity"?/>
152????????<!--?杂项?-->
153????????<!--?禁止使用System.out.println?-->
154????????<module?name="GenericIllegalRegexp">
155????????????<property?name="format"?value="System\.out\.println"?/>
156????????????<property?name="ignoreComments"?value="true"?/>
157????????</module>
158????????<!--?不许使用与代
主页:?http://checkstyle.sourceforge.net/
Checkstyle配置文件的简要说明
关于配置文件的各个模块的更多细节,请参考CHECKSTYLE_HOME/docs/index.html?
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?module?PUBLIC?"-//Puppy?Crawl//DTD?Check?Configuration?1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<!--?对于所有的模块来书,如果有这个模块则说明检测这一项,没有则不检测这一项?-->
<!--?所有的模块中,其ROOT必须为Checker?-->
<module?name="Checker">
<!--?检验每个包是否存在package.html文件-->
<!--?See?http://checkstyle.sf.net/config_javadoc.html#PackageHtml?-->
<!--
<module?name="PackageHtml"/>
-->
<!--?检验每个文件末尾是否有一个空行-->
<!--?See?http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile?-->
<!--
<module?name="NewlineAtEndOfFile"/>
-->
<!--?Checks?that?property?files?contain?the?same?keys.?-->
<!--?See?http://checkstyle.sf.net/config_misc.html#Translation?-->
<module?name="Translation"/>
<module?name="TreeWalker">
<!--?Checks?for?Javadoc?comments.?-->
<!--?See?http://checkstyle.sf.net/config_javadoc.html?-->
<!--?Checks?Javadoc?comments?for?method?definitions.-->
<module?name="JavadocMethod">
<property?name="scope"?value="public"/>
<!--?是否允许错误的参数声明,true为允许,缺省为不允许?-->
<property?name="allowMissingParamTags"?value="true"/>
<!--?是否允许错误的错误声明,true为允许,缺省为不允许?-->
<property?name="allowMissingThrowsTags"?value="true"/>
<!--?是否允许错误的返回类型声明,true为允许,缺省为不允许?-->
<property?name="allowMissingReturnTag"?value="true"/>
</module>
<!--Checks?Javadoc?comments?for?class?and?interface?definitions.-->
<module?name="JavadocType"/>
<!--?Checks?that?variables?have?Javadoc?comments.-->
<module?name="JavadocVariable">
<property?name="scope"?value="protected"/>
</module>
<!--?检查Javadoc的格式?-->
<module?name="JavadocStyle">
<property?name="scope"?value="public"/>
<!--?Comment的第一句的末尾是否要有一个句号,true必须有,default为true?-->
<property?name="checkFirstSentence"?value="false"/>
<!--?检查错误的HTML脚本,比如不匹配,true检查,default为true?-->
<property?name="checkHtml"?value="true"/>
</module>
<!--?Checks?for?Naming?Conventions.?-->
<!--?See?http://checkstyle.sf.net/config_naming.html?-->
<!--?确省必须以Abstract开始或者以Factory结束?-->
<!--
<module?name="AbstractClassName"/>
-->
<module?name="ConstantName"/>
<module?name="LocalFinalVariableName"/>
<module?name="LocalVariableName"/>
<module?name="MemberName"/>
<module?name="MethodName"/>
<module?name="PackageName"/>
<module?name="ParameterName"/>
<module?name="StaticVariableName"/>
<module?name="TypeName"/>
<!--?Checks?for?Headers?-->
<!--?See?http://checkstyle.sf.net/config_header.html?-->
<!--?检查文件是否以指定文件开始,这里最好是放一些版权信息和工程描述?-->
<!--?headerFile:指定的文件?-->
<!--?ignoreLines:忽略哪些行,以","分隔?-->
<!--
<module?name="Header">
<property?name="headerFile"?value="java.header"/>
<property?name="ignoreLines"?value="2,?3,?4,?5"/>
</module>
-->
<!--?Following?interprets?the?header?file?as?regular?expressions.?-->
<!--
<module?name="RegexpHeader"/>
-->
<!--?Checks?for?imports?-->
<!--?See?http://checkstyle.sf.net/config_import.html?-->
<!--?检查使用*号的导入,默认为全部类?-->
<module?name="AvoidStarImport"/>
<!--?检查是否有非法的包,确省检查sun.*;对于某些包是不建议直接调用的?-->
<module?name="IllegalImport">
<property?name="illegalPkgs"?value="sun.*"/>
</module>
<!--?检查多于的导入,如一个类导入了多次?-->
<module?name="RedundantImport"/>
<!--?检查没有使用的导入?-->
<module?name="UnusedImports"/>
<!--?导入排序?-->
<!--?groups:分组,哪些是一组的?-->
<!--?ordered:同一个组内是否排序,true排序,确省为true?-->
<!--?separated:各个组之间是否需要用空行分隔,确省为false?-->
<!--?caseSensitive:是否是大小写敏感的,确省是?-->
<!--
<module?name="ImportOrder">
<property?name="groups"?value="java,javax"/>
<property?name="ordered"?value="true"/>
<property?name="separated"?value="true"/>
<property?name="caseSensitive"?value="true"/>
</module>
-->
<!--?Checks?for?Size?Violations.?-->
<!--?See?http://checkstyle.sf.net/config_sizes.html?-->
<!--?检查方法内可执行语句的个数,确省为30行?-->
<!--
<module?name="ExecutableStatementCount">
<property?name="max"?value="30"/>
</module>
-->
<!--?文件的最大行数,缺省为1500?-->
<module?name="FileLength">
<property?name="max"?value="2000"/>
</module>
<!--?每行的最大字符数,缺省为80?-->
<module?name="LineLength">
<!--?忽略指定格式的行,如*号开始的,等?-->
<!--
<property?name="ignorePattern"?value="^?*\*?*[^?]+$"/>
-->
<property?name="max"?value="120"/>
</module>
<!--?方法的最大行数,缺省为150?-->
<module?name="MethodLength">
<property?name="max"?value="200"/>
<!--?统计时是否包括空行和以//开始的注释,缺省为统计(true)-->
<property?name="countEmpty"?value="false"/>
</module>
<!--?匿名类的最大行数,缺省为20?-->
<module?name="AnonInnerLength">
<property?name="max"?value="60"/>
</module>
<!--?检查方法和构造子参数的最大个数,缺省为7?-->
<module?name="ParameterNumber"/>
<!--?Checks?for?whitespace?-->
<!--?See?http://checkstyle.sf.net/config_whitespace.html?-->
<module?name="EmptyForInitializerPad"/>
<module?name="EmptyForIteratorPad"/>
<module?name="MethodParamPad">
<property?name="allowLineBreaks"?value="true"/>
</module>
<module?name="NoWhitespaceAfter"/>
<module?name="NoWhitespaceBefore"/>
<module?name="OperatorWrap"/>
<module?name="ParenPad"/>
<module?name="TypecastParenPad"/>
<module?name="TabCharacter"/>
<module?name="WhitespaceAfter"/>
<module?name="WhitespaceAround"/>
<!--?Modifier?Checks?-->
<!--?See?http://checkstyle.sf.net/config_modifiers.html?-->
<!--?要求JLS?suggestions?-->
<!--
<module?name="ModifierOrder"/>
-->
<module?name="RedundantModifier"/>
<!--?Checks?for?blocks.?You?know,?those?{}'s?-->
<!--?See?http://checkstyle.sf.net/config_blocks.html?-->
<!--?检查空块?-->
<!--
<module?name="EmptyBlock"/>
-->
<module?name="LeftCurly"/>
<!--?检查只有必须有{},确省为必须,主要在if,else时有这样的情况?-->
<module?name="NeedBraces"/>
<!--?检查"}",确省在同一行?-->
<module?name="RightCurly">
<property?name="option"?value="alone"/>
</module>
<!--?检查多余嵌套的{},请看文档,不易说明?-->
<module?name="AvoidNestedBlocks"/>
<!--?Checks?for?common?coding?problems?-->
<!--?See?http://checkstyle.sf.net/config_coding.html?-->
<module?name="AvoidInlineConditionals"/>
<module?name="CovariantEquals"/>
<module?name="DeclarationOrder"/>
<module?name="DefaultComesLast"/>
<module?name="DoubleCheckedLocking"/>
<!--
<module?name="EmptyStatement"/>
-->
<module?name="EqualsHashCode"/>
<!--?变量必须初始化为自己的类型,如果给一个Object类型的变量初始化为null会提示?-->
<!--
<module?name="ExplicitInitialization"/>
-->
<module?name="FallThrough"/>
<!--
<module?name="FinalLocalVariable"/>
-->
<module?name="HiddenField">
<property?name="ignoreConstructorParameter"?value="true"/>
<property?name="ignoreSetter"?value="true"/>
</module>
<!--?Exception,?Throwable,?RuntimeException是不允许catch的?-->
<!--
<module?name="IllegalCatch"/>
-->
<module?name="IllegalInstantiation"/>
<!--?
<module?name="IllegalToken"/>
-->
<module?name="IllegalTokenText"/>
<module?name="IllegalType"/>
<module?name="InnerAssignment"/>
<!--检查直接数
<module?name="MagicNumber"/>
检查是否有构造子
<module?name="MissingCtor"/>
-->
<module?name="MissingSwitchDefault"/>
<module?name="MultipleVariableDeclarations"/>
<!--
<module?name="JUnitTestCase"/>
<module?name="NestedIfDepth"">
<property?name="max"?value="5"/>
</module>
<module?name="NestedTryDepth"">
<property?name="max"?value="5"/>
</module>
<module?name="PackageDeclaration"/>
<module?name="ReturnCount"/>
-->
<!--?不能为参数付值?-->
<!--
<module?name="ParameterAssignment"/>
-->
<module?name="RedundantThrows"/>
<!--?不能理解的,好像是bug
<module?name="RequireThis"/>
-->
<module?name="SimplifyBooleanExpression"/>
<module?name="SimplifyBooleanReturn"/>
<module?name="StringLiteralEquality"/>
<module?name="SuperClone"/>
<module?name="SuperFinalize"/>
<module?name="UnnecessaryParentheses"/>
<!--?Checks?for?class?design?-->
<!--?See?http://checkstyle.sf.net/config_design.html?-->
<!--?要求一个方法必须声明为Extension的,否则必声明为abstract,?final?or?empty?-->
<!--
<module?name="DesignForExtension"/>
-->
<!--?检查private构造子是否声明为final,这里有个问题,在Java中构造子是不能声明为final的?-->
<!--
<module?name="FinalClass"/>
-->
<!--?要求一定要有一个构造子?-->
<!--
<module?name="HideUtilityClassConstructor"/>
-->
<module?name="InterfaceIsType"/>
<!--?检查变量的可见性,确省只允许static?final?为public,否则只能为private?-->
<module?name="VisibilityModifier">
<property?name="packageAllowed"?value="true"/>
<property?name="protectedAllowed"?value="true"/>
</module>
<!--
<module?name="MutableException"/>
-->
<!--?限制抛出声明的指定数量,确省为1?-->
<!--
<module?name="ThrowsCount"/>
-->
<!--?Miscellaneous?other?checks.?-->
<!--?See?http://checkstyle.sf.net/config_misc.html?-->
<!--?数组的声明是否允许Java的类型,确省为允许,Java类型为String[]?xx,C++的类型为String?xx[];?-->
<module?name="ArrayTypeStyle"/>
<!--
<module?name="FinalParameters"/>
-->
<!--?一般性的代码问题,不好的习惯等,可以多?-->
<!--?文件中使用了System.out.print等-->
<module?name="GenericIllegalRegexp">
<property?name="format"?value="System\.out\.print"/>
<property?name="message"?value="bad?practice?of?use?System.out.print"/>
</module>
<module?name="GenericIllegalRegexp">
<property?name="format"?value="System\.exit"/>
<property?name="message"?value="bad?practice?of?use?System.exit"/>
</module>
<module?name="GenericIllegalRegexp">
<property?name="format"?value="printStackTrace"/>
<property?name="message"?value="bad?practice?of?use?printStackTrace"/>
</module>
<!--?关于Task,你可以声明自己的Task标识?-->
<module?name="TodoComment">
<property?name="format"?value="TODO"/>
</module>
<!--?强迫//注释必须如何,入下要求只能有一行,具体看文档?-->
<!--
<module?name="TrailingComment">
<property?name="format"?value="^\\s*$"/>
</module>
-->
<!--?main方法经常会在debug时使用,但发行版本的时候可能并不需要这个方法,提示?-->
<!--
<module?name="UncommentedMain"/>
-->
<!--?当定义一个常量时,希望使用大写的L来代替小写的l,原因是小写的l和数字1很象?-->
<module?name="UpperEll"/>
<!--?检查正确的缩进,这个更象是个人习惯?-->
<!--
<module?name="Indentation">
<property?name="braceAdjustment"?value="0"/>
</module>
-->
<!--?Checks?For?Metrics?-->
<!--?See?http://checkstyle.sf.net/config_metrics.html?-->
<!--?检查嵌套复杂度?-->
<module?name="CyclomaticComplexity">
<property?name="max"?value="12"/>
</module>
</module>
</module>
Checkstyle常见的输出结果
1.Type?is?missing?a?javadoc?commentClass?
缺少类型说明
2.“{”?should?be?on?the?previous?line
“{”?应该位于前一行
3.Methods?is?missing?a?javadoc?comment
方法前面缺少javadoc注释
4.Expected?@throws?tag?for?“Exception”
在注释中希望有@throws的说明
5.“.”?Is?preceeded?with?whitespace?“.”
前面不能有空格
6.“.”?Is?followed?by?whitespace“.”
后面不能有空格
7.“=”?is?not?preceeded?with?whitespace
“=”?前面缺少空格
8.“=”?is?not?followed?with?whitespace?
“=”?后面缺少空格
9.“}”?should?be?on?the?same?line?
“}”?应该与下条语句位于同一行
10.Unused?@param?tag?for?“unused”
没有参数“unused”,不需注释
11.Variable?“CA”?missing?javadoc
变量“CA”缺少javadoc注释
12.Line?longer?than?80characters?
行长度超过80
13.Line?contains?a?tab?character
行含有”tab”?字符
14.Redundant?“Public”?modifier
冗余的“public”?modifier
15.Final?modifier?out?of?order?with?the?JSL
suggestionFinal?modifier的顺序错误
16.Avoid?using?the?“.*”?form?of?import
Import格式避免使用“.*”
17.Redundant?import?from?the?same?package
从同一个包中Import内容
18.Unused?import-java.util.list
Import进来的java.util.list没有被使用
19.Duplicate?import?to?line?13
重复Import同一个内容
20.Import?from?illegal?package
从非法包中?Import内容
21.“while”?construct?must?use?“{}”
“while”?语句缺少“{}”
22.Variable?“sTest1”?must?be?private?and?have?accessor?method
变量“sTest1”应该是private的,并且有调用它的方法
23.Variable?“ABC”?must?match?pattern?“^[a-z][a-zA-Z0-9]*$”?
变量“ABC”不符合命名规则“^[a-z][a-zA-Z0-9]*$”
24.“(”?is?followed?by?whitespace?
“(”?后面不能有空格
25.“)”?is?proceeded?by?whitespace
“)”?前面不能有空格
?
码同行的注释?-->
159????????<module?name="TrailingComment"?/>
160????</module>
161????<!--?检查翻译文件?-->
162????<module?name="Translation"?/>
163</module>
164
checkStyle结果分析
<property name="charset" value="UTF-8"/>
????????????????????? <module name="TreeWalker">
??????????? 如果是UTF-8的话,就添加加粗的那条语句,就可以了。
37、 Got an exception - java.lang.RuntimeException: Unable to get class information for @throws tag *whatever*.
??? 网上参考解决方法:选中CheckSytle的JavaDoc --> Method JavaDoc --> logLoadErrors。如果是CheckStyle自己加载时出错的,打个Log就可以了,不要整出Errors吓人。
?? 还有一处也可能包出同样的错误。Coding Problems --> Redundant Throws --> logLoadErrors选中即可
38、Expected @param tag for 'dataManager'.??? 缺少dataManager参数的注释?? 解决方法:在注释中添加@param? dataManager? DataManager
网上一些其他错误的解答:
1. Parameter X should be final.
public class Foo
{
??? private int bar;
??? public Foo(int bar)
??? {
??????? this.bar = bar;
??? }
??? public final int getBar()
??? {
??????? return bar;
??? }
}
解释:public Foo(int bar)的局部变量,被认为是不可改变的,检查需要加上final关键字定义public Foo(final int bar)此错误,可以忽略不检查。
2. Redundant 'X' modifier.
public interface CacheHRTreeService extends Manager {
?/**
? * Organization Tree
? * @param orgDto
? * @return
? * @throws Exception
? */
?public void setOrganization(OrganizationDTO orgDto) throws Exception;
?/**
? * Organization Tree
? * @return
? * @throws Exception
? */
?public OrganizationDTO getOrganization() throws Exception;
......
}
解释:多余的字段。public OrganizationDTO getOrganization() throws Exception;此时public为多余的字段,因为interface定义的时候,就是public的。
需要检查。
3. - Class X should be declared as final.
解释:对于单例设计模式,要求返回唯一的类对象。但是HRFactory和ContextFactory为优化的两个类,不需求检查。
其他的单例类,依然需要进行检查。
4. - Method 'addChildrenId' is not designed for extension - needs to be
? abstract, final or empty.
解释:通过父类继承的,此类有点特殊可以忽略此类。
5. Variable 'id' must be private and have accessor methods.解释:BaseHRDTO类,为父类,属性给子类继承,比较特殊。但是其他的类,声名需要加上范围'private'关键字。需要检查。
6. -Array brackets at illegal position.解释:代码写法,习惯不一样。需要检查,仅仅提示