日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
從靜態(tài)代碼分析工具的檢測規(guī)則學習代碼優(yōu)化技巧

講起靜態(tài)代碼分析工具,估計大家耳熟能詳?shù)亩寄苤v出幾個來,像PMD, Checkstyle, Findbug等。沒錯這些都是我們日常編碼代碼時用于提升我們代碼質量的好工具,本文將從PMD工具實現(xiàn)的規(guī)則出發(fā),通過這些規(guī)則的定義來學習一下代碼優(yōu)化的技巧,希望通過這些技巧的介紹可以幫助大家在編碼過程中提升大家的代碼編寫質量。同時也算給大家介紹一個比較不錯的途徑去學習改進代碼編寫質量的方法。

下面都是從PMD規(guī)則中總結的一部分代碼優(yōu)化建議:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6.非線程安全的單例實現(xiàn) NonThreadSafeSingleton

下面代碼是單例實現(xiàn)中比較常見的一種

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

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

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

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

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

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

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

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

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

Good Luck!

Yours Matthew!

【編輯推薦】

  1. 何時創(chuàng)建Java對象實例
  2. Java多線程程序設計詳細解析
  3. Java在Client/Server中應用
  4. Java多線程程序設計詳細解析

名稱欄目:從靜態(tài)代碼分析工具的檢測規(guī)則學習代碼優(yōu)化技巧
本文路徑:http://www.dlmjj.cn/article/cdidois.html