Java中常見的代碼沖突

在工作中,最近我對現有Java項目進行了代碼清理。 完成該練習后,我可以看到在代碼中一次又一次地發生了一組常見的代碼沖突。 因此,我想出了此類常見違規的清單,并與同行分享,以使人們有意識地提高代碼質量和可維護性。 我在這里將清單分享給更多的聽眾。

列表不是按任何特定順序排列的,而是從所有代碼質量工具(如CheckStyle , FindBugs和PMD)強制執行的規則中得出的。

開始了!

在Eclipse中格式化源代碼并組織導入:

Eclipse提供了自動格式化源代碼和組織導入(從而刪除未使用的導入)的選項。 您可以使用以下快捷鍵來調用這些功能。

  • Ctrl + Shift + F –格式化源代碼。
  • Ctrl + Shift + O –組織導入并刪除未使用的導入。

您可以告訴Eclipse在保存文件時自動格式化和自動組織,而不必手動調用這兩個函數。 為此,在Eclipse中,轉到窗口->首選項-> Java->編輯器->保存操作 ,然后啟用在保存時執行選定的操作,并選中格式化源代碼 + 組織導入避免方法中的多次返回(退出點):

在您的方法中,請確保只有一個出口點 。 在方法主體中不要在多個地方使用return。

例如,下面的代碼是不推薦的,因為它有一個以上的退出點(返回語句)。

private boolean isEligible(int age){if(age > 18){return true;}else{return false;}
}

上面的代碼可以這樣重寫(當然,下面的代碼仍然可以改進,但是稍后會介紹)。

private boolean isEligible(int age){boolean result;if(age > 18){result = true;}else{result = false;}return result;
}


簡化if-else方法:

我們編寫了幾種實用程序方法,這些方法采用一個參數,檢查某些條件并根據條件返回一個值。 例如,考慮您在上一點中剛剛看到的isEligible方法。

private boolean isEligible(int age){boolean result;if(age > 18){result = true;}else{result = false;}return result;
}

整個方法可以重寫為單個return語句,如下所示。

private boolean isEligible(int age){return age > 18;
}


不要創建布爾,整數或字符串的新實例:

避免創建Boolean,Integer,String等新實例。例如,不要使用new Boolean(true) ,而應使用Boolean.valueOf(true) 。 后面的語句具有與前一個語句相同的效果,但是它提高了性能。

在塊語句周圍使用花括號。

不要忘記在塊級語句周圍使用花括號,例如ifforwhile 。 這樣可以減少代碼的歧義,并避免在修改塊級語句時引入新錯誤的機會。

不建議

if(age > 18)result = true;
elseresult = false;

推薦的

if(age > 18){result = true;
}else{result = false;
}


在適用的情況下,將方法參數標記為最終參數:

在適用的情況下,始終將方法參數標記為最終參數。 如果這樣做,不小心修改了參數的值,則會收到編譯器警告。 而且,它使編譯器可以更好地優化字節碼。

推薦的

private boolean isEligible(final int age){ ... }


在大寫字母中命名公共靜態最終字段:

始終在大寫中命名公共靜態最終字段(也稱為常量 )。 這使您可以輕松地區分常量字段和局部變量。

不建議
public static final String testAccountNo = '12345678';

推薦的
public static final String TEST_ACCOUNT_NO = '12345678';

將多個if語句合并為一個:

盡可能將多個if語句合并為一個。

例如下面的代碼;

if(age > 18){if( voted == false){// eligible to vote.}
}

可以組合為單個if語句,例如:

if(age > 18 && !voted){// eligible to vote
}


開關應該具有默認值

始終為switch語句添加默認大小寫。

避免重復的字符串文字,而是創建一個常量:

如果必須在多個地方使用字符串,請避免將其用作文字。 而是創建一個String常量并使用它。

例如,從下面的代碼中,

private void someMethod(){logger.log('My Application' + e);........logger.log('My Application' + f);
}

字符串文字“我的應用程序”可以制成常量,并在代碼中使用。

public static final String MY_APP = 'My Application';private void someMethod(){logger.log(MY_APP + e);........logger.log(MY_APP + f);
}


其他資源:

  • Java最佳實踐的集合。
  • 可用Checkstyle檢查的列表。
  • PMD規則集列表

參考:我們的JCG合作伙伴 Veera Sundar博客上的Java常見Java代碼違規 。


翻譯自: https://www.javacodegeeks.com/2012/09/common-code-violations-in-java.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

np讀取csv文件_被 Pandas read_csv 坑了

-- 不怕前路坎坷,只怕從一開始就走錯了方向Pandas 是python的一個數據分析包,納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。Pandas 就是為解決數據分析任務生的,無論是數據分析還是機器學習項目數據預…

Python 第三方庫 cp27、cp35 等文件名的含義

What does version name ‘cp27’ or ‘cp35’ mean in Python? 如對于 gensim-0.12.4-cp27-none-win_amd64.whl文件名而言,將其文件名拆分的話,含義分別是: 0.12.4 - package version, they may be using semantic versioningcp27 - this p…

JAVA: 序列化

對象序列化 - 一個對象可以被表示為一個字節序列,保存對象的類型信息、對象的數據,還有對象中的數據類型,以便存儲或傳輸。 反序列化 - 將序列化對象寫入文件之后,可以從文件中讀取出來,并且對它進行反序列化&#xff…

尋找隨機的錯誤-一個真實的故事

幾周前,我完成了RapidFTR開源項目的錯誤查找 ,這花了我三個晚上。 我認為可能值得分享狩獵的故事。 本文將介紹我的工作。 我將概述我的旅程,以實際找到正在發生的事情的根本原因。 我在本文中的目標是突出顯示可以使用的技術示例&#xff0c…

鈴木uy125摩托車機油_UY125 新瑞夢UM125發布 濟南鈴木于湖南株洲吹響國IV集結號...

?4月18日,濟南鈴木在湖南株洲天臺開元酒店舉行了2019年新品發布會,并于現場發布了兩款極具終端戰略意義的新款國IV車型,分別為定位“實用運動”的全新個性化踏板車型UY125,以及能夠進一步鞏固濟南鈴木在國IV入門級踏板車型領域絕…

473. 核電站問題

★ 輸入文件:nucle.in 輸出文件:nucle.out 簡單對比 時間限制:1 s 內存限制:128 MB 【問題描述】 一個核電站有 N 個放核物質的坑,坑排列在一條直線上。如果連續 M 個坑中放入核物質,則會發生爆炸&…

js判斷時間是早上還是下午_牛奶早上喝好,還是晚上喝好?沒想到“最佳時間”是這個點,顛覆了!...

都說喝牛奶好,要多喝。可什么時間喝牛奶最好呢?是飯前、飯后還是睡前?又或者喝酒前?確實得好好說說。傳言:空腹時身體比較缺能量,牛奶里的蛋白會去提供能量,不會去構成和修復組織(比如修復皮膚)…

Java模因拒絕死亡

也有標題; 我的寵物討厭Java編碼。 有許多Java模因讓我很煩,部分是因為它們總是一個壞主意,但主要是因為人們在找到更好的替代方案后的幾年里仍在繼續使用它們。 使用StringBuffer代替StringBuilder 從2004年開始,用于StringBuf…

Python TK編程第一部分 Hello Again

當你想寫大一點的程序的時候,將你的代碼封裝到一個或者多個類里會是一個不錯的辦法。下面hello world這個例子來自Matt Conway的Tkinter Life Preserver. [python]view plain copy from Tkinter import * class App: def __init__(self, master): …

視網膜脫離oct報告圖_剛剛,愛爾眼科發布關于艾芬醫生診療過程的核查報告

剛剛,愛爾眼科醫院集團發布關于艾芬女士診療過程的核查報告,內容如下:得悉艾芬女士對武漢愛爾眼科醫院白內障診療存疑,愛爾眼科醫院集團高度重視,第一時間成立了工作組奔赴武漢,對事件的診療全過程開展了核…

20145233《網絡對抗》第二周 后門原理與實踐

20145233《網絡對抗》第二周 后門原理與實踐 實驗內容 windows主機與kali虛擬機實現互聯互通使用netcat獲取主機操作Shell,cron啟動使用socat獲取主機操作Shell, 任務計劃啟動使用MSF meterpreter生成可執行文件,利用ncat或socat傳送到主機并運行獲取主機…

Spring 3.1:緩存和EhCache

如果在網上查找使用Spring 3.1內置緩存的示例,那么通常會碰到Spring的SimpleCacheManager ,Spring的家伙說這對“用于測試或簡單的緩存聲明很有用”。 實際上,我更喜歡將SimpleCacheManager看作是輕量級的,而不是簡單的。 在您希望…

mysql-表完整性約束

閱讀目錄 一 介紹二 not null與default三 unique四 primary key五 auto_increment六 foreign key七 總結一 介紹 回到頂部 約束條件與數據類型的寬度一樣,都是可選參數 作用:用于保證數據的完整性和一致性主要分為: PRIMARY KEY (PK) 標識…

可消費消息數量_17 個方面,綜合對比 主流消息隊列

一、資料文檔二、開發語言三、支持的協議四、消息存儲五、消息事務六、負載均衡七、集群方式八、管理界面九、可用性十、消息重復十一、吞吐量TPS十二、訂閱形式和消息分發十三、順序消息十四、消息確認十五、消息回溯十六、消息重試十七、并發度本文將從,Kafka、Ra…

opencv2.4.13+python2.7學習筆記--使用 knn對手寫數字OCR

閱讀對象:熟悉knn、了解opencv和python。 1.knn理論介紹:算法學習筆記:knn理論介紹 2. opencv中knn函數 路徑:opencv\sources\modules\ml\include\opencv2\ml\ml.hpp 3.案例 3.1數據集介紹 我們的目的是創建一個可以對手寫數字進行…

如何遠程管理Quartz

選項1:JMX 許多人問他們是否可以通過JMX管理Quartz,但我不確定為什么Quartz doc甚至不會提及它。 是的,您可以使用quartz.properties的以下命令啟用石英中的JMX org.quartz.scheduler.jmx.export true之后,您可以使用標準的JMX客…

熱啟動必須聯網嗎_供暖結束,地暖是關閉供水閥門還是關閉回水閥門?你做對了嗎?...

天氣漸漸暖和起來很多城市都停止供暖了一些家庭也停止使用地暖那么今天就來聊一聊,停止供暖后地暖系統應該怎么保養地暖不用時候是關閉供水閥門還是關閉回水閥門?供暖結束 暖氣閥門到底要不要關一般來說,我們供暖期結束是不用關閉總閥門的。因…

python學習(九) 網絡編程學習--簡易網站服務器

python 網絡編程和其他語言都是一樣的,服務器這塊步驟為:1. 創建套接字2. 綁定地址3. 監聽該描述符的所有請求4. 有新的請求到了調用accept處理請求 Python Web服務器網關接口(Python Web Server Gateway Interface,簡稱“WSGI”&…

concurrency 方面的books

http://joeduffyblog.com/2016/11/30/15-years-of-concurrency/轉載于:https://www.cnblogs.com/WCFGROUP/p/6566150.html

Spring 3.1緩存和配置

我最近在博客中談論有關Spring 3.1及其新的緩存注釋Cacheable和CacheEvict 。 與所有Spring功能一樣,您需要進行一定數量的設置,并且通常使用Spring的XML配置文件來完成。 在緩存的情況下,打開Cacheable和CacheEvict并不容易,因為…