1. 程式人生 > >基於華為Java程式設計規範的Eclipse checkStyle.xml

基於華為Java程式設計規範的Eclipse checkStyle.xml

        發現專案組成員程式碼規範存在較大的問題,於是就在華為程式設計規範的基礎上制定了這份checkStyle.xml文件,至於Eclipse怎麼安裝checkStyle外掛以及該外掛怎麼使用請自行Google之。

        checkStyle.xml(含詳細節點說明)如下:       

<?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">

<!-- Generated by RHY @will_awoke -->

<module name="Checker">	
	
	<property name="charset" value="UTF-8"/>   
	<property name="severity" value="warning"/>
	
	<!-- Checks for Size Violations.  --> 
	<!-- 檢查檔案的長度(行) default max=2000 --> 
	<module name="FileLength">         
     <property name="max" value="2500"/>        
  </module>  
  
  <!-- Checks that property files contain the same keys. --> 
  <!-- 檢查**.properties配置檔案 是否有相同的key
  <module name="Translation">         
  </module>   
  --> 
	
  <module name="TreeWalker">
    
    <!-- Checks for imports    -->               
    <!-- 必須匯入類的完整路徑,即不能使用*匯入所需的類 -->  
    <module name="AvoidStarImport"/>  
    
    <!-- 檢查是否從非法的包中匯入了類 illegalPkgs: 定義非法的包名稱-->  
    <module name="IllegalImport"/> <!-- defaults to sun.* packages -->  
    
    <!-- 檢查是否匯入了不必顯示匯入的類-->  
    <module name="RedundantImport"/>  
    
    <!-- 檢查是否匯入的包沒有使用-->  
    <module name="UnusedImports"/>
    
    <!-- Checks for whitespace           
    <module name="EmptyForIteratorPad"/>
    <module name="MethodParamPad"/>
    <module name="NoWhitespaceAfter"/>
    <module name="NoWhitespaceBefore"/>
    <module name="OperatorWrap"/>
    <module name="ParenPad"/>
    <module name="TypecastParenPad"/>
    <module name="WhitespaceAfter"/>
    <module name="WhitespaceAround"/>
    -->
    
    <!-- 檢查類和介面的javadoc 預設不檢查author 和version tags       
      authorFormat: 檢查author標籤的格式
			versionFormat: 檢查version標籤的格式
			scope: 可以檢查的類的範圍,例如:public只能檢查public修飾的類,private可以檢查所有的類
			excludeScope: 不能檢查的類的範圍,例如:public,public的類將不被檢查,但訪問許可權小於public的類仍然會檢查,其他的許可權以此類推
			tokens: 該屬性適用的型別,例如:CLASS_DEF,INTERFACE_DEF -->
    <module name="JavadocType">  
    	<property name="authorFormat" value="\S"/>  
      <property name="scope" value="protected"/>        
      <property name="tokens" value="CLASS_DEF,INTERFACE_DEF"/>  
    </module>
    
    <!-- 檢查方法的javadoc的註釋
			scope: 可以檢查的方法的範圍,例如:public只能檢查public修飾的方法,private可以檢查所有的方法
			allowMissingParamTags: 是否忽略對引數註釋的檢查
			allowMissingThrowsTags: 是否忽略對throws註釋的檢查
			allowMissingReturnTag: 是否忽略對return註釋的檢查 -->
    <module name="JavadocMethod">  
    	<property name="scope" value="private"/>  
      <property name="allowMissingParamTags" value="false"/>  
      <property name="allowMissingThrowsTags" value="false"/>  
      <property name="allowMissingReturnTag" value="false"/>  
      <property name="tokens" value="METHOD_DEF"/>  
      <property name="allowUndeclaredRTE" value="true"/>  
      <property name="allowThrowsTagsForSubclasses" value="true"/>  
      <!--允許get set 方法沒有註釋-->
 	    <property name="allowMissingPropertyJavadoc" value="true"/>
    </module>  
        
    <!-- 檢查類變數的註釋
			scope: 檢查變數的範圍,例如:public只能檢查public修飾的變數,private可以檢查所有的變數 -->    
    <module name="JavadocVariable">  
      <property name="scope" value="private"/>  
    </module>  
        
    <!--option: 定義左大括號'{'顯示位置,eol在同一行顯示,nl在下一行顯示  
      maxLineLength: 大括號'{'所在行行最多容納的字元數  
      tokens: 該屬性適用的型別,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF -->  
    <module name="LeftCurly"> 
    	<property name="option" value="nl"/>
    </module>
     
    <!-- NeedBraces 檢查是否應該使用括號的地方沒有加括號  
      tokens: 定義檢查的型別 -->  
    <module name="NeedBraces"/>  
    
    <!-- Checks the placement of right curly braces ('}') for  else, try, and catch tokens. The policy to verify is specified using property  option.   
      option: 右大括號是否單獨一行顯示  
      tokens: 定義檢查的型別  -->  
    <module name="RightCurly">    
    	<property name="option" value="alone"/> 	
    </module>
        
    <!-- 檢查在重寫了equals方法後是否重寫了hashCode方法 --> 
    <module name="EqualsHashCode"/>
        
    <!--  Checks for illegal instantiations where a factory method is preferred.  
      Rationale: Depending on the project, for some classes it might be preferable to create instances through factory methods rather than calling the constructor.  
      A simple example is the java.lang.Boolean class. In order to save memory and CPU cycles, it is preferable to use the predefined constants TRUE and FALSE. Constructor invocations should be replaced by calls to Boolean.valueOf().  
      Some extremely performance sensitive projects may require the use of factory methods for other classes as well, to enforce the usage of number caches or object pools. -->  
    <module name="IllegalInstantiation">  
    	<property name="classes" value="java.lang.Boolean"/>  
    </module>
    
    <!-- Checks for Naming Conventions.   命名規範   -->
    <!-- local, final variables, including catch parameters -->
    <module name="LocalFinalVariableName"/>
    
    <!-- local, non-final variables, including catch parameters--> 
    <module name="LocalVariableName"/>
    
    <!-- static, non-final fields -->
    <module name="StaticVariableName">
    	<property name="format" value="(^[A-Z0-9_]{0,19}$)"/>    
    </module>  
    
    <!-- packages -->
    <module name="PackageName" >
    	<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
    </module> 
     
    <!-- classes and interfaces -->
    <module name="TypeName">  
    	<property name="format" value="(^[A-Z][a-zA-Z0-9]{0,19}$)"/> 	
    </module>
    
    <!-- methods -->  
    <module name="MethodName">          
      <property name="format" value="(^[a-z][a-zA-Z0-9]{0,19}$)"/>         
    </module> 
    
    <!-- non-static fields -->
    <module name="MemberName">  
    	<property name="format" value="(^[a-z][a-z0-9][a-zA-Z0-9]{0,19}$)"/>         
    </module>
    
    <!-- parameters -->
    <module name="ParameterName">
    	<property name="format" value="(^[a-z][a-zA-Z0-9_]{0,19}$)"/>         
    </module>
    
    <!-- constants (static,  final fields) -->
    <module name="ConstantName"> 
    	<property name="format" value="(^[A-Z0-9_]{0,19}$)"/>      
    </module>
    
    <!-- 程式碼縮排   -->
    <module name="Indentation">        
    </module>
    
    <!-- Checks for redundant exceptions declared in throws clause such as duplicates, unchecked exceptions or subclasses of another declared exception. 
      檢查是否丟擲了多餘的異常  
    <module name="RedundantThrows">
    	<property name="logLoadErrors" value="true"/>
    	<property name="suppressLoadErrors" value="true"/> 
    </module>
    --> 
    
     <!--  Checks for overly complicated boolean expressions. Currently finds code like  if (b == true), b || true, !false, etc.   
       檢查boolean值是否冗餘的地方  
       Rationale: Complex boolean logic makes code hard to understand and maintain. -->  
    <module name="SimplifyBooleanExpression"/>
    
    <!--  Checks for overly complicated boolean return statements. For example the following code  
       檢查是否存在過度複雜的boolean返回值  
       if (valid())  
          return false;  
       else  
          return true;  
       could be written as  
          return !valid();  
       The Idea for this Check has been shamelessly stolen from the equivalent PMD rule. -->  
    <module name="SimplifyBooleanReturn"/>  
    
    <!-- Checks that a class which has only private constructors is declared as final.只有私有構造器的類必須宣告為final-->  
    <module name="FinalClass"/>
    
     <!--  Make sure that utility classes (classes that contain only static methods or fields in their API) do not have a public constructor.  
       確保Utils類(只提供static方法和屬性的類)沒有public構造器。  
       Rationale: Instantiating utility classes does not make sense. Hence the constructors should either be private or (if you want to allow subclassing) protected. A common mistake is forgetting to hide the default constructor.  
       If you make the constructor protected you may want to consider the following constructor implementation technique to disallow instantiating subclasses:  
       public class StringUtils // not final to allow subclassing  
       {  
           protected StringUtils() {  
               throw new UnsupportedOperationException(); // prevents calls from subclass  
           }  
           public static int count(char c, String s) {  
               // ...  
           }  
       } 
    <module name="HideUtilityClassConstructor"/> 
    --> 
    
    <!--  Checks visibility of class members. Only static final members may be public; other class members must be private unless property protectedAllowed or packageAllowed is set.  
      檢查class成員屬性可見性。只有static final 修飾的成員是可以public的。其他的成員屬性必需是private的,除非屬性protectedAllowed或者packageAllowed設定了true.  
       Public members are not flagged if the name matches the public member regular expression (contains "^serialVersionUID$" by default). Note: Checkstyle 2 used to include "^f[A-Z][a-zA-Z0-9]*$" in the default pattern to allow CMP for EJB 1.1 with the default settings. With EJB 2.0 it is not longer necessary to have public access for persistent fields, hence the default has been changed.  
       Rationale: Enforce encapsulation. 強制封裝 -->  
    <module name="VisibilityModifier"/> 
    
    <!-- 每一行只能定義一個變數 -->
    <module name="MultipleVariableDeclarations">       
    </module>
    
     <!-- Checks the style of array type definitions. Some like Java-style: public static void main(String[] args) and some like C-style: public static void main(String args[])   
       檢查再定義陣列時,採用java風格還是c風格,例如:int[] num是java風格,int num[]是c風格。預設是java風格-->  
    <module name="ArrayTypeStyle"> 
    </module>
    
    <!-- Checks that there are no "magic numbers", where a magic number is a numeric literal that is not defined as a constant. By default, -1, 0, 1, and 2 are not considered to be magic numbers. 
    <module name="MagicNumber">   
    </module>
    -->  
    
    <!-- A check for TODO: comments. Actually it is a generic regular expression matcher on Java comments. To check for other patterns in Java comments, set property format.   
       檢查是否存在TODO(待處理) TODO是javaIDE自動生成的。一般程式碼寫完後要去掉。  
     -->  
    <module name="TodoComment"/>  
    
    <!--  Checks that long constants are defined with an upper ell. That is ' L' and not 'l'. This is in accordance to the Java Language Specification,  Section 3.10.1.  
      檢查是否在long型別是否定義了大寫的L.字母小寫l和數字1(一)很相似。  
      looks a lot like 1. -->  
    <module name="UpperEll"/>
    
    <!--  Checks that switch statement has "default" clause. 檢查switch語句是否有‘default’從句  
       Rationale: It's usually a good idea to introduce a default case in every switch statement. 
       Even if the developer is sure that all currently possible cases are covered, this should be expressed in the default branch,
        e.g. by using an assertion. This way the code is protected aginst later changes, e.g. introduction of new types in an enumeration type. --> 
    <module name="MissingSwitchDefault"/> 
    
    <!--檢查switch中case後是否加入了跳出語句,例如:return、break、throw、continue -->
    <module name="FallThrough"/>  
    
    <!-- Checks the number of parameters of a method or constructor. max default 7個. -->    
    <module name="ParameterNumber">      
      <property name="max" value="5"/>              
    </module>
    
    <!-- 每行字元數 -->    
    <module name="LineLength">  
      <property name="max" value="200"/>       
    </module>  
    
    <!-- Checks for long methods and constructors. max default 150行. max=300 設定長度300 --> 
    <module name="MethodLength">  
      <property name="max" value="300"/>                 
    </module>        
    
    <!-- ModifierOrder 檢查修飾符的順序,預設是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native -->  
    <module name="ModifierOrder">          
    </module>      
    
    <!-- 檢查是否有多餘的修飾符,例如:介面中的方法不必使用public、abstract修飾  -->
    <module name="RedundantModifier">       
    </module>
    
    <!--- 字串比較必須使用 equals() -->   
    <module name="StringLiteralEquality">          
    </module> 
    
    <!-- if-else巢狀語句個數 最多4層 -->
    <module name="NestedIfDepth">        
      <property name="max" value="3"/>         
    </module>  
    
    <!-- try-catch 巢狀語句個數 最多2層 -->
    <module name="NestedTryDepth">  
      <property name="max" value="2"/>         
    </module>  
        
    <!-- 返回個數 -->   
    <module name="ReturnCount">        
      <property name="max" value="5"/>  
      <property name="format" value="^$"/>          
    </module>                  
  
  </module>
  
</module>

      注: 如有需要華為程式設計規範.doc、華為Eclipse格式化模板codeformat.xml、華為註釋模板 codetemplates.xml 可以與我聯絡。

update 2014.11.04

     update 2016.04.14  最新地址:http://pan.baidu.com/s/1nuDleXF

相關推薦

基於java程式設計規範checkstyle.xml以及格式化模版,註釋模版

原文連結:http://blog.csdn.net/will_awoke/article/details/12705611?utm_source=tuicool&utm_medium=referral checkstyle.xml <?xml vers

基於Java程式設計規範Eclipse checkStyle.xml

        發現專案組成員程式碼規範存在較大的問題,於是就在華為程式設計規範的基礎上制定了這份checkStyle.xml文件,至於Eclipse怎麼安裝checkStyle外掛以及該外掛怎麼使用請自行Google之。         checkStyle.xml(含詳

java程式碼規範

1 Java 程式設計規範 1.1 排版 1.1.1 規則 規則1 程式塊要採用縮排風格編寫,縮排的空格數為4個,不允許使用TAB縮排。 說明:縮排使程式更易閱讀,使用空格縮排可以適應不同作業系統與不同開發工具。 規則2

轉型AI ,80後Java工程師的故事

JAVA 人工智能 寫在前面:JAVA 是世界上最好用的語言;生活中唯一不變的就是改變;由內向外的是新生,由外向內的是打破。一:西安與華為我叫秦風(筆名)。從學生時代接觸 Java 寫第一行 “hello world” 至今已有十多年了,2011年正式加入華為西安研究院先後負責接入網、做自動化測試工具

基於雲語音通知 VoiceCall 的應用上線記錄並分享.NET CORE DEMO

客戶 依然 階段 供應商 華為雲 狀態 能力 處理 大小 最近公司要上線語音通知功能,需求如下: 場景:發生報警時,自動通知到指定的手機號,同時,提供幾個按鍵選項,例如,語音通知如下: “您好,XXX小區發生XXXX報警,按1確認報警,按2忽略報警,按3屏

Java程式設計規範(第三版)》James.Gosling等.掃描版.pdf

書籍簡介: 本書由java技術的發明者編寫,是java tm程式語言的權威性技術指南。如果你想知道語言之構造的精確含義,本書是最好的資源。.   本書全面、準確而詳細地論及了java程式語言。它提供了對於自前一版以來新增的所有新特性的完整描述,包括泛型、註釋、斷言、自動裝箱、列舉、for-

基於雲區塊鏈服務快速部署和搭建鏈上應用

華為雲區塊鏈服務的整體架構 華為雲區塊鏈服務BCS是面向企業及開發者的高效能、高可用和高安全的區塊鏈技術平臺服務,可以幫助企業和開發人員在華為雲上快速、低成本的建立、部署和管理區塊鏈應用。 BCS基於Hyperledger1.0、kubernetes搭建,配置簡單,數分鐘內即可完成部署,提供

基於mate10 與iphone x 的拆機手冊對比的

華為mate 10 拆機圖解: https://www.pc841.com/pingce/20171123-85851_3.html iPhone x 拆機圖解: https://www.pc841.com/shoujizhishi/85433_all.html 基於電腦百事網的資料分析

JAVA程式設計規範

一、程式設計規約 (一)、命名風格 1.[強制]程式碼中的命名均不能以下劃線或美元符號開始,也不能一下劃線或美元符號結束。 反例:_name / name / name/name/namename / name_ / namename/name/​name

java程式設計規範筆記(一)

1. 命名風格     程式碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結束     程式碼中的命名嚴禁使用拼音與英文混合的方式,更不允許直接使用中文的方式     類名使用UpperCamelCase風格,必須遵從駝峰形式     方法名、引數名

java程式設計規範筆記(二)

(二)常量定義   不允許任何魔法值(即未經定義的常量)直接出現在程式碼中   long或者Long初始賦值時,使用大寫的L,不能是小寫的l,小寫容易跟數字1混淆,造成誤解   不要使用一個常量類維護所有常量,按常量功能進行歸類,分開維護 (三) 程式碼格式  

Java程式設計規範筆記(三)

(四) OOP規約     避免通過一個類的物件引用訪問此類的靜態變數或靜態方法,無謂增加編譯器解析成本,直接用類名來訪問即可     所有的覆寫方法,必須加@Override註解     相同引數型別,相同業務含義,才可以使用Java的可變引數,避免使用Object(

Java程式設計規範,程式碼驗收標準

引言: 這個標準是衡量程式碼本身的缺陷,也是衡量一個研發人員本身的價值。 軍規一:【避免在程式中使用魔鬼數字,必須用有意義的常量來標識。】 軍規二:【明確方法的功能,一個方法僅完成一個功能。】 軍規三:【方法引數不能超過5個】 軍規四:【方法調用盡量不要返回null

Java社招面試(已拿到offer)

之前8月底華為cloudsop部門打電話叫我要不要面試,當時正處於換工作的期間,於是就把簡歷發給華為hr,人事稽核後經過一些列面試、機試,最終順利拿到了offer,出於未來職業規劃的考量,本人手裡還有其他的一些offer,還沒有定下來,順便在此分享一下我面試華

線上程式設計題系列-14-字串的連線最長路徑查詢

問題描述: 1. 問題涉及知識點. string型別排序 有重複 優先佇列 PriorityQueue. 2. 自己解法. 解法一:按照排序的思想直接對比字元的大小.或者使用s

線上程式設計題系列-5-進位制轉換

問題描述: 1. 問題涉及知識點. 字串遍歷. 2. 自己解法. 先做一個hasNext()的無限迴圈. 取一個輸入’0xA’,通過split獲取substring的方式取

線上程式設計題系列-6-質數因子

問題描述: 1. 問題涉及知識點. 素數的求解( 複習閏年,水仙花,迴文數). 2. 自己解法. 迴圈去輸入 單個計算輸入. 每次尋找能整數的最小的素數. 使用stringBuilder構造結構. package com.c

線上程式設計題系列-19-簡單錯誤記錄

問題描述: 1. 問題涉及知識點. 程式的停止問題(如本題所述,即不知道什麼時候結束,只是說每次列印最後八個,所以還是按照一般處理,在最後列印時只是列印容器中最後把即可.) 淨檔名:值得就是檔

線上程式設計題系列-4-字串分隔

問題描述: 1. 問題涉及知識點. 做一個無限輸入scanner.hasNext(). 字串處理. 2. 自己解法. 兩個輸入,每次處理一個. 判斷字元長度,如果是8的倍數,直

線上程式設計題系列-16-購物單

問題描述: 1. 問題涉及知識點. 動態規劃. 2. 自己解法. 先對資料進行合併. (原始資料) 1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0 (因為最後結果是需要和重要性