目錄
· Malicious code vulnerability 可能受到的惡意攻擊
· Multithreaded correctness 多線程的正確性
Alibaba Java Coding Guidelines
- 插件的安裝跟IntelliJ IDEA的版本是有關係的。
- 建議下載插件使用IntelliJ IDEA內置的插件庫下載,File->Settings->Plugins或者Ctrl+Alt+s->Plugins
- 如果內置插件庫下載不了,請訪問:https://plugins.jetbrains.com/
FindBugs-IDEA
作用:
FindBugs 它用來查找Java代碼中存在的bug。它使用靜態分析方法標識出Java程序中上百種潛在的不同類型的錯誤。
FindBugs支持對包級別、項目級別、模塊級別、單個文件級別,以及自定義範圍的Bug分析。
FindBugs:特色是能夠檢查出空指針異常這種bug!
成功標誌:
重啓idea後左下角如果插件加載成功出現:
實際應用:
掃描完成後:
FindBugs的Bug種類說明
· Bad practice 壞的實踐
一些不好的實踐,下面列舉幾個:
- HE: 類定義了equals(),卻沒有hashCode();或類定義了equals(),卻使用Object.hashCode();或類定義了hashCode(),卻沒有equals();或類定義了hashCode(),卻使用Object.equals();類繼承了equals(),卻使用Object.hashCode()。
- SQL:Statement 的execute方法調用了非常量的字符串;或Prepared Statement是由一個非常量的字符串產生。
- DE: 方法終止或不處理異常,一般情況下,異常應該被處理或報告,或被方法拋出。
- 類名小寫問題:
· Malicious code vulnerability 可能受到的惡意攻擊
如果代碼公開,可能受到惡意攻擊的代碼,下面列舉幾個:
- FI: 一個類的finalize()應該是protected,而不是public的。
- MS:屬性是可變的數組;屬性是可變的Hashtable;屬性應該是package protected的。
· Correctness 一般的正確性問題
可能導致錯誤的代碼,下面列舉幾個:
- NP: 空指針被引用;在方法的異常路徑裏,空指針被引用;方法沒有檢查參數是否null;null值產生並被引用;null值產生並在方法的異常路徑被引用;傳給方法一個聲明爲@NonNull的null參數;方法的返回值聲明爲@NonNull實際是null。
- Nm: 類定義了hashcode()方法,但實際上並未覆蓋父類Object的hashCode();類定義了tostring()方法,但實際上並未覆蓋父類Object的toString();很明顯的方法和構造器混淆;方法名容易混淆。
- SQL:方法嘗試訪問一個Prepared Statement的0索引;方法嘗試訪問一個ResultSet的0索引。
- UwF:所有的write都把屬性置成null,這樣所有的讀取都是null,這樣這個屬性是否有必要存在;或屬性從沒有被write。
· Dodgy 危險的
具有潛在危險的代碼,可能運行期產生錯誤,下面列舉幾個:
- CI: 類聲明爲final但聲明瞭protected的屬性。
- DLS:對一個本地變量賦值,但卻沒有讀取該本地變量;本地變量賦值成null,卻沒有讀取該本地變量。
- ICAST: 整型數字相乘結果轉化爲長整型數字,應該將整型先轉化爲長整型數字再相乘。
- INT:沒必要的整型數字比較,如X <= Integer.MAX_VALUE。
- NP: 對readline()的直接引用,而沒有判斷是否null;對方法調用的直接引用,而方法可能返回null。
- REC:直接捕獲Exception,而實際上可能是RuntimeException。
- ST: 從實例方法裏直接修改類變量,即static屬性。
· Performance 性能問題
可能導致性能不佳的代碼,下面列舉幾個:
- DM:方法調用了低效的Boolean的構造器,而應該用Boolean.valueOf(…);用類似Integer.toString(1) 代替new Integer(1).toString();方法調用了低效的float的構造器,應該用靜態的valueOf方法。
- SIC:如果一個內部類想在更廣泛的地方被引用,它應該聲明爲static。
- SS: 如果一個實例屬性不被讀取,考慮聲明爲static。
- UrF:如果一個屬性從沒有被read,考慮從類中去掉。
- UuF:如果一個屬性從沒有被使用,考慮從類中去掉。
· Multithreaded correctness 多線程的正確性
多線程編程時,可能導致錯誤的代碼,下面列舉幾個:
- ESync:空的同步塊,很難被正確使用。
- MWN:錯誤使用notify(),可能導致IllegalMonitorStateException異常;或錯誤的使用wait()。
- No: 使用notify()而不是notifyAll(),只是喚醒一個線程而不是所有等待的線程。
- SC: 構造器調用了Thread.start(),當該類被繼承可能會導致錯誤。
· Internationalization 國際化
當對字符串使用upper或lowercase方法,如果是國際的字符串,可能會不恰當的轉換。
Maven Helper
作用:
一鍵查看maven依賴,查看衝突的依賴,一鍵進行exclude依賴,對於大型項目 非常方便
成功標誌:
重啓idea後如果插件加載成功 打開pom文件左下角出現:
實際應用:
切換Dependency Analyzer試圖即可進行相應操作:
- Conflicts(查看衝突)
- All Dependencies as List(列表形式查看所有依賴)
- All Dependencies as Tree(樹形式查看所有依賴)
選中右鍵就可以 Exclude 啦,想用1.2就把其他版本的Exclude掉,想用1.1.3就把其他版本的Exclude掉,很方便。
Alibaba Java Coding Guidelines
作用:
阿里巴巴出品的java代碼規範插件,可以掃描整個項目找到不規範的地方 並且大部分可以自動修復 ,雖說檢測功能沒有findbugs強大,但是可以自動修復,阿里巴巴Java編碼指南插件支持。
成功標誌:
點擊上方tools,出現阿里編碼制約
實際應用:
在文件中右鍵,點擊編碼制約規範(上面成功標誌的操作也可)
下方出現:
掃描代碼後,不符合規約的代碼會按Blocker/Critical/Major三個等級顯示在下方面板中
左邊是掃描出的不符合規範的代碼,依次點進去可以看到是代碼的多少行出現了規約問題以及哪一個規約問題,右邊則是規約的詳細描述及實例代碼。
修復代碼的兩種方式
- 快捷鍵:Alt+enter,指定文件後按快捷鍵
- 自動修復:
Translation
作用:
最好用的翻譯插件,功能很強大,界面很漂亮
特徵:
- 多個翻譯引擎。多種語言的互譯。
- 文字轉語音。
- 自動選擇字。
- 自動分詞。
成功標誌:
重啓idea後如果插件加載成功右下角出現:
實際應用:
選擇單詞,右鍵:
翻譯加朗讀: