成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從靜態代碼分析工具的檢測規則學習代碼優化技巧

開發 后端
講起靜態代碼分析工具,估計大家耳熟能詳的都能講出幾個來,像PMD, Checkstyle, Findbug等。

講起靜態代碼分析工具,估計大家耳熟能詳的都能講出幾個來,像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

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

 

 

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

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

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

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

 

 

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

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

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

 

 

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

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

Good Luck!

Yours Matthew!

【編輯推薦】

  1. 何時創建Java對象實例
  2. Java多線程程序設計詳細解析
  3. Java在Client/Server中應用
  4. Java多線程程序設計詳細解析
責任編輯:金賀 來源: 博客園
相關推薦

2021-06-08 13:56:34

工具靜態代碼

2024-09-14 11:23:19

2012-05-22 00:28:21

JavaJava開源開源工具

2023-05-11 07:42:04

doop漏洞

2012-07-23 10:22:15

Python性能優化優化技巧

2017-05-10 14:27:29

靜態代碼漏洞安全

2009-11-27 13:24:20

PHP代碼性能優化

2011-08-02 10:13:30

Java工具

2013-04-08 10:47:42

Xcode靜態代碼分析

2023-09-14 22:57:52

2022-04-07 10:02:58

前端檢測工具

2021-01-05 09:25:27

DockerSemgrep代碼靜態分析工具

2015-09-15 08:30:23

Android代碼優化

2024-01-08 13:47:00

代碼分析工具

2011-06-14 11:14:10

性能優化代碼

2020-12-07 14:46:07

程序員代碼分析工具

2021-03-29 23:05:36

程序員工具靜態分析

2017-07-18 11:12:39

環境設置內存分析Python

2022-11-24 10:34:05

CSS前端

2022-01-19 08:00:00

靜態代碼動態代碼開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线不卡 | 一区二区三区免费 | 国产电影一区二区在线观看 | 国际精品鲁一鲁一区二区小说 | 欧美性成人| 九九久久在线看 | 人人澡人人射 | 国产一区二区免费在线 | 欧美一级黄| 亚洲36d大奶网 | 国产黄色精品在线观看 | 9porny九色视频自拍 | av手机在线看 | 中文字幕一区二区不卡 | 午夜精品在线 | 亚洲www| 国产线视频精品免费观看视频 | caoporn免费| 天天干夜夜操 | 日日干夜夜操天天操 | 亚洲一区欧美 | 俺去俺来也www色官网cms | 免费在线看黄视频 | 久久免费看| 成人日批视频 | 国产日韩久久久久69影院 | 最新日韩av | 国产精品成人一区二区三区 | av性色全交蜜桃成熟时 | 天天干天天谢 | 999精品视频 | 欧美性猛交一区二区三区精品 | 国产精品国产三级国产aⅴ中文 | 成人精品视频在线观看 | www网站在线观看 | 国内精品免费久久久久软件老师 | 久久噜噜噜精品国产亚洲综合 | 一区二区精品 | 国产成人久久av免费高清密臂 | 久久午夜视频 | 国产综合久久久久久鬼色 |