1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        我以為我編碼很規(guī)范,但......

        共 7423字,需瀏覽 15分鐘

         ·

        2021-10-01 13:18

        本以為自己寫的代碼應(yīng)該還是挺規(guī)范的,當(dāng)使用了checkstyle發(fā)現(xiàn)妥妥的打臉現(xiàn)場!由于公司要求我們在開發(fā)過程中規(guī)范代碼 讓我們使用checkstyle,剛開始我還是比較排斥(可能報紅太多)但慢慢就真香了 用著用著心里不禁想(這東西可真太好用了)接下來我先說他怎么安裝的再聊一聊他的一些規(guī)范和約束

        1.安裝(我開發(fā)工具是idea)

        • 1.點擊File -> Settings -> Tools 查看是否有Checkstyle若沒有請接著看

        • 2.點擊File -> Settings -> Plugins 可以在Marketplace中搜索checkstyle下載,也可以先下載CheckStyle安裝包,再點擊這個將這個壓縮包導(dǎo)入即可(這個的速度更快 推薦)具體的安裝可以官網(wǎng)取下載

        • 3.再次點擊Tools查看是否有CheckStyle(正常情況下是有的)點擊CheckStyle

        將checkstyle的一個約束文件導(dǎo)入(alibaba_checks.xml文件)點擊Apply即可生效 xml文件可以直接網(wǎng)上搜索 如下圖所示:

        2.看看xml

        alibaba_checks.xml文件 若需要可以直接復(fù)制使用

        我在這里分享一些我在開發(fā)中經(jīng)常會檢測出的一些約束:

        1.import檢查 "UnusedImports":在開發(fā)中有時有些包是無用導(dǎo)入他會檢測出來

        2.命名檢查:如命名包名只能是小寫字母(PackageName),還有類名方法名常量名等檢查、

        3.方法的參數(shù)個數(shù)不超過5個:若參數(shù)多其實建議傳對象

        4.除此之外還有一些代碼語法的檢查 `

        <!-- 檢查文件是否以一個空行結(jié)束 -->
        <module name="NewlineAtEndOfFile"/>

        <!-- 文件長度不超過1500行 -->
        <module name="FileLength">
        <property name="max" value="1500"/>
        </module>

        <!-- 每個java文件一個語法樹 -->
        <module name="TreeWalker">
        <!-- import檢查-->
        <!-- 檢查是否從非法的包中導(dǎo)入了類 -->
        <module name="IllegalImport"/>
        <!-- 檢查是否導(dǎo)入了多余的包 -->
        <module name="RedundantImport"/>
        <!-- 沒用的import檢查,比如:1.沒有被用到2.重復(fù)的3.import java.lang的4.import 與該類在同一個package的 -->
        <module name="UnusedImports" />

        <!-- 注釋檢查 -->
        <!-- 檢查構(gòu)造函數(shù)的javadoc -->
        <module name="JavadocType">
        <property name="allowUnknownTags" value="true"/>
        <message key="javadoc.missing" value="類注釋:缺少Javadoc注釋。"/>
        </module>

        <!-- 命名檢查 -->
        <!-- 局部的final變量,包括catch中的參數(shù)的檢查 -->
        <module name="LocalFinalVariableName" />
        <!-- 局部的非final型的變量,包括catch中的參數(shù)的檢查 -->
        <module name="LocalVariableName" />
        <!-- 包名的檢查(只允許小寫字母),默認(rèn)^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ -->
        <module name="PackageName">
        <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
        <message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
        </module>
        <!-- 僅僅是static型的變量(不包括static final型)的檢查 -->
        <module name="StaticVariableName" />
        <!-- Class或Interface名檢查,默認(rèn)^[A-Z][a-zA-Z0-9]*$-->
        <module name="TypeName">
        <message key="name.invalidPattern" value="名稱 ''{0}'' 要符合 ''{1}''格式."/>
        </module>
        <!-- 非static型變量的檢查 -->
        <module name="MemberName" />
        <!-- 方法名的檢查 -->
        <module name="MethodName" />
        <!-- 方法的參數(shù)名 -->
        <module name="ParameterName " />
        <!-- 常量名的檢查(只允許大寫),默認(rèn)^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
        <module name="ConstantName" />

        <!-- 定義檢查 -->
        <!-- 檢查數(shù)組類型定義的樣式 -->
        <module name="ArrayTypeStyle"/>
        <!-- 檢查long型定義是否有大寫的“L” -->
        <module name="UpperEll"/>

        <!-- 長度檢查 -->
        <!-- 每行不超過140個字符 -->
        <!-- <module name="LineLength">
        <property name="max" value="140" />
        </module> -->
        <!-- 方法不超過50行 -->
        <!-- <module name="MethodLength">
        <property name="tokens" value="METHOD_DEF" />
        <property name="max" value="50" />
        </module> -->
        <!-- 方法的參數(shù)個數(shù)不超過5個。并且不對構(gòu)造方法進行檢查-->
        <module name="ParameterNumber">
        <property name="max" value="5" />
        <property name="ignoreOverriddenMethods" value="true"/>
        <property name="tokens" value="METHOD_DEF" />
        </module>

        <!-- 空格檢查-->
        <!-- 方法名后跟左圓括號"(" -->
        <module name="MethodParamPad" />
        <!-- 在類型轉(zhuǎn)換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->
        <module name="TypecastParenPad" />
        <!-- 檢查在某個特定關(guān)鍵字之后應(yīng)保留空格 -->
        <module name="NoWhitespaceAfter"/>
        <!-- 檢查在某個特定關(guān)鍵字之前應(yīng)保留空格 -->
        <module name="NoWhitespaceBefore"/>
        <!-- 操作符換行策略檢查 -->
        <module name="OperatorWrap"/>
        <!-- 圓括號空白 -->
        <module name="ParenPad"/>
        <!-- 檢查分隔符是否在空白之后 -->
        <module name="WhitespaceAfter"/>
        <!-- 檢查分隔符周圍是否有空白 -->
        <module name="WhitespaceAround"/>

        <!-- 修飾符檢查 -->
        <!-- 檢查修飾符的順序是否遵照java語言規(guī)范,默認(rèn)public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
        <module name="ModifierOrder"/>
        <!-- 檢查接口和annotation中是否有多余修飾符,如接口方法不必使用public -->
        <module name="RedundantModifier"/>

        <!-- 代碼塊檢查 -->
        <!-- 檢查是否有嵌套代碼塊 -->
        <module name="AvoidNestedBlocks"/>
        <!-- 檢查是否有空代碼塊 -->
        <module name="EmptyBlock"/>
        <!-- 檢查左大括號位置 -->
        <module name="LeftCurly"/>
        <!-- 檢查代碼塊是否缺失{} -->
        <module name="NeedBraces"/>
        <!-- 檢查右大括號位置 -->
        <module name="RightCurly"/>

        <!-- 代碼檢查 -->
        <!-- 檢查空的代碼段 -->
        <module name="EmptyStatement"/>
        <!-- 檢查在重寫了equals方法后是否重寫了hashCode方法 -->
        <module name="EqualsHashCode"/>
        <!-- 檢查局部變量或參數(shù)是否隱藏了類中的變量 -->
        <module name="HiddenField">
        <property name="tokens" value="VARIABLE_DEF"/>
        </module>
        <!-- 檢查子表達式中是否有賦值操作 -->
        <module name="InnerAssignment"/>
        <!-- 檢查switch語句是否有default -->
        <module name="MissingSwitchDefault"/>
        <!-- 檢查是否有過度復(fù)雜的布爾表達式 -->
        <module name="SimplifyBooleanExpression"/>
        <!-- 檢查是否有過于復(fù)雜的布爾返回代碼段 -->
        <module name="SimplifyBooleanReturn"/>

        <!-- 類設(shè)計檢查 -->
        <!-- 檢查類是否為擴展設(shè)計l -->
        <!-- 檢查只有private構(gòu)造函數(shù)的類是否聲明為final -->
        <module name="FinalClass"/>
        <!-- 檢查接口是否僅定義類型 -->
        <module name="InterfaceIsType"/>
        <!-- 檢查類成員的可見度 檢查類成員的可見性。只有static final 成員是public的
        除非在本檢查的protectedAllowed和packagedAllowed屬性中進行了設(shè)置-->
        <module name="VisibilityModifier">
        <property name="packageAllowed" value="true"/>
        <property name="protectedAllowed" value="true"/>
        </module>

        <!-- 語法 -->
        <!-- String的比較不能用!= 和 == -->
        <module name="StringLiteralEquality"/>
        <!-- 限制for循環(huán)最多嵌套2層 -->
        <module name="NestedForDepth">
        <property name="max" value="2"/>
        </module>
        <!-- if最多嵌套3層 -->
        <module name="NestedIfDepth">
        <property name="max" value="3"/>
        </module>
        <!-- 檢查未被注釋的main方法,排除以Appllication結(jié)尾命名的類 -->
        <module name="UncommentedMain">
        <property name="excludedClasses" value=".*[Application,Test]$"/>
        </module>
        <!-- 禁止使用System.out.println -->
        <!-- <module name="Regexp">
        <property name="format" value="System\.out\.println"/>
        <property name="illegalPattern" value="true"/>
        </module> -->
        <!-- return個數(shù) 3個-->
        <!-- <module name="ReturnCount">
        <property name="max" value="3"/>
        </module> -->
        <!--try catch 異常處理數(shù)量 3-->
        <module name="NestedTryDepth ">
        <property name="max" value="3"/>
        </module>
        <!-- clone方法必須調(diào)用了super.clone() -->
        <module name="SuperClone" />
        <!-- finalize 必須調(diào)用了super.finalize() -->
        <module name="SuperFinalize" />


        </module>
        復(fù)制代碼

        `

        總結(jié)

        代碼檢查只是讓我們在編程中能夠養(yǎng)成良好的開發(fā)習(xí)慣,其實這個用了一段時間后自己也就習(xí)慣了 在編碼過程中自己就會注意到這些規(guī)范問題。規(guī)范代碼方便自己也讓別人方便


        作者:又菜又想玩的XXX
        鏈接:https://juejin.cn/post/7012419799653285896
        來源:掘金
        著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。



        瀏覽 71
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            潘金莲一级淫片aaaaaa视频 | 黄色h视频 | 操逼的好好看看 | 少妇与大狼拘作爱小说 | 淫男乱女在线观看 | 探花av| 亚洲免费观看高清完整版在线观 | 色播综合| 我要看一级毛片 | 黄色性爱在线观看 |