IDEA有了這些插件刻剥,再也不用擔(dān)心編碼規(guī)范了

Mybatis Plugin插件安裝使用說明

1 介紹

為了讓開發(fā)者更規(guī)范馋记、快速地工作驰后,為了將編碼規(guī)范推進并實施起來肆资,該插件主要是在mapper接口方法和mapper XML文件之間來回切換非常方便,而且還可以自動生成xml代碼灶芝,極大的提高了開發(fā)效率郑原。

2 安裝

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"Free Mybatis plugin",點擊安裝监署,安裝完之后颤专,重啟idea,會發(fā)現(xiàn)如下出現(xiàn)的圖標(biāo)
image.png

阿里編碼規(guī)約插件安裝使用說明

1 介紹

為了讓開發(fā)者更規(guī)范、快速地工作钠乏,為了將編碼規(guī)范推進并實施起來栖秕,阿里C3P項目組研發(fā)了一套自動化的IDE檢測插件。
功能提現(xiàn)在以下三個方面:
1.手動掃描代碼后晓避,不符合規(guī)約的代碼按Blocker/Critical/Major三個等級顯示出來簇捍。
2.基于Inspection機制的實時檢測功能,編寫代碼的同時也能快速發(fā)現(xiàn)問題所在俏拱。
3.對于歷史代碼暑塑,部分規(guī)則實現(xiàn)了批量一鍵修復(fù)的功能。

2 安裝

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"Alibaba Java Coding Guidelines"锅必,點擊安裝事格,安裝完之后,重啟idea,會發(fā)現(xiàn)如下出現(xiàn)的圖標(biāo)
image.png

image.png

3 使用說明

可以分析當(dāng)前編輯的文件搞隐,也可以分析整個項目模塊代碼驹愚。


image.png

image.png

從圖中可以看出掃描結(jié)果有block錯誤(不符合命名方式);有critical錯誤和major錯誤劣纲。雙擊可以定位至代碼處逢捺,右側(cè)窗口還有代碼的批量修復(fù)功能。

Blocker/Critical/Major三個等級癞季,在 Snoar 中對代碼規(guī)則有五個級別劫瞳,這是前三個倘潜,翻譯下就是:崩潰/嚴(yán)重/重要 ,也就是說前兩級別是必須要處理掉的志于。

FindBugs-IDEA插件使用說明

1 介紹

這個插件可以幫助我們查找隱藏的bug,比較重要的功能就是查找潛在的null指針涮因。在編寫代碼的過程中,我們可能不會一直記得檢查空的引用,在我們測試時可能很難發(fā)現(xiàn)問題,但是應(yīng)用上線之后,面對大量的用戶恨憎,很多問題就會浮現(xiàn)出來蕊退。所以在編碼時,使用findbugs檢查一下很有必要憔恳。

2 安裝

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"FindBugs-IDEA"瓤荔,點擊安裝,安裝完之后钥组,重啟idea,會發(fā)現(xiàn)如下出現(xiàn)的圖標(biāo)
image.png

image.png

3 使用說明

可以分析單個文件输硝,包下面的所有文件,整個module下的文件程梦,整個project下的文件点把,右鍵想要分析的文件名/包名/module名/project
1.右鍵項目模塊


image.png

分析完之后就會出現(xiàn)結(jié)果面板


image.png

點擊對應(yīng)的item在右邊會定位到具體的代碼
image.png

根據(jù)需要可以進行更改,其中Correctness這個錯誤使我們重點關(guān)注的對象屿附,這里大多是空指針的錯誤郎逃,根據(jù)提示進行處理。
image.png

點擊如圖按鈕可分析當(dāng)前文件

4 一些常見的錯誤信息

Bad practice 代碼中的一些壞習(xí)慣

Class names should start with an upper case letter 主要包括類名的命名挺份,以大寫字母開頭

Method names should start with a lower case letter 方法名以小寫字母開頭

Field names should start with a lower case letter 字段名以小寫字母開頭

equals()method does not check for null argument equals()方法應(yīng)該檢查非空

Class defines equals() and uses Object.hashCode() 一個類覆寫了equals方法褒翰,沒有覆寫hashCode方法,使用了Object對象的hashCode方法

Method ignores exceptional return value 方法忽略返回值的異常信息

Equals method should not assume anything about the type of its argument equals(Object)方法不能對參數(shù)o的類型做任何的假設(shè)匀泊。比較此對象與指定的對象优训。當(dāng)且僅當(dāng)該參數(shù)不為 null,并且是表示與此對象相同的類型的對象時各聘,結(jié)果才為 true揣非。

Comparison of String objects using == or != 用==或者!=去比較String類型的對象

Method might ignore exception 方法可能忽略異常

Method invokes System.exit() 在方法中調(diào)用System.exit(…)語句躲因,考慮用RuntimeException來代替

Method ignores result of InputStream.read() InputStream.read方法忽略返回的多個字符早敬,如果對結(jié)果沒有檢查就沒法正確處理用戶讀取少量字符請求的情況。

Dodgy code 糟糕的代碼

Switch statement found where default case is missing Switch沒有默認(rèn)情況下執(zhí)行的case語句

Switch statement found where one case falls through to the next case Switch語句中一個分支執(zhí)行后又執(zhí)行了下一個分支大脉。通常case后面要跟break 或者return語句來跳出搁嗓。

Dead store to local variable 該指令為局部變量賦值,但在其后的沒有對她做任何使用箱靴。通常,這表明一個錯誤荷愕,因為值從未使用過衡怀。

Write to static field from instance method 在實例方法寫入靜態(tài)字段

Redundant nullcheck of value known to be non-null 方法中對不為空的值進行為空的判斷棍矛。

Method uses the same code for two branches 此方法使用相同的代碼,以實現(xiàn)兩個有條件的分支抛杨。檢查以確保這是不是一個編碼錯誤

Exception is caught when Exception is not thrown 在try/catch塊中捕獲異常够委,但是異常沒有在try語句中拋出而RuntimeException又沒有明確的被捕獲

Integral division result cast to double or float 整形數(shù)除法強制轉(zhuǎn)換為double或者float類型。

Possible null pointer dereference due to return value of called method 方法的返回值沒有進行是否為空的檢查就重新賦值怖现,這樣可能會出現(xiàn)空指針異常茁帽。

Useless object created 對象創(chuàng)建了并沒有用

Unread public/protected field 沒有用到的字段

Internationalization 關(guān)于代碼國際化相關(guān)方面的

Consider using Locale parameterized version of invoked method

使用平臺默認(rèn)的編碼格式對字符串進行大小寫轉(zhuǎn)換,這可能導(dǎo)致國際字符的轉(zhuǎn)換不當(dāng)屈嗤。使用以下方式對字符進行轉(zhuǎn)換

Performance 關(guān)于代碼性能相關(guān)方面的

Boxing/unboxing to parse a primitive
類型轉(zhuǎn)換 比如字符串轉(zhuǎn)換成int 應(yīng)該使用Integer.parseInt(“”) 代替Integer.valueOf(“”)

Method concatenates string using + in aloop
每次循環(huán)里的字符串+連接潘拨,都會新產(chǎn)生一個string對象,在java中饶号,新建一個對象的代價是很昂貴的铁追,特別是在循環(huán)語句中,效率較低 茫船。解決辦法:使用StringBuffer或者StringBuilder重用對象琅束。

Private method is never called 私有方法沒有被調(diào)用

Explicit garbage collection;extremely dubious except in benchmarking code
在代碼中顯式的調(diào)用垃圾回收命名,這樣做并不能起作用算谈。在過去涩禀,有人在關(guān)閉操作或者finalize方法中調(diào)用垃圾回收方法導(dǎo)致了很多的性能浪費。這樣大規(guī)娜谎郏回收對象時會造成處理器運行緩慢艾船。

Unread field:should this field be static? 沒有用到的static 字段

should be a static inner class 此內(nèi)部類應(yīng)該使用static修飾

Experimental

Method may fail to clean up stream or resource on checked exception
這種方法可能無法清除(關(guān)閉,處置)一個流罪治,數(shù)據(jù)庫對象丽声,或其他資源需要一個明確的清理行動 。解決方法:流的關(guān)閉都寫在finally里面

Malicious code vulnerability 關(guān)于惡意破壞代碼相關(guān)方面的

May expose internal representation by incorporating reference to mutable object
此代碼把外部可變對象引用存儲到對象的內(nèi)部表示觉义。如果實例受到不信任的代碼的訪問和沒有檢查的變化危及對象和重要屬性的安全雁社。存儲一個對象的副本,在很多情況下是更好的辦法晒骇。

Field isn’t final but should be 此字段前應(yīng)該加final

Field isn’t final and can’t be protected from malicious code 此字段前應(yīng)該加final

Field should be package protected
一個靜態(tài)字段是可以被惡意代碼或其他的包訪問修改霉撵。可以把這種類型的字段聲明為final類型的以防止這種錯誤洪囤。

Multithreaded correctness 關(guān)于代碼正確性相關(guān)方面的

Static DateFormat DateFormat 在多線程中本身就是不安全的徒坡,如果在線程范圍中共享一個DateFormat的實例而不使用一個同步的方法在應(yīng)用中就會出現(xiàn)一些奇怪的行為。

Call to static DateFormat DateFormats多線程使用本事就是不安全的,改進方法:需要創(chuàng)建多實例或線程同步

Correctness 關(guān)于代碼正確性相關(guān)方面的

Nullcheck of value previously dereferenced 此代碼之前廢棄null值檢查瘤缩。解決辦法 進行null檢查

Possible null pointer dereference 可能為null

Null pointer dereference 對象賦為null值后 沒有被重新賦值

Possible null pointer dereference in method on exception path 在異常null值處理分支調(diào)用的方法上喇完,可能存在對象去除引用操作

value is null and guaranteed to be dereferenced on exception path exception分支上,存在引用一個null對象的方法剥啤,引發(fā)空指針異常锦溪。

Self comparison of value with itself 方法中對一個局部變量自身進行比較運算不脯,并可說明錯誤或邏輯錯誤。請確保您是比較正確的事情刻诊。

An apparent infinite recursive loop 明顯的無限迭代循環(huán),將導(dǎo)致堆棧溢出.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末防楷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子则涯,更是在濱河造成了極大的恐慌复局,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粟判,死亡現(xiàn)場離奇詭異亿昏,居然都是意外死亡,警方通過查閱死者的電腦和手機浮入,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門龙优,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人事秀,你說我怎么就攤上這事彤断。” “怎么了易迹?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵宰衙,是天一觀的道長。 經(jīng)常有香客問我睹欲,道長供炼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任窘疮,我火速辦了婚禮袋哼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闸衫。我一直安慰自己涛贯,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布蔚出。 她就那樣靜靜地躺著弟翘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骄酗。 梳的紋絲不亂的頭發(fā)上稀余,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音趋翻,去河邊找鬼睛琳。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掸掏。 我是一名探鬼主播茁影,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丧凤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起步脓,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤愿待,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后靴患,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仍侥,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年鸳君,在試婚紗的時候發(fā)現(xiàn)自己被綠了农渊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡或颊,死狀恐怖砸紊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囱挑,我是刑警寧澤醉顽,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站平挑,受9級特大地震影響游添,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜通熄,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一唆涝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唇辨,春花似錦廊酣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗡贺,卻和暖如春隐解,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诫睬。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工煞茫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓续徽,卻偏偏與公主長得像蚓曼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钦扭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容