Java必知必會的20種常用類庫和API

一個有經(jīng)驗(yàn)的Java開發(fā)人員特征之一就是善于使用已有的輪子來造車⌒罴穑《Effective Java》的作者Joshua Bloch曾經(jīng)說過:“建議使用現(xiàn)有的API來開發(fā)咽斧,而不是重復(fù)造輪子”宛逗。在本文中,我將分享一些Java開發(fā)人員應(yīng)該熟悉的最有用的和必要的庫和API彪腔。順便說一句格嗅,這里不包括框架襟衰,如Spring和Hibernate因?yàn)樗麄兎浅S忻?都有特定的功能苔悦。

本文總結(jié)了日志勤讽、JSON解析莫矗、單測妹懒、XML解析匾竿、字節(jié)碼處理、數(shù)據(jù)庫連接池、集合類、郵件未状、加密、嵌入式SQL數(shù)據(jù)庫胰柑、JDBC故障診斷以及序列化等20個方面的常用類庫却桶。都是你日常開發(fā)經(jīng)秤毕担可能要用到的,現(xiàn)在不用不要緊,但是你要知道有這么一篇文章可以供你參考黔攒。

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

一谈火、日志相關(guān)類庫

日志庫是很常見的篷角,因?yàn)槟阍诿恳粋€項(xiàng)目中都需要他們系任。打印日志是服務(wù)器端應(yīng)用中最重要的事情恳蹲,因?yàn)槿罩臼悄懔私饽愕某绦虬l(fā)生了什么的唯一途徑。盡管JDK附帶自己的日志庫霜旧,但是還是有很多更好的選擇可用错忱,例如?Log4j?、?SLF4j?和?LogBack挂据。

Java開發(fā)人員應(yīng)該熟悉日志記錄的利弊以清,?并且了解為什么SLF4J要比Log4J要好。

二崎逃、JSON解析庫

在當(dāng)今世界的web服務(wù)和物聯(lián)網(wǎng)中(IoT)掷倔,JSON已經(jīng)取代了XML,成為從客戶端到服務(wù)器傳送信息的首選協(xié)議个绍。有一個好消息和一個壞消息勒葱。壞消息?是JDK沒有提供JSON庫。好消息是有許多優(yōu)秀的第三方庫可以用來解析和創(chuàng)建JSON消息巴柿,如?Jackson?和?Gson

一個Java web開發(fā)人員應(yīng)該熟悉Jackson 和 Gson這兩種中的至少一種庫凛虽。

三、單元測試庫

單元測試技術(shù)的使用广恢,是區(qū)分一個一般的開發(fā)者和好的開發(fā)者的重要指標(biāo)凯旋。程序員經(jīng)常有各種借口不寫單元測試,但最常見的借口就是缺乏經(jīng)驗(yàn)和知識。常見的單測框架有?JUnit?,?Mockito?和PowerMock?瓦阐。

四蜗侈、通用類庫

有幾個很好的第三方通用庫可供Java開發(fā)人員使用,例如?Apache Commons?和?Google Guava?睡蟋。我會經(jīng)常在我的代碼中使用這些通用類庫踏幻,因?yàn)檫@些類庫都是經(jīng)過無數(shù)開發(fā)者實(shí)踐過的,無論是實(shí)用性還是在性能等方面都是最佳的戳杀。

五该面、Http 庫

我不是很喜歡JDK的一個重要原因就包括他們?nèi)狈TTP的支持。雖然可以使用java.net包類信卡,但是這和直接使用像?Apache HttpClient?和?HttpCore?等開源類庫比起來麻煩太多了隔缀。

盡管JDK 9將開始HTTP 2.0,也對HTTP的支持做了優(yōu)化傍菇,但是我還是強(qiáng)烈建議所有的Java開發(fā)人員熟悉流行的HTTP處理類庫猾瘸,例如HttpClient和HttpCore HTTP等庫。

六丢习、XML解析庫

市面上有很多XML解析的類庫牵触,如?Xerces?,?JAXB?,?JAXP?,?Dom4j?,?Xstream?等。?Xerces2是下一代高性能咐低,完全兼容的XML解析工具揽思。Xerces2定義了 Xerces Native Interface (XNI)規(guī)范,并提供了一個完整见擦、兼容標(biāo)準(zhǔn)的 XNI 規(guī)范實(shí)現(xiàn)钉汗。該解析器是完全重新設(shè)計(jì)和實(shí)現(xiàn)的,更簡單以及模塊化鲤屡。

七损痰、Excel讀寫庫

許多應(yīng)用程序需要提供把數(shù)據(jù)導(dǎo)出到Excel的功能,如果你要做相同的Java應(yīng)用程序,那么你需要?Apache POI API?酒来。

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

八役首、字節(jié)碼庫

如果你正在編寫一個框架或者類庫。有一些受歡迎的字節(jié)碼庫如?javassist?和?Cglib Nodep?可以供你選擇显拜,他們可以讓你閱讀和修改應(yīng)用程序生成的字節(jié)碼衡奥。

Javassist使得JAVA字節(jié)碼操作非常簡單。它是一個為編輯Java字節(jié)碼而生的類庫远荠。?ASM?是另一個有用的字節(jié)碼編輯庫矮固。

九、數(shù)據(jù)庫連接池庫

如果你的Java應(yīng)用程序與數(shù)據(jù)庫交互不是使用數(shù)據(jù)庫連接池庫的話,那么你就大錯特錯了档址。因?yàn)樵谶\(yùn)行時創(chuàng)建數(shù)據(jù)庫連接非常耗時并且會拖慢你的程序盹兢。所以墻裂建議使用,有些好用的連接池可供選擇守伸,如?Commons Pool?和?DBCP?绎秒。

在web應(yīng)用程序中,web服務(wù)器通常提供了這些功能尼摹。但是在java項(xiàng)目中需要把數(shù)據(jù)庫連接池的類庫導(dǎo)入到應(yīng)用中见芹。

十、消息傳遞庫

像日志和數(shù)據(jù)庫連接池一樣蠢涝,消息傳遞也是很多實(shí)際的Java項(xiàng)目中必備的玄呛。Java提供了JMS Java消息服務(wù),但這不是JDK的一部分,你需要單獨(dú)的引入jms.jar和二。類似地徘铝,如果您準(zhǔn)備使用第三方消息傳遞協(xié)議,?Tibco RV?是個不錯的選擇惯吕。

十一惕它、PDF處理庫

除了Excel和Word,PDF也是一種常用的文件格式混埠。如果你的應(yīng)用程序要支持PDF格式的文件處理怠缸,你可以使用?iText?和?Apache FOP?類庫。兩者都提供了非常有用的PDF處理功能钳宪。

十二揭北、日期和時間庫

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

但是在Java8推出之后,我們就可以徹底放棄JodaTime了缩多,因?yàn)镴ava 8提供了其所有功能呆奕。但是,如果你的代碼運(yùn)行在一個低版本的JDK中衬吆,那么JodaTime還是值得使用的梁钾。

十三、集合類庫

雖然JDK有豐富的集合類逊抡,但還是有很多第三方類庫可以提供更多更好的功能姆泻。如?Apache Commons Collections?、?Goldman Sachs collections?、?Google Collections?和?Trove?拇勃。Trove尤其有用四苇,因?yàn)樗峁┧袠?biāo)準(zhǔn)Collections 類的更快的版本以及能夠直接在原語(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。

FastUtil是另一個類似的API方咆,它繼承了Java Collection Framework月腋,提供了數(shù)種特定類型的容器,包括映射map峻呛、集合set罗售、列表list、優(yōu)先級隊(duì)列(prority queue)钩述,實(shí)現(xiàn)了java.util包的標(biāo)準(zhǔn)接口(還提供了標(biāo)準(zhǔn)類所沒有的雙向迭代器)寨躁,還提供了很大的(64位)的array、set牙勘、list职恳,以及快速、實(shí)用的二進(jìn)制或文本文件的I/O操作類方面。

十四放钦、郵件API

javax.mail 和?Apache Commons Email?提供了發(fā)送郵件的api。它們建立在JavaMail API的基礎(chǔ)上恭金,提供簡化的用法操禀。

十五、HTML解析庫

和XML與JSON類似横腿,HTML是另外一種我們可能要打交道的傳輸格式颓屑。值得慶幸的是,我們有jsoup可以大大簡化Java應(yīng)用程序使用HTML耿焊。你不僅可以使用?JSoup?解析HTML還可以創(chuàng)建HTML文檔揪惦。

十六、加密庫

Apache Commons家族中的?Commons Codec?就提供了一些公共的編解碼實(shí)現(xiàn)罗侯,比如Base64, Hex, MD5,Phonetic and URLs等等器腋。

十七、嵌入式SQL數(shù)據(jù)庫庫

我真的是非常喜歡像?H2?這種內(nèi)存數(shù)據(jù)庫钩杰,他可以嵌入到你的Java應(yīng)用中纫塌。在你跑單測的時候如果你需要一個數(shù)據(jù)庫,用來驗(yàn)證你的SQL的話讲弄,他是個很好的選擇措左。順便說一句,H2不是唯一嵌入式DB,你還有?Apache Derby?和?HSQL?可供選擇垂睬。

十八、JDBC故障診斷庫

有不錯的JDBC擴(kuò)展庫的存在使得調(diào)試變得很容易,例如P6spy驹饺,這是一個針對數(shù)據(jù)庫訪問操作的動態(tài)監(jiān)測框架钳枕,它使得數(shù)據(jù)庫數(shù)據(jù)可無縫截取和操縱,而不必對現(xiàn)有應(yīng)用程序的代碼作任何修改赏壹。?P6Spy?分發(fā)包包括P6Log鱼炒,它是一個可記錄任何 Java 應(yīng)用程序的所有JDBC事務(wù)的應(yīng)用程序。其配置完成使用時蝌借,可以進(jìn)行數(shù)據(jù)訪問性能的監(jiān)測昔瞧。

十九、序列化庫

Google Protocol Buffer是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式菩佑,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化自晰,或者說序列化。它很適合做數(shù)據(jù)存儲或 RPC 數(shù)據(jù)交換格式稍坯〕贶瘢可用于通訊協(xié)議、數(shù)據(jù)存儲等領(lǐng)域的語言無關(guān)瞧哟、平臺無關(guān)混巧、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。目前提供了 C++勤揩、Java咧党、Python 三種語言的 API。

二十陨亡、網(wǎng)絡(luò)庫

一些有用的網(wǎng)絡(luò)庫主要有?Netty?的和?Apache MINA?傍衡。如果您正在編寫一個應(yīng)用程序,你需要做的底層網(wǎng)絡(luò)任務(wù)数苫,可以考慮使用這些庫聪舒。

這都是每位Java開發(fā)人員應(yīng)該熟悉的,并且十分有用的庫虐急。Java生態(tài)系統(tǒng)非常龐大的箱残,你會發(fā)現(xiàn)有很多不同的類庫可以做不同的事情。每個你想到的東西止吁,都可能有一個庫可以做到被辑。

要相信,你遇到的問題敬惦,肯定不止你一個遇到過盼理。?

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

要相信宏怔,你用或不用奏路,輪子就在那里。?

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抓艳,一起剝皮案震驚了整個濱河市触机,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玷或,老刑警劉巖儡首,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偏友,居然都是意外死亡蔬胯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門约谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笔宿,“玉大人,你說我怎么就攤上這事棱诱∑瞄伲” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵迈勋,是天一觀的道長炬灭。 經(jīng)常有香客問我,道長靡菇,這世上最難降的妖魔是什么重归? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮厦凤,結(jié)果婚禮上鼻吮,老公的妹妹穿的比我還像新娘。我一直安慰自己较鼓,他們只是感情好椎木,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著博烂,像睡著了一般香椎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禽篱,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天畜伐,我揣著相機(jī)與錄音,去河邊找鬼躺率。 笑死玛界,一個胖子當(dāng)著我的面吹牛万矾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慎框,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勤众,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲤脏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤吕朵,失蹤者是張志新(化名)和其女友劉穎猎醇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體努溃,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫嘶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梧税。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦疾。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖第队,靈堂內(nèi)的尸體忽然破棺而出哮塞,到底是詐尸還是另有隱情,我是刑警寧澤凳谦,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布忆畅,位于F島的核電站,受9級特大地震影響尸执,放射性物質(zhì)發(fā)生泄漏家凯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一如失、第九天 我趴在偏房一處隱蔽的房頂上張望绊诲。 院中可真熱鬧,春花似錦褪贵、人聲如沸掂之。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽板惑。三九已至,卻和暖如春偎快,著一層夾襖步出監(jiān)牢的瞬間冯乘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工晒夹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裆馒,地道東北人姊氓。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像喷好,于是被迫代替她去往敵國和親翔横。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容