代码检查规则:Java语言案例详解
本節(jié)課程為《代碼檢查規(guī)則:Java語言案例詳解》, 通常情況下Java的代碼檢查規(guī)則可以分為以下十類:
接下來,讓我們具體來看看每個分類的內容。
一、源文件規(guī)范
該類規(guī)范主要從文件名、文件編碼、特殊字符三個方面制定的規(guī)則。
01
文件名
Java源文件名必須和它包含的頂層類名保持一致,包括大小寫,并以.java作為后綴名。
02
文件編碼
為保持編碼風格的一致性,避免編碼不一致導致的亂碼問題,要求所有源文件編碼必須使用UTF-8格式。
03
特殊字符
特殊字符方面的規(guī)則主要是針對換行、縮進、空格等操作而制定,有以下強制規(guī)定:
①除換行符以外,ASCII空格(0x20)是唯一合法的空格字符。
②由于不同系統(tǒng)將Tab轉化成空格的數(shù)目不一致,統(tǒng)一使用空格進行縮進。
③文件的換行符統(tǒng)一使用Unix格式(\n),而不要使用Windows格式(\r\n)。
二、源文件組織結構規(guī)范
這一大類規(guī)則主要規(guī)定了源文件所應包含的具體組成部分和各個部分之間應遵循的一系列規(guī)則。
對于源文件的組成部分,規(guī)定如下:
源文件必須按順序包含:許可證或版權聲明、package語句、import語句、唯一的頂層類,四個方面的內容。同時,每兩個部分之間用一個空行進行分隔,不允許出現(xiàn)多余空行。對于以上四個方面的內容,每個組成部分又有相應的編碼規(guī)則。
01
許可證或版權聲明規(guī)范
如果文件有許可證或版權聲明,應放在最開頭,如果沒有,可以忽略。
02
package語句規(guī)范
package語句一定單獨占一行不換行,允許該行超出Java的120字符列寬限制。
03
import語句規(guī)范
①對于所有非靜態(tài)導入,禁止使用通配符import。
②所有未使用的import語句均應刪除,并且與package語句相同。
③每條import語句單獨占據(jù)一行不換行,允許超出120字符列寬限制。
04
類聲明規(guī)范
①每個源文件只允許包含唯一一個頂層類。若需要定義其他的類,可將多余的類放在另外一個獨立的源文件中,或者可將其作為一個內部類,定義在頂層類中來使用。
②重載的方法必須放在一起,即同名的構造函數(shù)或方法之間禁止插入其他成員。
三、代碼結構規(guī)范
這一部分規(guī)則主要是對花括號(即大括號)、縮進與換行、空行的一系列規(guī)范和一些其他說明。
01
花括號
花括號經常在類和方法定義以及代碼塊劃分中使用,花括號在使用中常需要合理的換行操作進行配合。規(guī)定為:在非空代碼塊中使用花括號時要遵循K&R風格(Kernighan and Ritchie Style),三個主要原則為:
①在左花括號({)前不能換行,在其后換行;
②在右花括號(})前應有換行;
③表示終止的右花括號(})后必須換行,否則,右花括號后不換行。
02
縮進與換行
縮進與換行主要是為了保證代碼風格的一致性,提升代碼的可維護性。主要規(guī)范有:
①每次開始書寫一個新代碼塊時,使用4個空格進行縮進,在代碼塊結束時,恢復之前的縮進級別。
②每條語句之后都要換行,每行只能有一條完整語句。
③除package語句和import語句外,代碼單行字符數(shù)限制不超過120個。超出則需要換行,換行時,遵循如下五條原則:
→ 第二行相對第一行縮進四個空格,從第三行開始,不再繼續(xù)縮進。
→ 運算符與下文一起換行,即運算符位于行首。
→ 方法調用的標點符號與下文一起換行。
→ 方法調用中的多個參數(shù)需要換行時,在逗號后進行。
→ 在括號前不要換行。
03
空行
合理使用空行可以提高代碼的可讀性,有利于后期維護。
對于空行的使用,有如下規(guī)范進行約束:
①在類的不同成員間增加空行,包括:成員變量、構造函數(shù)、方法、內部類、靜態(tài)初始化塊、實例初始化塊等。
②兩個成員變量聲明之間可以不加空行??招型ǔτ诔蓡T變量進行邏輯分組。
③方法體內,按需增加空行,以便從邏輯上對語句進行分組。
④使用空行時,禁止使用連續(xù)的空行。
04
其他說明
Java中有兩種數(shù)組定義形式,為規(guī)范代碼書寫形式,要求為:
①類型與中括號緊挨相連來表示數(shù)組,即中括號寫在數(shù)組名之前。
而當注解與注釋同時存在時,統(tǒng)一的規(guī)范要求為:
②添加在類、方法、構造函數(shù)、成員屬性上的注解直接寫在注釋塊之后,每個注解獨占一行。
當同時存在多個修飾符時,需要按照順序書寫,順序要求如下:
public protected private abstract static final transient volatile synchronized native strictfp
排在首位的一定是訪問修飾符,隨后是abstract,即抽象類或抽象方法,緊接著是static、final。這是常見的幾類修飾符,對于其他的修飾符,可以參考以上列舉的順序進行書寫。
為避免小寫字母l與1混淆,有如下規(guī)定:
長整型數(shù)字必須使用大寫字母L結尾,以便于和數(shù)字1進行區(qū)分。
四、命名規(guī)范
在Java中無論是方法名還是類名,均需使用駝峰命名格式進行命名。
01
駝峰命名格式
對于兩種駝峰命名格式的使用范圍,有如下規(guī)范:
①方法名、參數(shù)名、成員變量、局部變量都統(tǒng)一使用lowerCamelCase風格,即首字母小寫的駝峰命名格式。
②類名使用UpperCamelCase風格,即首字母大寫的駝峰命名格式,以下情形例外:DO/BO/DTO/VO/AO/PO/UID等。
02
類的命名格式
除此之外,對于一些類,命名格式有更加具體的規(guī)范要求:
①抽象類命名使用Abstract或Base開頭;
②異常類命名使用Exception結尾;
③測試類命名以它要測試的類的名稱開始,以Test結尾。
03
常量命名格式
而對于常量的命名,規(guī)范與上所述有所不同:
①常量命名全部大寫,單詞間用下劃線隔開。
②不允許任何未經預先定義的常量直接出現(xiàn)在代碼中。
五、OOP規(guī)約
OOP規(guī)約主要是針對面向對象編程過程中定義的一些類所制定的一些規(guī)則。
包含的強制規(guī)范要求有:
①所有的POJO類屬性必須使用包裝數(shù)據(jù)類型,禁止使用基本類型。
②所有的覆寫方法,必須加@Override注解。
③Object的equals方法容易拋空指針異常,應使用常量或確定有值的對象來調用equals。
④定義DO/DTO/VO等POJO類時,均不要設定任何屬性默認值。
六、集合處理規(guī)范
集合和數(shù)組是我們開發(fā)過程中使用頻度最高的兩個數(shù)據(jù)結構,對于二者的使用也有嚴格的強制規(guī)范:
①當需要將集合轉換為數(shù)組時,必須使用集合的toArray方法,傳入的是類型完全一樣的數(shù)組,大小是list.size()。
②對一個集合求子集合時,需高度注意對原集合元素的增加或刪除,均會導致子列表的遍歷、增加、刪除,產生ConcurrentModificationException異常。應通過對子集合進行相應操作,來反射到原集合,從而避免異常的發(fā)生。
③不要在循環(huán)體內部進行集合元素的remove/add操作。remove元素請使用Iterator(迭代器)方式,如果并發(fā)操作,需要對Iterator對象加鎖。
七、控制語句規(guī)范
Java中的控制語句主要有switch、if、else、while等,這些語句的使用在編碼過程中需要遵循以下規(guī)范:
①在一個switch塊內,每個case要么通過break/return等來終止,要么注釋說明程序將繼續(xù)執(zhí)行到哪一個case為止;在一個switch快內,都必須包含一個default語句并且放在最后。
②使用if/else/for/while/do語句必須使用花括號。即使只有一行代碼,避免采用單行的編碼方式。
③在高并發(fā)場景中,避免使用“等于”判斷作為中斷或退出的條件。防止在擊穿現(xiàn)象下,程序無法正常中斷或退出的情況發(fā)生。
八、注釋規(guī)約
合理使用注釋可以提高程序可讀性,便于后期維護。注釋可以是程序說明,也可以是編程思路。Java中的注釋主要分三種形式:文檔注釋、單行注釋和多行注釋。注釋規(guī)約包括:
①類、類屬性、類方法的注釋必須使用文檔注釋形式,即使用 /內容/ 格式,不得使用單行注釋的格式。單行注釋和多行注釋主要使用在方法體內。
②方法內部單行注釋,在被注釋語句上方另起一行,使用//注釋。方法內部多行注釋,使用/內容/注釋,注意與代碼對齊。
九、異常處理規(guī)范
在Java中,我們通常使用try catch來進行捕獲異常處理,而Java中的異常又分為運行時異常和非運行時異常。
① 對于處理運行時異常,有如下規(guī)范:Java類庫中定義的可以通過預檢查方式規(guī)避的RuntimeException異常不應該通過try catch的方式來處理,比如:空指針異常和數(shù)組越界異常等等。
② 對于捕獲后異常的處理,有如下規(guī)范:捕獲異常是為了處理異常,不要捕獲后不進行任何處理而將其拋棄。若不想進行異常的處理,應將該異常拋給它的調用者。最外層的業(yè)務使用者必須處理異常,將其轉化為用戶可以理解的內容。即對于捕獲后的異常,要么繼續(xù)向上拋,要么自己進行處理。
③異常處理的規(guī)范要求還包括:不能在finally塊中使用return語句。
十、缺陷檢查規(guī)則
缺陷檢查主要是對Java源代碼進行靜態(tài)分析,掃描其中潛在的缺陷,比如:空指針異常、死循環(huán)等,這一階段所應遵循的規(guī)則包括:
①不能使用單個字符定義StringBuffer和StringBuilder。
②任何上鎖的對象均需保證其鎖可以被釋放。
③嚴格避免死循環(huán)的發(fā)生。
④對于字符串中的點號(“.”)、豎線(“|”)和文件分隔符(“File.separator”)進行替代時,需要注意其特殊含義。
“.”:匹配任意單個字符。在replaceAll中使用,它匹配所有內容。
“|”:通常用作選項分隔符,它匹配字符間的空格
“File.separator”:匹配特定平臺的文件路徑分隔符。在Windows上,這將被視為轉義字符。
⑤當synchronize對成員變量進行上鎖時,該成員變量必須是final類型的。
⑥synchronize上鎖的成員變量類型一定不能是裝箱類型。
⑦所有被spring托管的類,其成員屬性的初始化均要使用注入的方式。
⑧當使用try catch方式進行異常捕獲,且需要在catch中對異常信息進行輸出時,不得使用printStackTrace的方式。這種方式會導致后期分析代碼困難。而應采用一些Log框架,方便用戶檢索和瀏覽日志。
⑨方法返回值包含操作狀態(tài)代碼時,該狀態(tài)碼不應被忽略
⑩【%s】數(shù)組具有協(xié)變性,元素賦值類型與初始化類型不一致,此種情況可通過編譯,但運行階段會發(fā)生錯誤。
?對于用戶名和密碼不應直接寫在Java的文件中,避免泄露。而應將相應關鍵信息寫在配置文件中進行讀取。
?方法和成員變量的命名不應相同,也不應通過大小寫來進行區(qū)分。
關于Java的十類代碼檢查規(guī)則
今天就講解到這了
學完是不是感覺掌握了一個億!
總結
以上是生活随笔為你收集整理的代码检查规则:Java语言案例详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单元测试实践
- 下一篇: 百度智能云人脸活体检测系统获得公安部一所