Java開發(fā)編程的坑有哪些

這篇文章主要講解了“Java開發(fā)編程的坑有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java開發(fā)編程的坑有哪些”吧!

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、臺山網(wǎng)絡(luò)推廣、小程序開發(fā)、臺山網(wǎng)絡(luò)營銷、臺山企業(yè)策劃、臺山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供臺山建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.muchs.cn

隨處可見的 Null 值

我見過很多的代碼會把 Null 值作為返回值,當(dāng)你預(yù)期是一個(gè)字符串時(shí),意外得到了一個(gè) Null 值;當(dāng)你預(yù)期得到一個(gè) List 時(shí),意外又得到了一個(gè)  Null 值,如果你不進(jìn)行處理,那么你還會意外得到 NullPointerException. 就像下面這樣。

// 情況1 String userTag = getUserTag(); if (userTag.equals("admin")) { // NullPointerException    // ... }  // 情況2 List<String> carList = getCarList(); for (String car : carList) { // NullPointerException     // ... }

為了防止這種情況,你可以在 List 返回時(shí)給出一個(gè)空的集合而不是 Null,如果是字符串,你可以把要確定有值對象放在比較的前面。

if ("admin".equals(userTag)) {     // ... } // 或者 if (Objects.equals(userTag,"admin")){     // ... }

沒有進(jìn)行空值檢查

可能你考慮到了上面的 Null 值情況,但是在實(shí)際處理時(shí)沒有考慮空值情況,比如字符空串空串 "",或者集合為空。那么在后續(xù)處理時(shí)又有可能得到一個(gè)  NullPointerException. 所以你應(yīng)該進(jìn)行空值判斷。

String userTag = getUserTag(); if (userTag != null && userTag.trim() != "") {     // ... }  List<String> carList = getCarList(); if (carList != null && !carList.isEmpty()) {     // ... }

忽略的異常處理

異常處理總是一件煩人的事,而忽略異常似乎總有一種吸引人的魔力。我見過像下面這樣的代碼。

try {     List<String> result= request();     // ... }catch (Exception e){  }

你沒有看錯(cuò),catch  中沒有任何內(nèi)容,后來出現(xiàn)了問題,看著日志文件一片太平無跡可尋。異常是故意拋出來的,你應(yīng)該正確處理它們或者繼續(xù)拋出。而且同時(shí),你該輸出一行日志用來記錄這個(gè)異常,方便以后的問題追蹤。

沒有釋放資源

在讀取文件或者請求網(wǎng)絡(luò)資源時(shí),總是需要進(jìn)行 close 操作,這很重要,否則可能會阻塞其他線程的使用。但是初學(xué)者可能會忘記這一步操作。其實(shí)在 Java 7  開始,就提供了 try-with-resources 自動關(guān)閉資源的特性,只需要把打開的資源放入 try 中。

try (FileReader fileReader = new FileReader("setting.xml")) {     // fileReader.read();     // ... } catch (Exception e) {     e.printStackTrace(); }

像上面這樣,不需要在 finally 里手動調(diào)用 fileReader 的 close 方法關(guān)閉資源,因?yàn)榉旁?try 里的資源調(diào)用會在使用完畢時(shí)自動調(diào)用  close. 而且不管是否有異常拋出,這很實(shí)用。

ConcuretModificationException

總有一天你會遇到 ConcuretModificationException  ,然后開始百度搜索它的解決方式,這個(gè)異常最常見的場景是你在遍歷一個(gè)集合時(shí)進(jìn)行更新操作,比如像下面這樣。

List<String> list = new ArrayList<>(); list.add("a1"); list.add("b1"); list.add("b2"); list.add("c1"); for (String s : list) {     if ("b1".equals(s)) {         list.remove(s);     } }

這個(gè)異常很有用處,因?yàn)?ArrayList  不是線程安全的集合,假設(shè)你這邊一邊遍歷,另一個(gè)線程不斷更新,非線程安全集合會導(dǎo)致你的遍歷結(jié)果不正確,所以這個(gè)異常的存在是合理的。同理 HashMap  也是如此

缺少注釋

準(zhǔn)確的注釋可以救人于水火,這點(diǎn)有時(shí)候一點(diǎn)也不夸張。雖然說優(yōu)秀的代碼本身就是非常好的注釋,但是這實(shí)際開發(fā)起來,很少發(fā)生。注釋并不需要你事無巨細(xì)的一一記錄,但是你該在核心邏輯添加應(yīng)有的注釋,比如復(fù)雜邏輯的實(shí)現(xiàn)思路,當(dāng)前邏輯業(yè)務(wù)需求。某個(gè)判斷的添加原因,某個(gè)異常的發(fā)生情況等等。這可以讓你在未來的某一天需要回看現(xiàn)在的代碼時(shí)感謝自己。更可以讓你在某天的甩鍋中輕松勝出。

不進(jìn)行代碼測試

我見過有些同事在功能開發(fā)完畢后直接扔給對接同事使用,而自己卻沒有經(jīng)過任何測試,或者只是測試了某個(gè)簡單的情況。測試是開發(fā)過程中的重要環(huán)節(jié),沒有經(jīng)過嚴(yán)格測試的代碼很難說沒有問題,我覺得在功能開發(fā)完畢后至少需要單元測試,特殊用例測試,集成測試以及其他形式的測試。嚴(yán)格的測試不僅可以第一時(shí)間發(fā)現(xiàn)問題,更可以減少后面不必要的對接調(diào)試時(shí)間。

重復(fù)造輪子

你知道的,Java 社區(qū)非?;钴S,存在著大量的第三方類庫,開源作者可能花費(fèi)了數(shù)年時(shí)間去維護(hù)和完善類庫,這些類庫非常優(yōu)秀。同時(shí) JDK  也提供了大量的常用的功能封裝。這些都可以為我們的開發(fā)速度插上翅膀。所以,當(dāng)你需要一個(gè)功能時(shí)候,應(yīng)該首先看下 JDK  和已經(jīng)引入的類庫中是否已經(jīng)存在相同功能,而不是自己重復(fù)造輪子,而且大部分情況下你造的輪子還不如別人好。

下面舉些例子。

  • 你需要日志記錄,可以使用 logback.

  • 你需要網(wǎng)絡(luò)操作,可以使用 netty.

  • 你需要解析 JSON,可以使用 gson.

  • 你需要解析表格,可以使用 apache poi.

  • 你需要通用操作,可以使用 apache commons.

另外一種情況是,你可能不知道某個(gè)功能在 JDK 中已經(jīng)實(shí)現(xiàn),這時(shí)候你應(yīng)該多多查看 JDK Document. 我就在工作中見到過同事手寫字符串  split,為了獲取時(shí)間戳把 Date 對象轉(zhuǎn)換到 Calendar.

缺少必要的溝通

這個(gè)部分是和開發(fā)沒有關(guān)系的,但是這個(gè)環(huán)節(jié)往往會影響最終的開發(fā)結(jié)果。進(jìn)行具體的開發(fā)之前,你應(yīng)該詳細(xì)的溝通并理解功能的需求,這樣你才能針對具體的需求寫出不偏離實(shí)際需要的代碼。有時(shí)候你很有可能因?yàn)槿鄙俦匾臏贤?,錯(cuò)誤了理解了需求,最終在開發(fā)完畢后發(fā)現(xiàn)自己寫的功能完全沒有用處。

沒有代碼規(guī)范

代碼規(guī)范性非常重要,如果一個(gè)項(xiàng)目里充斥著各種稀奇古怪的代碼規(guī)范,會讓維護(hù)者十分頭疼。而且軟件行業(yè)高速發(fā)展,對開發(fā)者的綜合素質(zhì)要求也越來越高,優(yōu)秀的編程習(xí)慣也可以提高軟件的最終質(zhì)量。比如:標(biāo)新立異的命名風(fēng)格挑戰(zhàn)閱讀習(xí)慣;五花八門的錯(cuò)誤碼人為地  增加排查問題的難度;工程結(jié)構(gòu)混  亂導(dǎo)致后續(xù)項(xiàng)目維護(hù)艱難;沒有鑒權(quán)的漏洞代碼易被黑客攻擊;質(zhì)量低下的代碼上線之后漏洞百出等等。因?yàn)闆]有統(tǒng)一的代碼規(guī)范,開發(fā)中的問題可能層出不窮。

下面簡單列舉些應(yīng)該統(tǒng)一的開發(fā)規(guī)范。如命名風(fēng)格如何是好;常量名稱結(jié)構(gòu)怎樣;代碼格式怎么統(tǒng)一;日期時(shí)間格式如何處理;集合處理注意事項(xiàng);日志打印有無規(guī)范;前后交互具體規(guī)約等。

感謝各位的閱讀,以上就是“Java開發(fā)編程的坑有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java開發(fā)編程的坑有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁題目:Java開發(fā)編程的坑有哪些
分享路徑:http://www.muchs.cn/article14/gjggde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)頁設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化域名注冊、品牌網(wǎng)站制作、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)