1. 程式人生 > >如何寫出更好的Java程式碼

如何寫出更好的Java程式碼

Maven仍然是編譯,打包,執行測試的標準化工具。還有其它一些選擇,比如Gradle,不過它們的採用程度遠不Maven。如果你之前沒用過Maven,你可以看下這個Maven的使用示例

我喜歡用一個根POM檔案來包含所有的外部依賴。它看起來就像是這樣。這個根POM檔案只有一個外部依賴,不過如果你的產品很大的話,你可能會有很多依賴。你的根POM檔案自己就應該是一個專案:它有版本控制,並且和其它的Java專案一樣進行釋出。

如果你覺得為每個外部依賴的修改都給POM檔案打個標籤(tag)有點太浪費了,那是你還沒有經歷過花了一個星期的時間來跟蹤專案依賴錯誤的問題。

你的所有Maven工程都應該包含你的主POM檔案以及所有的版本資訊。這樣的話,你能知道公司專案的每個外部依賴所選擇的版本,以及所有正確的Maven外掛。如果你需要引入一個外部依賴的話,大概是這樣的:

1 2 3 4 5 6 7 8 <dependencies> <dependency> <groupId>org.third.party</groupId> <artifactId>some-artifact</artifactId> </dependency> </dependencies
>

如果你需要進行內部依賴的話,應該在專案的段中單獨進行維護。不然的話,主POM檔案的版本號就要瘋漲了。

依賴收斂

Java的一個最好的地方就是有大量的第三方庫,它們無所不能。幾乎每個API或者工具都有相應的Java SDK,並且可以很容易地引入到Maven中來。

所有的這些Java庫自身可能又會依賴一些特定的版本的其它類庫。如果你引入了大量的庫,可能會出現版本衝突 ,比如說像這樣:

1234Foo library depends on Bar library v1.0Widget library depends
on Bar library v0.9

你的工程應該引入哪個版本?

有了Maven的依賴收斂的外掛後,如果你的依賴版本不一致的話,編譯的時候就會報錯。那麼你有兩種解決衝突的方案:

  • 在dependencyManagement區中顯式地選擇某個版本的bar。
  • Foo或者Widget都不要依賴Bar。

到底選擇哪種方案取決你的具體情況: 如果你想要跟蹤某個工程的版本,不依賴它是最好的。另一方面,如果你想要明確一點,你可以自己選擇一個版本,不過這樣的話,如果更新了其它的依賴,也得同步地修改它。

持續整合

很明顯你需要某種持續整合的伺服器來不斷地編譯你的SNAPSHOT版本,或者對Git分支進行構建。

程式碼覆蓋率也很重要,Cobertura有一個不錯的Maven外掛,並且對CI支援的也不錯。當然還有其它的程式碼覆蓋的工具,不過我用的是Cobertura。

Maven庫

你需要一個地方來儲存你編譯好的jar包,war包,以及EAR包,因此你需要一個程式碼倉庫。

常見的選擇是Artifactory或者Nexus。兩個都能用,並且各有利弊。

你應該自己進行Artifactory/Nexus的安裝並且將你的依賴做一份映象。這樣不會由於下載Maven 庫的時候出錯了導到編譯中斷。

配置管理

那現在你的程式碼可以編譯了,倉庫也搭建起來了,你需要把你的程式碼帶出開發環境,走向最終的釋出了。別馬虎了,因為自動化執行從長遠來看,好處是大大的。

ChefPuppet,和Ansible都是常見的選擇。我自己也寫了一個可選方案,Squadron。這個嘛,當然了,我自然是希望你們能下載下它的,因為它比其它那些要好用多了。

不管你用的是哪個工具,別忘了自動化部署就好。

可能Java最好的特性就是它擁有的這些庫了。下面列出了一些庫,應該絕大多數人都會用得上。

Java的標準庫,曾經還是很不錯的,但在現在看來它也遺漏掉了很多關鍵的特性。

Apache Commons

  • Commons Codec有許多有用的Base64或者16進位制字串的編解碼的方法。別浪費時間自己又寫一遍了。
  • Commons Lang是一個字串操作,建立,字符集,以及許多工具方法的類庫。
  • Commons IO,你想要的檔案相關的方法都在這裡了。它有FileUtils.copyDirectory,FileUtils.writeStringToFile, IOUtils.readLines,等等。

Guava

Guava是一個非常棒的庫,它就是Java標準庫”所缺失的那部分”。它有很多我喜歡的地方,很難一一贅述,不過我還是想試一下。

  • Cache,這是一個最簡單的獲取記憶體快取的方式了,你可以用它來快取網路訪問,磁碟訪問,或者幾乎所有東西。你只需實現一個CacheBuilder,告訴Guava如何建立快取就好了。
  • 不可變集合。這裡有許多類:ImmutableMap, ImmutableList,甚至還有ImmutableSortedMultiSet,如果這就是你想要的話。

我還喜歡用Guava的方式來新建可變集合:

1 2 3 4 5 6 7 // Instead of finalMap<String,Widget>map=newHashMap<String,Widget>(); // You can use finalMap<String,Widget>map=Maps.newHashMap();

有許多像Lists, Maps, Sets的靜態類,他們都更簡潔易懂一些。

如果你還在堅持使用Java 6或者7的話,你可以用下Collections2,它有一些諸如filter和transform的方法。沒有Jvaa 8的stream的支援,你也可以用它們來寫出連貫的程式碼。

Guava也有一些很簡單的東西,比如Joiner,你可以用它來拼接字串,還有一個類可以用來處理中斷

Gson

Google的Gson是一個簡單高效的JSON解析庫。它是這樣工作的:

123456finalGson gson=newGson();finalString

相關推薦

如何的程式設計,程式碼

          在程式碼的追求上應該是——“精簡高效”“規範”“複用”“考慮全面”“異常處理”“記憶體釋取有始有終” 個人在程式設計過程,結合以上的文章總結下體會:在寫的時候應該主要站在專案的可擴充套件性、程式碼的複用性以及做到少量程式碼做更多的事的角度來寫程式碼。

如何程式碼(文末有福利)

女主宣言我們在過去的幾期推送裡已經給大家介紹了筆者根據多年研發經驗總結出來的編碼規範和 git

如何Java程式碼

Maven仍然是編譯,打包,執行測試的標準化工具。還有其它一些選擇,比如Gradle,不過它們的採用程度遠不Maven。如果你之前沒用過Maven,你可以看下這個Maven的使用示例。我喜歡用一個根POM檔案來包含所有的外部依賴。它看起來就像是這樣。這個根POM檔案只有一個外部依賴,不過如果你的產品很大的話,

JavaScript的5個技巧幫助你的條件語句

使用JavaScript時,我們會遇到很多的條件語句,這裡有5個技巧能幫助你寫出更好/簡潔的條件語句。 對多個條件使用Array.includes 更少巢狀,儘早return 使用預設的函式引數和解構 支援Map / Object 語法而不是Sw

5個小技巧讓你的 JavaScript 條件語句

來源:掘金,譯者:Hopsken 連結:https://juejin.im/post/5bb9e3085188255c352d7326 作者:@Jecelyn Yeen 原文:https://scotch.io/tutorials/5-tips-to-write-better-conditi

shellcheck 幫助你的指令碼

簡介 shellcheck 是一款實用的 shell指令碼靜態檢查工具。 首先,可以幫助你提前發現並修復簡單的語法錯誤,節約時間。每次都需要執行才發現寫錯了一個小地方,確實非常浪費時間。 其次,可以針對你當前不夠完善不夠健壯的寫法,提供建議,幫助你提前繞開一些坑,避免等問題真的發生了才去除錯處理。 在其

怎樣高效能的 Java 程式碼

在這篇文章中,我們將討論幾個有助於提升Java應用程式效能的方法。我們首先將介紹如何定義可度量的效能指標,然後看看有哪些工具可以用來度量和監控應用程式效能,以及確定性能瓶頸。 我們還將看到一些常見的Java程式碼優化方法以及最佳編碼實踐。最後,我們將看看用於提升Java應用程式效能的JVM調優技巧和架構調整

五個小技巧讓你的 JavaScript 條件語句

在使用 JavaScript 時,我們常常要寫不少的條件語句。這裡有五個小技巧,可以讓你寫出更乾淨、漂亮的條件語句。 1. 使用 Array.includes 來處理多重條件 舉個栗子: // 條件語句 function test(fruit) { if (

如何優雅的java程式碼

一、不要使用魔法數字,儘量定義列舉、常量、巨集: 我常常見到表示各種狀態的數字,0,1,2....,我真的不知道這表示什麼含義,如果 你在不在文件中說明的話,這個東東過幾天連你自己都不知道個一二三了。 二、命名要具有描述力,儘量使用全名而不是自創的縮寫,除非地球人都這麼用這

前端程式碼開發規範。web開發規範。web開發注意事項。前端開發如何規範的程式碼

一、圖片觀看:二、文字描述:1,web開發基本原則:    1.結構html,樣式css,行為js:三者要分離,儘量確保文件和模板只包含HTML結構,樣式都放到樣式表裡,行為都放到腳本里;     2.縮排:統一縮排方式:整體tab /整體空格;     3.檔案編碼:在HT

如何優美的java程式碼(轉載)

一、不要使用魔法數字,儘量定義列舉、常量、巨集: 我常常見到表示各種狀態的數字,0,1,2....,我真的不知道這表示什麼含義,如果 你在不在文件中說明的話,這個東東過幾天連你自己都不知道個一二三了。二、命名要具有描述力,儘量使用全名而不是自創的縮寫,除非地球人都這麼用這個縮

介紹一些有助於Go程式的工具

 前面講了測試和效能調優之類,這篇主要講如何利用Go提供的一些工具和引數,幫助寫出更好的程式碼. 一. golint 檢查程式碼規範 二. go vet 檢查程式碼存在的隱患 三. -race 檢查是

9條消除if...else的錦囊妙計,助你優雅的程式碼

### 前言 最近在做程式碼重構,發現了很多程式碼的爛味道。其他的不多說,今天主要說說那些又臭又長的if...else要如何重構。 在介紹更更優雅的程式設計之前,讓我們一起回顧一下,不好的if...else程式碼 ### 一、又臭又長的if...else 廢話不多說,先看看下面的程式碼。 ``` publ

Java 11正式釋出,這8個逆天新特性教你牛逼的程式碼

美國時間09月25日,Oralce正式釋出了Java 11,這是據Java 8以後支援的首個長期版本。 為什麼說是長期版本,看下面的官方釋出的支援路線圖表。 圖片 可以看Java 8擴充套件支援到2025年,而Java 11擴充套件支援到2026年。 現在大部分都在用Java

Java 11 正式釋出,這 8 個逆天新特性教你牛逼的程式碼

點選上方“程式人生”,選擇“置頂公眾號”第一時間關注程式猿(媛)身邊的故事作者R哥已獲原作者授權

Java 11正式釋出,這幾個逆天新特性教你牛逼的程式碼

   1就在前段時間,Oracle 官方宣佈 Java 11 (18.9 LTS) 正式釋出,可在生產環境中使用! 這無疑對我們來說是一大好的訊息。作為一名java開發者來說,雖然又要去學習和了解java11,但內心還是欣慰的。我想至少你和我一樣的心情:Java在手,天

Java 11 正式發布,這 8 個逆天新特性教你牛逼的代碼

cti leo clas data 系列 end put The async 美國時間 09 月 25 日,Oralce 正式發布了 Java 11,這是據 Java 8 以後支持的首個長期版本。 為什麽說是長期版本,看下面的官方發布的支持路線圖表。 Java 11 正式發

幾個簡單的技巧讓你的vue.js程式碼優雅

本文參考自油管上某個國外大神的公開演講視訊,學習了一下覺得很不錯,所以在專案中也使用了這些不錯的技巧。 1. watch 與 computed 的巧妙結合 如上圖,一個簡單的列表頁面。 你可能會這麼做: created(){ this.fetchData() }, watch: { keyword(

{@link}與@see的簡單使用以及區別--如何Java程式碼註釋。

寫程式碼的時候,有時候,你需要寫一些註釋,把內容相互關聯起來,方便自己或別人看的時候,可以直接找到你關聯的程式碼類或者啥的。 這個時候,{@link}與@see,這2個javadoc註解就派上用場了,

【10000+文章匯總】技巧都在這裏了,你也能1w+文!

51cto博客 10000+ 自 #我要10000+# 計劃啟動以來,已經有多位作者參與其中,我們通過文章專屬推廣渠道,取得了驚人的效果!單篇文章的閱讀量,最高達到55倍的閱讀量增長。從默默無聞,到有人喜歡,獲得關註的同時,打造個人影響力。現在讓我們來看看,這些 10000+ 好文,都有哪些~標題閱讀