Java開發人員必知必會的20種常用類庫和API

2020-12-05 Java程式設計師之家

一個有經驗的Java開發人員特徵之一就是善於使用已有的輪子來造車。《Effective Java》的作者Joshua Bloch曾經說過:「建議使用現有的API來開發,而不是重複造輪子」。在本文中,我將分享一些Java開發人員應該熟悉的最有用的和必要的庫和API。順便說一句,這裡不包括框架,如Spring和Hibernate因為他們非常有名,都有特定的功能。

本文總結了日誌、JSON解析、單測、XML解析、字節碼處理、資料庫連接池、集合類、郵件、加密、嵌入式SQL資料庫、JDBC故障診斷以及序列化等20個方面的常用類庫。都是你日常開發經常可能要用到的,現在不用不要緊,但是你要知道有這麼一篇文章可以供你參考。

不知道不可怕,可怕的是你不知道你不知道。

一、日誌相關類庫

日誌庫是很常見的,因為你在每一個項目中都需要他們。列印日誌是伺服器端應用中最重要的事情,因為日誌是你了解你的程序發生了什麼的唯一途徑。儘管JDK附帶自己的日誌庫,但是還是有很多更好的選擇可用,例如Log4jSLF4jLogBack。

Java開發人員應該熟悉日誌記錄的利弊,並且了解為什麼SLF4J要比Log4J要好。

二、JSON解析庫

在當今世界的web服務和物聯網中(IoT),JSON已經取代了XML,成為從客戶端到伺服器傳送信息的首選協議。有一個好消息和一個壞消息。壞消息是JDK沒有提供JSON庫。好消息是有許多優秀的第三方庫可以用來解析和創建JSON消息,如JacksonGson

一個Java web開發人員應該熟悉Jackson 和 Gson這兩種中的至少一種庫。

三、單元測試庫

單元測試技術的使用,是區分一個一般的開發者和好的開發者的重要指標。程式設計師經常有各種藉口不寫單元測試,但最常見的藉口就是缺乏經驗和知識。常見的單測框架有JUnit,MockitoPowerMock

四、通用類庫

有幾個很好的第三方通用庫可供Java開發人員使用,例如Apache CommonsGoogle Guava。我會經常在我的代碼中使用這些通用類庫,因為這些類庫都是經過無數開發者實踐過的,無論是實用性還是在性能等方面都是最佳的。

五、Http 庫

我不是很喜歡JDK的一個重要原因就包括他們缺乏對HTTP的支持。雖然可以使用java.net包類,但是這和直接使用像Apache HttpClientHttpCore等開源類庫比起來麻煩太多了。

儘管JDK 9將開始HTTP 2.0,也對HTTP的支持做了優化,但是我還是強烈建議所有的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。

六、XML解析庫

市面上有很多XML解析的類庫,如Xerces, JAXB, JAXP, Dom4j, Xstream等。Xerces2是下一代高性能,完全兼容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規範,並提供了一個完整、兼容標準的 XNI 規範實現。該解析器是完全重新設計和實現的,更簡單以及模塊化。

七、Excel讀寫庫

許多應用程式需要提供把數據導出到Excel的功能,如果你要做相同的Java應用程式,那麼你需要Apache POI API

這是一個非常豐富的類庫,你可以從Java程序讀寫XLS文件。

八、字節碼庫

如果你正在編寫一個框架或者類庫。有一些受歡迎的字節碼庫如javassistCglib Nodep可以供你選擇,他們可以讓你閱讀和修改應用程式生成的字節碼。

Javassist使得JAVA字節碼操作非常簡單。它是一個為編輯Java字節碼而生的類庫。ASM是另一個有用的字節碼編輯庫。

九、資料庫連接池庫

如果你的Java應用程式與資料庫交互不是使用資料庫連接池庫的話,那麼你就大錯特錯了。因為在運行時創建資料庫連接非常耗時並且會拖慢你的程序。所以牆裂建議使用,有些好用的連接池可供選擇,如Commons Pool DBCP

在web應用程式中,web伺服器通常提供了這些功能。但是在java項目中需要把資料庫連接池的類庫導入到應用中。

十、消息傳遞庫

像日誌和資料庫連接池一樣,消息傳遞也是很多實際的Java項目中必備的。Java提供了JMS Java消息服務,但這不是JDK的一部分,你需要單獨的引入jms.jar。類似地,如果您準備使用第三方消息傳遞協議,Tibco RV是個不錯的選擇。

十一、PDF處理庫

除了Excel和Word,PDF也是一種常用的文件格式。如果你的應用程式要支持PDF格式的文件處理,你可以使用iTextApache FOP類庫。兩者都提供了非常有用的PDF處理功能。

十二、日期和時間庫

在Java之前,JDK的日期和時間庫一直被人們所詬病,比如其非線程安全的、不可變的、容易出錯等。很多開發人員會選擇更好用的JodaTime類庫。

但是在Java8推出之後,我們就可以徹底放棄JodaTime了,因為Java 8提供了其所有功能。但是,如果你的代碼運行在一個低版本的JDK中,那麼JodaTime還是值得使用的。

十三、集合類庫

雖然JDK有豐富的集合類,但還是有很多第三方類庫可以提供更多更好的功能。如Apache Commons CollectionsGoldman Sachs collectionsGoogle CollectionsTrove。Trove尤其有用,因為它提供所有標準Collections 類的更快的版本以及能夠直接在原語(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。

FastUtil是另一個類似的API,它繼承了Java Collection Framework,提供了數種特定類型的容器,包括映射map、集合set、列表list、優先級隊列(prority queue),實現了java.util包的標準接口(還提供了標準類所沒有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實用的二進位或文本文件的I/O操作類。

十四、郵件API

javax.mail 和 Apache Commons Email 提供了發送郵件的api。它們建立在JavaMail API的基礎上,提供簡化的用法。

十五、HTML解析庫

和XML與JSON類似,HTML是另外一種我們可能要打交道的傳輸格式。值得慶幸的是,我們有jsoup可以大大簡化Java應用程式使用HTML。你不僅可以使用JSoup解析HTML還可以創建HTML文檔。

十六、加密庫

Apache Commons家族中的Commons Codec就提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等。

十七、嵌入式SQL資料庫庫

我真的是非常喜歡像H2這種內存資料庫,他可以嵌入到你的Java應用中。在你跑單測的時候如果你需要一個資料庫,用來驗證你的SQL的話,他是個很好的選擇。順便說一句,H2不是唯一嵌入式DB,你還有Apache DerbyHSQL可供選擇。

十八、JDBC故障診斷庫

有不錯的JDBC擴展庫的存在使得調試變得很容易,例如P6spy,這是一個針對資料庫訪問操作的動態監測框架,它使得資料庫數據可無縫截取和操縱,而不必對現有應用程式的代碼作任何修改。P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程式的所有JDBC事務的應用程式。其配置完成使用時,可以進行數據訪問性能的監測。

十九、序列化庫

Google Protocol Buffer 是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平臺無關、可擴展的序列化結構數據格式。目前提供了 C++、Java、Python 三種語言的 API。

二十、網絡庫

一些有用的網絡庫主要有Netty的和Apache MINA。如果您正在編寫一個應用程式,你需要做的底層網絡任務,可以考慮使用這些庫。

這都是每位Java開發人員應該熟悉的,並且十分有用的庫。Java生態系統非常龐大的,你會發現有很多不同的類庫可以做不同的事情。每個你想到的東西,都可能有一個庫可以做到。

要相信,你遇到的問題,肯定不止你一個遇到過。

要相信,也許有很多人比你更勤奮。

要相信,你用或不用,輪子就在那裡。

要相信,使用這些類庫,你和你的代碼都會變得更好。

作者:Hollis

相關焦點

  • java基礎教程:Collection集合,Collection 常用API
    集合:集合是java中提供的一種容器,可以用來存儲多個數據。集合和數組既然都是容器,它們有什麼區別呢?數組的長度是固定的。集合的長度是可變的。數組中存儲的是同一類型的元素,可以存儲任意類型數據。集合存儲的都是引用數據類型。如果想存儲基本類型數據需要存儲對應的包裝類型。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    Java 反射在Java的開發環境中,運行java文件需要使用:java xx.java 命令,運行java命令後,便會啟動JVM,將字節碼文件加載到JVM中,然後開始運行;當運行java命令時,該命令將會啟動一個JVM進程,在這個JVM進程中,會保存有該JVM創建的所有線程、變量、對象,這些線程、變量、對象會共享該JVM的內存區域。
  • ECharts-Java 類庫 2.2.6 版本發布
    ECharts - Java類庫當前版本2.2.6 本項目是一個供Java開發使用的ECharts的開發包,主要目的是方便在Java
  • C/C++、Java、JavaScript、PHP、Python分別用來開發什麼?
    同時,Java在手機領域也有一席之地, 在普遍智能化之前, 很多手機就是以支持java應用作為賣點的,而智慧型手機爆發之後, Java手機主場變成了Android,作為安卓的標準程式語言而存。總結:Java:網頁, 企業級開發, 普通應用軟體, 遊戲後臺。
  • aio-enhance v1.0.2 發布,Java AIO 內核增強類庫
    aio-enhance(音譯:硬漢) 是一款無侵入式的 Java AIO 內核增強類庫(注意:這不是一款通信框架),解決原生
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    告別加班,拒絕重複勞動,遠離搬磚概述"Rocket-API" 基於spring boot 的API敏捷開發框架,服務端50%以上的功能只需要寫SQL或者 mongodb原始執行腳本就能完成開發,另外30%也在不停的完善公共組件,比如文件上傳,下載,導出,預覽,分頁等等通過一二行代碼也能完成開發,剩下的20%也能依賴於動態編譯技術生成class的形式,不需要發布部署,不需要重啟來實現研發團隊的快速編碼
  • getty 發布,一個完全基於 java 實現的 aio 框架
    2、JDK1.7升級了NIO類庫,升級後的NIO類庫被稱為NIO 2.0。正式提供了異步文件I/O操作,同時提供了與UNIX網絡編程事件驅動I/O對應的AIO。AIO的發布使得實現一套網絡通訊框架變得相對簡單。但如果你不努力,可能也無法理解哦。
  • smart-doc 1.9.7 發布,Java 零註解文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具
  • Java API + Python AI,實現跨平臺任務調度
    一 系統架構二 開發環境三 API接口服務四 AI業務處理服務五 任務處理請求信息發送和接收1,Java + Spring Boot開發Web服務是常用搭配,豐富的組件和易用的功能;2,Python在AI領域是主流開發語言,實現業務處理更方便,不需要代碼移植;3,招聘工程師組建技術團隊有針對性,發揮各自優勢。
  • Java進行內存洩露 GC 分析都有哪些常用好用的工具
    使用Java語言開發應用程式,雖然JVM幫我們進行了GC收集、清除工作;但是使用不當的話,還是會導致某些對象常駐堆空間無法給垃圾收集器清除,導致內存洩露、內存溢出等情況,今天盤點一下在項目中進行內存洩露分析和GC分析的一些常用、好用的工具。
  • Java 生成隨機數的 5 種方式,你知道幾種?
    方法是 的,因此在多線程情況下,只有一個線程會負責創建偽隨機數生成器(使用當前時間作為種子),其他線程則利用該偽隨機數生成器產生隨機數。Java生成隨機數的幾種高級用法,這篇推薦看一下。 因此 方法是線程安全的。
  • 俠說java8-LocalDateTime等時間使用手冊(全),先mark後看
    前言java8的時間日期api給我們提供了極大的便利。如何更好的熟悉使用時間api也是學習java8的一個很重要的知識點,下面我們一起來學習學習。本篇文章代碼比較多,可以作為工具,需要使用時,再來查閱。目錄1.普通Date時間如何轉為LocalDateTime?
  • 打工人打工魂,打工的必會java調用python的幾種用法
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】,經微信公眾號授權轉載,如需轉載與原文作者聯繫圖丨pexelsjava調用python的幾種用法(看這篇就夠了)在java類中直接執行python語句準備工作:創建maven工程,結構如下:到官網https://www.jython.org
  • 2018年阿里巴巴關於Java重要開源項目匯總
    此項目包含開發分布式應用服務的必需組件,方便開發者通過 Spring Cloud 編程模型輕鬆使用這些組件來開發分布式應用服務。依託 Spring Cloud Alibaba,您只需要添加一些註解和少量配置,就可以將 Spring Cloud 應用接入阿里分布式應用解決方案,通過阿里中間件來迅速搭建分布式應用系統。
  • 手把手教你學Numpy——常用API合集
    本文轉載自【微信公眾號:五角錢的程式設計師,ID:xianglin965】,經微信公眾號授權轉載,如需轉載與原文作者聯繫今天是Numpy專題的第5篇文章,我們來繼續學習Numpy當中一些常用的數學和統計函數。基本統計方法在日常的工作當中,我們經常需要通過一系列值來了解特徵的分布情況。比較常用的有均值、方差、標準差、百分位數等等。
  • 家長必知!「右腦開發」四大誤區
    家長必知!「右腦開發」四大誤區2010-07-02 09:15:04出處:PCbaby作者:佚名  近些年來,在國外傳入的早教概念的薰陶和就學競爭的壓力下,國內的父母們已經越來越有早教意識。而目前從日本興起、風靡東南亞的「右腦開發」理論,也傳入了我國,讓無數父母狂熱追逐。
  • Web前端和後端有什麼區別(上)
    2、Web後端: 後端開發人員:會寫Java代碼,會寫SQL語句,能做簡單的資料庫設計,會Spring和iBatis,懂一些設計模式等。 (1)精通jsp,servlet,javabean,JMS,EJB,Jdbc,Flex開發,或者對相關的工具、類庫以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,對Web開發的模式有較深的理解;
  • 為什麼不推薦使用try-catch-finally處理java異常?
    這篇文章是我近期看了《Effective java》一書中總結的,來自其中第九條。為了對其理解的更加透徹,因此重新分析了一下,並加入了一些其他點。「本文的所有例子均在本地代碼運行完畢基於JDK版本1.8,運行環境eclipse本文類名:TryWithResources,下文的堆棧信息也以此為基礎」在java開發中,一些網絡連結或者是文件資源都需要程式設計師去手動調用close方法關閉,比如InputStream、OutputStream和java.sql.Connection
  • Java 反射最佳實踐
    (做普通的業務開發的話),僅僅在自己寫一些框架和註解框架時會用到,所以對api總是不熟悉。每次用到api都要去網上查,查了後又得自己實驗下,很不爽。更差勁的是這樣寫法可讀性十分低下。我不希望這樣寫反射,我希望反射能像String str = new String();這樣簡單,一行代碼搞定!。此外,有很多人都說反射影響性能,在開發的時候要避免用反射。
  • (提高Java代碼質量)|25個優化Java代碼的小技巧
    本號主要用於分享企業中常用的技術,更加側重於實用,歡迎關注,便於瀏覽其它更多實用的歷史文章。1.需要 Map 的主鍵和取值時,應該迭代 entrySet()當循環中只需要 Map 的主鍵時,迭代 keySet() 是正確的。