91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

從PMD工具的規則檢測規則學習代碼優化技巧有哪些

發布時間:2022-01-11 10:23:45 來源:億速云 閱讀:181 作者:柒染 欄目:編程語言

這篇文章的內容主要圍繞從PMD工具的規則檢測規則學習代碼優化技巧有哪些進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

講起靜態代碼分析工具,估計大家耳熟能詳的都能講出幾個來,像PMD, Checkstyle, Findbug等。沒錯這些都是我們日常編碼代碼時用于提升我們代碼質量的好工具,下面將從PMD工具實現的規則出發,通過這些規則的定義來學習一下代碼優化的技巧,希望通過這些技巧的介紹可以幫助大家在編碼過程中提升大家的代碼編寫質量。同時也算給大家介紹一個比較不錯的途徑去學習改進代碼編寫質量的方法。

下面都是從PMD規則中總結的一部分代碼優化建議:

1.局部變量只被賦值一次可以聲明為final

說明: 使用final標識后,Java在編譯的時候會自動把變化替換成常量,這樣程序的運行效率就會提升

2.如果傳入長度為1的字面意義參數,這調用String.startsWith 可以使用 String.charAt(0) 方法節省運行時間

說明:關于這點比較好理解,String對象本身就是char數組,String.startsWith方法在內部處理比較復雜,又有循環比較操作,所以效率遠不及charAt操作。

“Abc”.startsWith(“A”) //bad

“Abc”.charAt(0) == ‘A’ //good

3.字符串拼接,使用StringBuffer,而不是直接使用”+”操作符進行拼接

說明: 關于這一點,大家都有認識。因為直接的String對象拼接,會產生新的String的對象進行存儲。StringBuffer則會申請一個較大的內存空間(char數組), 針對拼接,如果沒有超過char數組大小就直接追加到該數組尾部. 注意StringBuffer默認大小是16個字符,所以建議大家使用時指定創建的數組大小。

4.String 的indexOf方法,如果參數單個字母,則使用char

Abc”.indexOf (“A”) //bad

Abc”.indexOf(‘A’) //good

說明:String indexOf 方法,針對String和char的查找是使用了兩個方法,有興趣的同學可以看一下String的原代碼,查找String的方法要比查找char方法復雜,相對耗時

5.建議不要使用無參的StringBuffer構造函數(該初始長度為16個字符)

說明: 大家可能對StringBuffer有一些誤解,認為StringBuffer初始的空間比較大,但實際上其默認創建的大小只是16個字符的數組,一旦超過后,需要新申請的數組空間,這個就會有額外的開銷。

6.非線程安全的單例實現 NonThreadSafeSingleton

下面代碼是單例實現中比較常見的一種

從PMD工具的規則檢測規則學習代碼優化技巧有哪些

但這段代碼引入的一個問題,就是在多線程方式下運行,有可能會出復重新創建對象的問題。解決辦法在getFoo方法上加上 synchronized關鍵字

7.同時需要覆寫 hashCode和equals方法

說明:這個也是大家偶爾會忽視的一個問題。hashCode和equlas方法最主要的用途是在基本Hash算法的集合類中,如HashMap,等。

在HashMap實現中,其對一個對方是否相等的判斷邏輯如下:

從PMD工具的規則檢測規則學習代碼優化技巧有哪些

也就是說在HashMap中如果兩個對象相等必須是hashCode相等并且equals方法也返回相等。

那如果在一個對象中,只復寫了equals,而未復寫hashCode方法,就會造成”重復”的對象在HashSet中也會發生。

下面是一個有問題的示例代碼:

從PMD工具的規則檢測規則學習代碼優化技巧有哪些

8.BigDecimal對象初始化時,針對浮點數據值使用String參數(針對精度問題)

說明:例如 new BigDecimal(0.1) 值真正的值可能是 .1000000000000000055511151231257827021181583404541015625

感謝你的閱讀,相信你對“從PMD工具的規則檢測規則學習代碼優化技巧有哪些”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

pmd
AI

德格县| 枞阳县| 库伦旗| 麟游县| 日喀则市| 沈丘县| 运城市| 桃江县| 新晃| 敖汉旗| 浦东新区| 延寿县| 湘潭县| 临沧市| 甘肃省| 秦皇岛市| 分宜县| 武城县| 密山市| 霞浦县| 凌源市| 固安县| 岗巴县| 昌乐县| 闽侯县| 武川县| 勐海县| 明溪县| 阿瓦提县| 蓝山县| 南京市| 马关县| 孟津县| 灵台县| 望奎县| 南木林县| 陈巴尔虎旗| 和政县| 电白县| 湟源县| 新乐市|