關(guān)于我們
書單推薦
新書推薦
|
Java經(jīng)典實(shí)例(第三版) 《Java經(jīng)典實(shí)例(第三版)》 從lambda表達(dá)式、JavaFX 8,到網(wǎng)絡(luò)編程和支持移動(dòng)設(shè)備等方面,Java 8都有許多更新。包含了數(shù)百個(gè)經(jīng)過實(shí)踐驗(yàn)證的技巧,內(nèi)容涵蓋了廣泛的Java主題,可幫助你快速進(jìn)入編程狀態(tài)。你可以從中學(xué)到一切有用的技術(shù),包括調(diào)試、數(shù)據(jù)結(jié)構(gòu)、GUI開發(fā)和函數(shù)編程。 的每個(gè)技巧既給出了代碼部分,也給出了運(yùn)行結(jié)果,還有對(duì)它們的討論。你可以免費(fèi)使用這些代碼。如果你對(duì)Java基礎(chǔ)知識(shí)比較熟悉,學(xué)習(xí)將使你進(jìn)一步掌握語言方面的通用知識(shí)和Java 8 中主要API方面的特殊知識(shí)。 的主題包括: 1.用于編譯、運(yùn)行和調(diào)試的方法。 對(duì)文本的處理、比較和重新安排。 2.用于字符串匹配和模式匹配的正則表達(dá)式。 ?處理數(shù)字、日期和時(shí)間。 3.使用集合、數(shù)組和其他類型實(shí)現(xiàn)數(shù)據(jù)的結(jié)構(gòu)化。 4.面向?qū)ο蠹夹g(shù)和函數(shù)編程技術(shù)。 5.目錄和文件系統(tǒng)運(yùn)算符。 6.使用圖形、視頻和音頻。 7.GUI開發(fā),包括JavaFX和處理器。 8.客戶端和服務(wù)器端的網(wǎng)絡(luò)編程。 9.數(shù)據(jù)庫訪問,使用JPA、Hibernate和JDBC。 10.處理JSON和用于數(shù)據(jù)存儲(chǔ)的XML。 11.多線程和并發(fā)機(jī)制。
適讀人群 :《Java經(jīng)典實(shí)例(第三版)》廣大Java程序員。 本書對(duì)于Java程序員來說是理想的“第二本書”,300個(gè)Java應(yīng)用經(jīng)典技巧,涵蓋了廣泛的Java主題。 前言 關(guān)于第三版 Java 8是Java社區(qū)的新伙伴。 Java 7是對(duì)以前版本的重大改進(jìn)。自本書上一版出版以來, Java已發(fā)生了太多的變化! Java 5中出現(xiàn)的新功能如注解、泛型類型、并發(fā)機(jī)制等已普遍存在了。在Java的整個(gè)畫面中, API來了又走: JavaME已經(jīng)過時(shí)很久了,BlackBerry已經(jīng)放棄了它;在部分企業(yè)級(jí)Java中, JSF正在(慢慢)替代JSP; Spring框架繼續(xù)擴(kuò)大其覆蓋面。許多人似乎認(rèn)為桌面Java已經(jīng)死亡,甚至整個(gè)Java正在逐步滅亡,但它肯定還沒離開舞臺(tái);Swing、 JavaFX、 Java企業(yè)版以及 (盡管Oracle有重大訴訟案件) Android正在使Java語言保持活力。此外,在其他“ JVM語言”方面出現(xiàn)了更新的關(guān)注,如Groovy、 JRuby、 Jython、 Scala和Clojure正在使Java平臺(tái)處于世界的開發(fā)前沿。 實(shí)際上,第三版的主要挑戰(zhàn)在于縮短對(duì)流行的API的介紹,保持自己應(yīng)有的特色并盡量避免有偏見,使本書符合由O’Reilly手冊(cè)系列和之前版本所確定的厚度約束。因此,本書不得不保留900多頁,這當(dāng)然不是我努力適應(yīng)“所有亮點(diǎn)”的結(jié)果。 我還去掉了前一版本中的一些API介紹。最明顯的是在介紹串口和并口的一章(在第10章中將有關(guān)內(nèi)容消減為一節(jié));電腦一般不使用這些了,幾乎也沒有人使用它們了:大家的注意力都轉(zhuǎn)移到了USB口,而Java目前似乎還沒有一個(gè)標(biāo)準(zhǔn)的API(坦率地講,對(duì)此,開發(fā)者之間的真正興趣也不大)。 關(guān)于之前版本 如果你了解一點(diǎn)Java的話,那很好。如果你了解更多Java編程的話,那就更好了!如果你了解一些J a v a知識(shí),還想進(jìn)一步深入學(xué)習(xí),那么,本書是你的理想選擇。如果你對(duì)Java一點(diǎn)都不了解,你應(yīng)當(dāng)選擇一本更基礎(chǔ)的書,如果你是新手,選擇 《 Head First Java 》( O’Reilly),如果你是有經(jīng)驗(yàn)的C程序員,請(qǐng)選擇《 Learning Java》( O’Reilly)。 我是1980年在Toronto大學(xué)工作時(shí)開始使用C語言編程的,在20世紀(jì)80年代到90年代期間, C語言為我提供了很好的服務(wù)。 1995年,隨著新生語言O(shè)ak更名為Java,我碰到了好運(yùn),我的同事J. Greg Davidson告訴我有關(guān)Java的情況。我向Greg提供的地址發(fā)送了一封電子郵件,并在1995年3月收到了來自Java發(fā)明者James Gosling的回復(fù),郵件內(nèi)容如下: | Hi. A friend told me about WebRunner( ?), your extensible network | browser. It and Oak( ?) its extension language, sounded neat. Can | you please tell me if it's available for play yet, and/or if any | papers on it are available for FTP? Check out http://java.sun.com 。 oak got renamed to java and webrunner got renamed to hotjava to keep the lawyers happy) 因此,在我開始使用之前, Oak已經(jīng)變成了Java注1。我下載了HotJava,并嘗試使用它。開始我并不太相信這個(gè)新奇的語言,它看起來像錯(cuò)位的C/C++。我編寫了測(cè)試和演示程序,并將其放入javasrc目錄下,以使它們與我的C源代碼相互獨(dú)立(因?yàn)槌绦蚪?jīng)常會(huì)重名)。隨著我對(duì)Java了解得越多,我開始看到它用于許多工作中的優(yōu)勢(shì),比如,自動(dòng)內(nèi)存回收(“垃圾回收”)以及指針運(yùn)算符的去除。 javasrc目錄下的文件在持續(xù)增加。我編寫了一本Java教程“ Learning Tree” 注2,目錄下的文件增長得更快了,為此,我不得不創(chuàng)建子目錄,盡管如此,查找東西還是越來越困難,顯然,對(duì)文檔的需求就變得迫切了。 在某種意義上,本書是源自我的javasrc目錄和為另一種新語言所建立的文檔框架的高速碰撞的結(jié)果。在O’Reilly公司出版的《 Perl Cookbook》一書中, Tom Christiansen和Nathan Torkington通過他們成功的設(shè)計(jì),將當(dāng)時(shí)較新的Perl語言材料以一個(gè)個(gè)稱為“實(shí)例”的精短的文章展示給大家。這樣一本書最初的模型當(dāng)然來自人們熟悉的廚房食譜。將“ cookbook”術(shù)語用于列舉與計(jì)算機(jī)相關(guān)的操作技巧已有很長的歷史。 在軟件方面, Donald Knuth用 “ cookbook”來比喻他的書《 The Art of Computer Programming》( Addison-Wesley),該書于1968年首印。在硬件方面, Don Lancaster 編寫了《 The TTL Cookbook》一書 ( Sams)。( Transistor-transistor logic, TTL,是當(dāng)時(shí)電子電路的小規(guī)模構(gòu)建塊)。 Tom 和 Nathan在這方面做得很成功,我想向希望學(xué)習(xí)更多Perl語言的人們推薦這本書。實(shí)際上,本書正是為那些想深入學(xué)習(xí)Java的人們而編寫的。 每節(jié)中的代碼都是高度獨(dú)立的,在你的項(xiàng)目中可隨意使用其中的代碼。代碼的發(fā)布符合Berkeley風(fēng)格的版權(quán),以打擊成批的盜版行為。 讀者對(duì)象 我假定你有一些Java基礎(chǔ)。在本書中不會(huì)告訴你怎樣使用println同時(shí)輸出一個(gè)字符串和一個(gè)數(shù)字,或怎樣編寫一個(gè)對(duì)JFrame擴(kuò)展的類并將你的名字輸出到窗口中。我假設(shè)你已經(jīng)學(xué)習(xí)過Java課程或看過一本入門類的書籍,如《 Head First Java》、《LearningJava》或《 Java in a Nutshell 》( O’Reilly)。然而,第1章介紹了一些你可能了解不深的技術(shù),掌握它們對(duì)理解后面的內(nèi)容是非常必要的。請(qǐng)盡管跳著閱讀本書!書的打印版和電子版都有大量的相互交叉引用。 本書內(nèi)容 與我的Perl同事Tom 和Nathan不同,我不需要在語言的古怪和習(xí)語方面花費(fèi)太多時(shí)間。 Java是一種簡潔明了的語言,沒有太多的怪異之處注3。但這并不是說學(xué)好Java是件輕松的事!如果是的話,本書的出版將沒有必要了。我的主要精力是集中在Java API上。我將通過例子教你了解重要的API是什么,它們擅長用于哪些方面。 像P e r l一樣, J a v a也是一種伴隨你成長的語言。我承認(rèn)我目前大部分時(shí)間都在使用Java。以前用C語言編寫的程序除了其中用于設(shè)備驅(qū)動(dòng)和遺留系統(tǒng)的之外,我現(xiàn)在都用Java實(shí)現(xiàn)了。 不過, Java比Perl更適合不同范圍的任務(wù)。 Perl(和其他腳本語言,如awk和Python)尤其適用“ one-liner”(一句話)式的應(yīng)用任務(wù)。正如Tom和Nathan所說, Perl擅長像從文件中打印第42行這樣的事情。 Java當(dāng)然也能實(shí)現(xiàn),但它似乎更適合“大型應(yīng)用的開發(fā)”或企業(yè)應(yīng)用的開發(fā),因?yàn)樗强删幾g的面向?qū)ο蟮恼Z言。實(shí)際上,在Java 2中添加的大部分API都是為了實(shí)現(xiàn)這種類型的開發(fā)。不過,我將以較短的例子甚至是代碼片段來對(duì)這些技術(shù)進(jìn)行必要的說明。我會(huì)確保你看到的每個(gè)代碼片段都能編譯并運(yùn)行。 本書中較長的例子是我最初編寫的一些將日常工作自動(dòng)化的工具,例如, MkIndex工具(見javasrc庫)可在我的Java例子源代碼所在位置讀取頂層目錄,并為這個(gè)頂層目錄構(gòu)建一個(gè)瀏覽器能打開的index.html文件。另一個(gè)例子就是本書第一版的主體部分可用XML標(biāo)記(見20章)。我使用XML格式輸入本書部分章節(jié)的內(nèi)容,并給這些初始文本加上標(biāo)記,然后就可用XmlForm程序?qū)⑽谋巨D(zhuǎn)換為出版軟件要求的格式。這個(gè)程序還能完成從javasrc目錄插入書的手稿的全部和部分代碼。 XmlForm的討論見20章。 本書內(nèi)容結(jié)構(gòu) 讓我們看看本書的內(nèi)容結(jié)構(gòu)。第1章入門:編譯、運(yùn)行和調(diào)試Java程序,描述了在不同平臺(tái)上編譯程序、在不同環(huán)境中運(yùn)行(瀏覽器、命令行、窗口桌面)和調(diào)試的一些方法。 第2章與運(yùn)行環(huán)境交互,從編譯轉(zhuǎn)向運(yùn)行程序,以使其適應(yīng)周圍的環(huán)境,周圍環(huán)境是指在你的電腦中運(yùn)行的其他程序。接下來的幾章處理基本的API。 第3章字符串,主要闡述Java中基本但很強(qiáng)大的數(shù)據(jù)類型,顯示了怎樣合并、分離、比較和重新排列文本。 第4章正則表達(dá)式的模式匹配,教你如何使用UNIX的強(qiáng)大的正則表達(dá)式實(shí)現(xiàn)字符串匹配和模式匹配! Regex”處理成為Java標(biāo)準(zhǔn)已有多年歷史了,但如果你不知道怎么使用它,你可以“重塑輪胎”。 第5章數(shù)字,同時(shí)介紹了內(nèi)置的數(shù)字類型如int和double,以及對(duì)應(yīng)的API類( Integer,Double等)及其類型轉(zhuǎn)換。還簡單提了“大數(shù)”類。由于Java程序員經(jīng)常以本地化和國際化形式處理日期和時(shí)間,第6章日期和時(shí)間——新的API,涵蓋了這一重要話題。 接下來的兩章介紹了數(shù)據(jù)處理部分。與大多數(shù)語言中的一樣, Java中的數(shù)組是由相似類型的對(duì)象構(gòu)成的線性的索引集合,見第7章結(jié)構(gòu)化數(shù)據(jù)。本章還繼續(xù)介紹了許多集合類的使用,這是一種存儲(chǔ)大量java.util包中對(duì)象的強(qiáng)有力的方式,包括使用“ Java泛型”。 盡管Java在語法上與過程式語言,如C有些相似,但Java核心是面向?qū)ο蟮木幊陶Z言( OOP)。第8章面向?qū)ο蠹夹g(shù),討論了一些適用于Java的OOP的關(guān)鍵概念,包括常見的java.lang.Object的覆蓋方法和設(shè)計(jì)模式這一重要問題。 Java不是而且永遠(yuǎn)也不會(huì)是純“函數(shù)編程”( FP)語言。不過,它可能使用FP的一些觀點(diǎn),而且在Java 8及其對(duì)lambda表達(dá)式(又名“閉包”)的支持下會(huì)越來越多地使用。參見第9章函數(shù)編程技術(shù):函數(shù)接口、流、并行集合。 接下來的幾章介紹傳統(tǒng)的輸入和輸出。第10章輸入輸出,講讀取和寫入文件的規(guī)則(如果你覺得文件比較繁瑣,請(qǐng)不要跳過這一章,因?yàn)檫@是后面兩章的基礎(chǔ)。你需要在本章介紹的串口或并口,以及在第13章網(wǎng)絡(luò)客戶端中講的一個(gè)基于套接字的網(wǎng)絡(luò)連接上讀/寫數(shù)據(jù))。第11章目錄和文件系統(tǒng)運(yùn)算符,展示了文件以外的任何操作,例如識(shí)別它們的大小以及最后更新時(shí)間,還介紹了如何讀取和修改目錄、如何創(chuàng)建臨時(shí)文件,以及重命名磁盤上的文件。 第12章媒體:圖形、視頻、音頻,將我們帶進(jìn)GUI的開發(fā)中。這一章內(nèi)容是底層細(xì)節(jié)(如繪制圖形及設(shè)置字體和顏色)和非常高級(jí)的活動(dòng)(如控制視頻剪輯或電影)的混合。第14章圖形用戶接口中,介紹了GUI的高級(jí)話題,如按鈕、標(biāo)簽、菜單等類似的GUI預(yù)定義組件的使用。一旦有了GUI程序(實(shí)際上,在你真正寫它之前),你會(huì)想讀第15章國際化和本地化的內(nèi)容,這樣在阿克巴、阿富汗、阿爾及爾、阿姆斯特丹和英格蘭運(yùn)行你的程序?qū)⒑驮诎柌、阿肯色州、阿拉巴馬州等地運(yùn)行結(jié)果一樣。 因?yàn)镴ava一開始就被標(biāo)榜為“ Internet上的編程語言”,所以應(yīng)該在本書中花費(fèi)一些時(shí)間討論J a v a的網(wǎng)絡(luò)編程。第13章網(wǎng)絡(luò)客戶端,涵蓋了客戶端網(wǎng)絡(luò)編程的基礎(chǔ),主要集中在套接字技術(shù)上。在本書第三版第13章網(wǎng)絡(luò)客戶端中已重新從Applet和Web客戶端轉(zhuǎn)向強(qiáng)調(diào)Web服務(wù)的客戶端。今天,有許多應(yīng)用程序需要訪問Web服務(wù),主要是RESTful服務(wù),而這似乎是必要的。然后我們將轉(zhuǎn)向服務(wù)器端,見第16章Java服務(wù)器端,在這一章中,你將學(xué)到一些服務(wù)器端的編程技術(shù)。 網(wǎng)絡(luò)編程常常需要生成或處理電子郵件,第17章對(duì)此話題做了介紹。 第18章數(shù)據(jù)庫訪問,涵蓋了高級(jí)數(shù)據(jù)庫訪問( JPA和Hibernate)和低級(jí)Java數(shù)據(jù)庫連接( JDBC)的要點(diǎn),展示了怎樣連接本地或遠(yuǎn)程關(guān)系數(shù)據(jù)庫、怎樣存儲(chǔ)和檢索數(shù)據(jù),以及怎樣找到查詢結(jié)果集或數(shù)據(jù)庫中的信息。 用于數(shù)據(jù)交換的一個(gè)簡單的基于文本的表示是JSON,即JavaScript Object Notation( JavaScript對(duì)象符號(hào))。第19章處理JSON數(shù)據(jù),描述了格式以及處理格式的一些API。 另一種用于存儲(chǔ)和交換數(shù)據(jù)的文本形式是XML。第20章處理XML,討論了XML格式及在用SAX和DOM這兩種標(biāo)準(zhǔn)Java API進(jìn)行解析時(shí)使用的運(yùn)算符。 第21章包和打包,展示了怎樣創(chuàng)建一起使用的類的包。本章還討論了怎樣發(fā)布或分發(fā)并安裝你的軟件。 第22章Java線程,告訴你怎樣編寫一次執(zhí)行多個(gè)任務(wù)的類,并利用強(qiáng)大的多線程硬件的優(yōu)勢(shì)。 第23章反射或命名類的類,向你揭示如何編寫API的交叉參考文檔(在你的有生之年成為Java書籍的作者。,以及Web服務(wù)器怎樣能裝載任意舊的Servlet(以前從未看到過特定的類)并運(yùn)行它。 有時(shí)你已經(jīng)有現(xiàn)成的代碼,該代碼使用另一種語言編寫,且能為你實(shí)現(xiàn)一部分工作,或者你想用Java作為一個(gè)更大包的一部分。第24章Java和其他語言的結(jié)合,展示了怎樣運(yùn)行外部程序(已編譯或腳本程序)以及怎樣直接與C/C++或其他語言編寫的本地碼交互。 我不可能在一本八百多頁的書中講述Java的全部內(nèi)容,后記中是一些結(jié)語和指向我的在線Java API總結(jié)的鏈接,每個(gè)Java開發(fā)者都應(yīng)該了解這些內(nèi)容。 最后,附錄A按照發(fā)布時(shí)間線給出了Java頗具故事性的歷史,不論你學(xué)過Java的哪一版本,你都可以跳到這里,很快趕上。 沒有兩個(gè)程序員或作者能在展示所有Java話題的最佳順序上達(dá)成一致。為幫助你更好地學(xué)習(xí),我在書中建立了額外的交叉引用,大多數(shù)引用的是章節(jié)號(hào)。 平臺(tái)說明 Java經(jīng)歷了許多版本的變遷,見附錄A。本書主要針對(duì)Java 7和Java 8平臺(tái)。在本書出版前,我期望所有開發(fā)中的Java項(xiàng)目都使用Java 6或Java 7,只有幾個(gè)地方由于歷史原因與早期版本有關(guān)(注意Java 6在本版出版前約一年時(shí)間已處于“生命盡頭”狀態(tài))。 我已在幾種操作系統(tǒng)組合下和多個(gè)Java版本下對(duì)javasrc歸檔中的代碼進(jìn)行了編譯,以測(cè)試這一代碼的可移植性。 Java API由兩部分組成:核心API和非核心API。根據(jù)定義,核心API包含在JDK中,你可以免費(fèi)從Java網(wǎng)站( http://java.com/)下載。非核心API是其余部分。但即使是這個(gè)核心部分,卻一點(diǎn)也不小,它將近50個(gè)包, 3000多個(gè)公有類,平均每個(gè)類有12個(gè)左右的方法。只調(diào)用核心API的程序可以在任何標(biāo)準(zhǔn)Java平臺(tái)上運(yùn)行。 Java非核心API進(jìn)一步可分為標(biāo)準(zhǔn)擴(kuò)展部分和非標(biāo)準(zhǔn)擴(kuò)展部分。所有標(biāo)準(zhǔn)擴(kuò)展API的包名都以javax開始。但請(qǐng)注意,并不是所有以javax命名的包都是擴(kuò)展API: javax.swing及其子包Swing GUI包以前是擴(kuò)展API,但現(xiàn)在是核心API的一部分。實(shí)現(xiàn)每個(gè)標(biāo)準(zhǔn)擴(kuò)展API并不需要Java的許可(如Apple或IBM公司),但如果需要,就應(yīng)堅(jiān)持使用標(biāo)準(zhǔn)擴(kuò)展的接口。本書中依賴于標(biāo)準(zhǔn)擴(kuò)展API的代碼都會(huì)引起你的注意,除了在書中所列舉的代碼外,幾乎很少的代碼是依賴于非標(biāo)準(zhǔn)擴(kuò)展的。我自己的包c(diǎn)om.darwinsys包含一些在這里或那里用得著的實(shí)用類,在使用這個(gè)包中的類時(shí),你會(huì)看到在文件頂部有一條導(dǎo)入語句。 此外,另兩個(gè)平臺(tái)Java ME 和Java EE也是標(biāo)準(zhǔn)定義的平臺(tái)。 Java微版( Java ME)用于小型設(shè)備如手持設(shè)備、移動(dòng)電話、傳真機(jī)等。在Java ME內(nèi),有針對(duì)不同設(shè)備類的各種“描述”。相對(duì)的, Java企業(yè)版( Java EE)則用于構(gòu)建大型可擴(kuò)展的分布式應(yīng)用。 Servlets、 JavaServer Pages、 JavaServer Faces、 CORBA、 RMI、 JavaMail、 Enterprise JavaBeans ( EJBs)、 Transactions以及其他的API都是Java EE的一部分。 Java ME 和Java EE包名通常以“ javax”開始,因?yàn)樗鼈儾皇呛诵陌。本書中沒有討論這些內(nèi)容, 但包含了幾個(gè)EE API可用于客戶端程序,如JavaMail。如前所述,第一版中的Servlets和JSP在本版中已移除,因?yàn)楝F(xiàn)在有《 Java Servlet and JSP Cookbook》( http://shop.oreilly.com/product/9780596005726.do)一書專門討論它們。 談到手機(jī)和移動(dòng)設(shè)備,你可能知道A n d r o i d系統(tǒng)使用了J a v a作為其編程語言。對(duì)J a v a開發(fā)者而言,值得欣慰的是, A n d r o i d系統(tǒng)也使用了大多數(shù)核心J a v a A P I,而Swing和AWT除外,因?yàn)锳ndroid系統(tǒng)對(duì)此提供了Android特定的替代品。那些想學(xué)習(xí)Android的Java開發(fā)者可以參閱《 Android Cookbook》( http://shop.oreilly.com/product/0636920010241.do)一書或該書的網(wǎng)站。
Ian F.Darwin,已在計(jì)算機(jī)工業(yè)界工作了三十年。除了編程和提供咨詢,Ian還為Learning Tree International公司講授UNIX、C和Java,這是一家世界上zui大的培訓(xùn)公司之一。他還編寫了《Checking C Programs with Lint》(O'Reilly 公司出版)一書,以及超過100篇有關(guān)C和UNIX方面的文章。
前言. 1
第1章 入門: 編譯、 運(yùn)行和調(diào)試Java程序. 19 1.0 引言 .19 1.1 編譯和運(yùn)行Java程序: JDK方式20 1.2 用帶語法高亮顯示的編輯器編輯和編譯程序21 1.3 使用IDE編譯、 運(yùn)行和測(cè)試程序22 1.4 有效使用CLASSPATH.30 1.5 下載和使用代碼示例 .32 1.6 使用 Ant工具自動(dòng)編譯 37 1.7 使用Apache Maven自動(dòng)設(shè)置依賴關(guān)系、 編譯、 測(cè)試和部署.40 1.8 使用Gradle自動(dòng)設(shè)置依賴關(guān)系、 編譯、 測(cè)試和部署 .45 1.9 處理過期警告 46 1.10 沒有#ifdef的條件編譯 .48 1.11 使用斷言機(jī)制維護(hù)程序的正確性.50 1.12 使用JDB調(diào)試 .51 1.13 用單元測(cè)試避免調(diào)試 .53 1.14 用持續(xù)集成維護(hù)代碼 .56 1.15 獲取可讀回溯 60 1.16 更多的Java源代碼: 程序、 框架和庫61 第2章 與運(yùn)行環(huán)境交互 65 2.0 引言 .65 2.1 獲得環(huán)境變量 65 2.2 從系統(tǒng)屬性獲得信息 .67 2.3 了解當(dāng)前的JDK版本68 2.4 編寫操作系統(tǒng)相關(guān)的代碼69 2.5 使用擴(kuò)展包或其他API包.72 2.6 解析命令行參數(shù) 73 第3章 字符串 80 3.0 引言 .80 3.1 用Substring分解字符串 .82 3.2 將字符串分解成詞.83 3.3 用StringBuilder連接字符串 .87 3.4 處理單個(gè)字符串 89 3.5字符串對(duì)齊 .91 3.6 Unicode字符和String之間的轉(zhuǎn)換 93 3.7 按單詞或字符顛倒字符串96 3.8 擴(kuò)展和壓縮Tab 97 3.9 控制字母大小寫 101 3.10 縮排文本文檔 102 3.11 輸入非打印字符 103 3.12 刪除字符串的尾部空格 .104 3.13 解析用逗號(hào)分隔的數(shù)據(jù) .106 3.14 程序: 一個(gè)簡單的文本格式化工具. 110 3.15 程序: Soundex算法. 112 第4章 正則表達(dá)式的模式匹配 116 4.0 引言 . 116 4.1 正則表達(dá)式語法 118 4.2 在Java中使用正則表達(dá)式:測(cè)試模式 124 4.3 找到匹配的文本 128 4.4 替換匹配的文本 130 4.5 打印匹配的所有字符串 .132 4.6 打印包含一個(gè)模式的行 .134 4.7 在正則表達(dá)式中控制大小寫135 4.8 匹配“ 重音符” 或復(fù)合字符136 4.9 在文本中匹配換行符 .138 4.10 程序:Apache日志文件解析 .139 4.11 程序: 數(shù)據(jù)挖掘.141 4.12 程序: 完整的Grep.143 第5章 數(shù)字 . 149 5.0 引言 .149 5.1 檢查字符串是否是有效數(shù)字151 5.2 用小數(shù)據(jù)類型儲(chǔ)存大數(shù)據(jù)類型的數(shù)字 .153 5.3 數(shù)字與對(duì)象的相互轉(zhuǎn)換 .154 5.4 直接使用分?jǐn)?shù)而不用浮點(diǎn)數(shù)155 5.5 保證浮點(diǎn)數(shù)的準(zhǔn)確.157 5.6 比較浮點(diǎn)數(shù) 159 5.7 舍入浮點(diǎn)數(shù) 160 5.8 格式化數(shù)字 161 5.9 二進(jìn)制、 八進(jìn)制、 十進(jìn)制和十六進(jìn)制之間的轉(zhuǎn)換 164 5.10 對(duì)整數(shù)序列的操作.165 5.11 使用羅馬數(shù)字 166 5.12 復(fù)數(shù)的正確格式化.170 5.13 生成隨機(jī)數(shù) 172 5.14 計(jì)算三角函數(shù) 174 5.15 取對(duì)數(shù) .175 5.16 矩陣乘法176 5.17 使用復(fù)數(shù)178 5.18 處理非常大的數(shù)字180 5.19 程序: TempConverter182 5.20 程序: 數(shù)字回文.184 第6章 日期和時(shí)間——新的API 187 6.0 引言 .187 6.1 查看當(dāng)天日期 190 6.2 日期和時(shí)間的格式化 .191 6.3 日期/時(shí)間、 YMDHMS和 紀(jì)元秒( Epoch Seconds) 之間的轉(zhuǎn)換 193 6.4 將字符串解析為日期 .194 6.5 兩個(gè)日期之間的差.195 6.6 日期或日歷的加減.196 6.7 與傳統(tǒng)日期和日歷類的接口197 第7章 結(jié)構(gòu)化數(shù)據(jù) . 199 7.0 引言 .199 7.1 使用數(shù)組200 7.2 調(diào)整數(shù)組長度 201 7.3 集合框架203 7.4 動(dòng)態(tài)數(shù)組列表 204 7.5 使用泛型集合 207 7.6 使用泛型避免強(qiáng)制類型轉(zhuǎn)換208 7.7 迭代器的使用方式. 211 7.8 使用Set避免元素重復(fù)存儲(chǔ) 213 7.9 使用迭代器或枚舉.215 7.10 鏈表結(jié)構(gòu)216 7.11 使用Hashtable和HashMap進(jìn)行映射.219 7.12 Properties類和Preferences類221 7.13 對(duì)集合排序 225 7.14 避免頻繁排序 229 7.15 在集合中查找對(duì)象.231 7.16 將集合轉(zhuǎn)換為數(shù)組.233 7.17 自定義迭代器 234 7.18 堆棧 .237 7.19 多維結(jié)構(gòu)240 7.20 程序:運(yùn)行時(shí)間比較 242 第8章 面向?qū)ο蠹夹g(shù) 245 8.0 引言 .245 8.1 使用toString()格式化對(duì)象并輸出 247 8.2 覆蓋equals()和hashCode()方法249 8.3 使用關(guān)閉鉤子清理程序 .254 8.4 使用內(nèi)部類 256 8.5 通過接口提供回調(diào).257 8.6 多態(tài)性/抽象方法 .260 8.7 傳遞數(shù)值262 8.8 使用類型安全的枚舉 .265 8.9 Singleton模式 269 8.10 自定義異常 271 8.11 使用依賴注入 272 8.12 程序: 繪圖儀 275 第9章 函數(shù)式編程技術(shù): 函數(shù)接口、 流、 并行集合 279 9.0 引言 .279 9.1 使用lambda/Closure替代內(nèi)部類 281 9.2 使用lambda預(yù)定義接口 .284 9.3 使用流 .287 9.4 使用并行流與集合提高吞吐量 288 9.5 創(chuàng)建自己的函數(shù)式接口 .289 9.6 函數(shù)引用292 9.7 Java Mixins: 方法混合 .296 第10章 輸入與輸出 . 298 10.0 引言 .298 10.1 從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù)301 10.2 從控制臺(tái)或控制終端讀取數(shù)據(jù), 隱藏讀取密碼 303 10.3 向標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯(cuò)誤流寫數(shù)據(jù) 305 10.4 使用 Formatter 和 printf輸出 .307 10.5 使用Stream Tokenizer的掃描輸入 .310 10.6 使用Scanner類掃描輸入 315 10.7 使用語法結(jié)構(gòu)掃描輸入 .318 10.8 按文件名打開文件.319 10.9 復(fù)制文件320 10.10 把文件讀入一個(gè)字符串 .326 10.11 重新分配標(biāo)準(zhǔn)流.327 10.12 復(fù)制一個(gè)流 328 10.13 讀/寫不同的字符集331 10.14 行結(jié)束符332 10.15 平臺(tái)相關(guān)的文件編碼 .332 10.16 閱讀“ 連續(xù)” 行.334 10.17 讀/寫二進(jìn)制數(shù)據(jù)338 10.18 在文件中定位 338 10.19 處理C程序?qū)懙臄?shù)據(jù)流.340 10.20 存儲(chǔ)和還原Java對(duì)象342 10.21 防止ClassCastExceptions異常345 10.22 讀寫JRA或Zip文檔 347 10.23 利用get Resource()和getResourceAsStream()獲得文件 .350 10.24 讀寫壓縮文件 352 10.25 了解串行和并行端口的通信API353 10.26 將用戶數(shù)據(jù)保存到磁盤 .357 10.27 程序: 將文本輸出為PostScript格式361 第11章 目錄和文件系統(tǒng)操作 364 11.0 引言 .364 11.1 獲取文件信息 364 11.2 創(chuàng)建一個(gè)文件 367 11.3 重命名一個(gè)文件.368 11.4 刪除一個(gè)文件 369 11.5 創(chuàng)建臨時(shí)文件 370 11.6 改變文件屬性 372 11.7 列出目錄內(nèi)容 373 11.8 獲取根目錄 375 11.9 創(chuàng)建新的目錄 377 11.10 使用路徑而不是文件 .377 11.11 使用FileWatcher 服務(wù)得到文件變化的通知. 379 11.12 程序: Find.381 第12章 媒體: 圖形、 音頻、 視頻. 384 12.0 引言 .384 12.1 使用Graphics對(duì)象畫圖 385 12.2 無需編寫主函數(shù)顯示圖形組件 386 12.3 繪制文本387 12.4 在組件中央繪制文本 .388 12.5 繪制陰影389 12.6 繪制2D( 二維) 文本 391 12.7 使用應(yīng)用程序字體繪制文本 394 12.8 繪制圖像396 12.9 使用 javax.imageio讀寫圖像399 12.10 播放音頻/語音文件401 12.11 播放視頻文件.402 12.12 在Java中打印 407 12.13 程序: PlotterAWT .410 12.14 程序: Grapher .412 第13章 網(wǎng)絡(luò)客戶端 . 416 13.0 引言 .416 13.1 訪問服務(wù)器 418 13.2 查找和報(bào)告網(wǎng)絡(luò)地址 .419 13.3 處理網(wǎng)絡(luò)錯(cuò)誤 421 13.4 讀寫文本數(shù)據(jù) 422 13.5 讀寫二進(jìn)制數(shù)據(jù).424 13.6 讀寫串行化數(shù)據(jù).427 13.7 UDP數(shù)據(jù)報(bào) 428 13.8 程序: TFTP的UDP客戶端 431 13.9 URI、 URL, 還是URN? 435 13.10 輕量級(jí)Web服務(wù)客戶端 436 13.11 SOAP Web服務(wù)客戶端 .438 13.12 程序: Telnet客戶端.442 13.13 程序: 聊天客戶端 .444 13.14 程序: 簡單的HTTP鏈接檢查器 448 第14章 圖形用戶界面. 450 14.0 引言 .450 14.1 顯示GUI( 圖形用戶界面) 組件 .451 14.2 在事件調(diào)度線程上運(yùn)行GUI.453 14.3 設(shè)計(jì)一個(gè)窗口布局.454 14.4 選項(xiàng)卡視圖 457 14.5 事件處理: 使按鈕工作 .458 14.6 使用匿名內(nèi)部類進(jìn)行事件處理 460 14.7 使用Lambdas的事件處理.461 14.8 用“ 窗口關(guān)閉” 來終止程序 462 14.9 對(duì)話框 .467 14.10 捕捉和格式化GUI異常 469 14.11 在窗口上打印.472 14.12 使用JSpinner選擇一個(gè)值 .478 14.13 用JFileChoose選擇一個(gè)文件479 14.14 選擇一種顏色 481 14.15 用HTML格式化jcomponents484 14.16 將主窗口居中顯示 .485 14.17 改變Swing程序的外觀和感覺488 14.18 改進(jìn)MAC OS X下的Swing GUI 492 14.19 使用JavaFX構(gòu)建GUI應(yīng)用程序.494 14.20 程序: 定制字體選擇器 .496 14.21 程序: 定制AWT/Swing布局管理器 500 第15章 國際化和本地化 508 15.0 引言 .508 15.1 用I18N資源創(chuàng)建一個(gè)按鈕 .509 15.2 列出可用的語言環(huán)境 . 511 15.3 使用I18N資源創(chuàng)建菜單 .512 15.4 編寫國際化的方便子程序512 15.5 使用I18N資源創(chuàng)建一個(gè)對(duì)話框514 15.6 創(chuàng)建一個(gè)資源包.516 15.7 從代碼中提取字符串 .517 15.8 使用特定的語言環(huán)境 .518 15.9 設(shè)置默認(rèn)語言環(huán)境.519 15.10 使用MessageFormat格式化消息 520 15.11 程序: MenuIntl 522 15.12 程序: BusCard .524 第16章 Java服務(wù)器端 . 528 16.0 引言 .528 16.1 打開服務(wù)器套接字.529 16.2 返回一個(gè)響應(yīng)( 字符串或二進(jìn)制) .531 16.3 通過網(wǎng)絡(luò)連接返回對(duì)象信息 534 16.4 處理多個(gè)客戶端.535 16.5 為HTTP協(xié)議服務(wù).540 16.6 用SSL和JSSE保護(hù)Web服務(wù)器 .542 16.7 網(wǎng)絡(luò)日志545 16.8 使用SLF4J進(jìn)行網(wǎng)絡(luò)日志記錄 .546 16.9 使用log4j進(jìn)行網(wǎng)絡(luò)日志記錄 .548 16.10 使用java.util.logging進(jìn)行網(wǎng)絡(luò)日志記錄 551 16.11 查找網(wǎng)絡(luò)接口.553 16.12 程序: 一個(gè)Java聊天服務(wù)器.554 第17章 Java和電子郵箱 560 17.0 引言 .560 17.1 發(fā)送電子郵件: 瀏覽器版本 561 17.2 發(fā)送電子郵件: 真實(shí)的 .564 17.3 啟用服務(wù)器程序的郵件發(fā)送 567 17.4 發(fā)送MIME郵件 .572 17.5 提供郵件設(shè)置 575 17.6 閱讀電子郵件 576 17.7 程序: MailReaderBean580 17.8 程序: MailClient.584 第18章 數(shù)據(jù)庫訪問 . 594 18.0 引言 594 18.1 用JPA或Hibernate輕松訪問數(shù)據(jù)庫 596 18.2 JDBC設(shè)置和連接.601 18.3 連接JDBC數(shù)據(jù)庫.604 18.4 發(fā)送一個(gè)JDBC查詢并獲取結(jié)果 607 18.5 使用JDBC準(zhǔn)備好的語句610 18.6 在JDBC中使用存儲(chǔ)過程614 18.7 使用ResultSet修改數(shù)據(jù)614 18.8 在RowSet中存儲(chǔ)615 18.9 使用SQL更新數(shù)據(jù) .617 18.10 查找JDBC元數(shù)據(jù).619 18.11 程序: SQLRunner .623 第19章 處理JSON數(shù)據(jù) . 636 19.0 引言 .636 19.1 直接生成 JSON638 19.2 使用Jackson解析和編寫JSON .639 19.3 用org.json解析和編寫JSON 640 第20章 處理XML 643 20.0 引言 .643 20.1 用JAXB在對(duì)象與XML之間轉(zhuǎn)換 .646 20.2 使用序列化實(shí)現(xiàn)對(duì)象與XML之間的轉(zhuǎn)換 648 20.3 通過XSLT轉(zhuǎn)換XML 649 20.4 用SAX解析XML652 20.5 用DOM解析XML.654 20.6 用XPath查找XML元素 658 20.7 用Schema或DTD驗(yàn)證結(jié)構(gòu) 659 20.8 用DOM和XML轉(zhuǎn)換器生成自己的XML .662 20.9 程序xml2mif 664 第21章 包和打包 667 21.0 引言 .667 21.1 創(chuàng)建一個(gè)封裝包.668 21.2 用Javadoc為類寫文檔 669 21.3 超出Javadoc: 注解/元數(shù)據(jù) .673 21.4 用jar歸檔 .675 21.5 從一個(gè)JAR運(yùn)行一個(gè)程序 676 21.6 將一個(gè)類作為JavaBean678 21.7 將Bean放入一個(gè)JAR中681 21.8 打包一個(gè)Servlet到WAR文件 .683 21.9 編寫一次, 隨處安裝 .684 21.10 編寫一次, 在Mac OS X上進(jìn)行安裝 .684 21.11 Java Web Start 686 21.12 簽名你的JAR文件692 第22章 Java線程 694 22.0 引言 .694 22.1 在不同線程中運(yùn)行代碼 .696 22.2 用動(dòng)畫顯示運(yùn)動(dòng)圖像 .700 22.3 停止一個(gè)線程 704 22.4 交會(huì)和超時(shí) 707 22.5 用synchronized關(guān)鍵字實(shí)現(xiàn)線程同步 .708 22.6 使用鎖簡化同步.714 22.7 用wait()和notifyAll()同步線程 718 22.8 使用隊(duì)列接口簡化生產(chǎn)者/消費(fèi)者模式 723 22.9 用Fork/Join優(yōu)化并行處理725 22.10 在編輯器的后臺(tái)保存 .729 22.11 程序: 多線程網(wǎng)絡(luò)服務(wù)器730 22.12 使用Concurrency Utilities簡化服務(wù)器 .736 第23章 反射或“ 命名類的類” 739 23.0 引言 .739 23.1 獲取類描述符 740 23.2 查找并使用方法和域 .741 23.3 通過反射訪問私有的方法和域 744 23.4 動(dòng)態(tài)加載并實(shí)例化一個(gè)類746 23.5 通過一個(gè)ClassLoader從頭開始構(gòu)造一個(gè)類 .748 23.6 性能計(jì)時(shí)749 23.7 輸出類的信息 753 23.8 顯示包中包含的類清單 .755 23.9 使用和定義注解.757 23.10 通過注解找到類似插件的類 762 23.11 程序: CrossRef .764 23.12 程序: AppletViewer 766 第24章 Java和其他語言的結(jié)合 773 24.0 引言 .773 24.1 在Java中運(yùn)行外部程序 774 24.2 運(yùn)行一個(gè)程序并捕捉其輸出 778 24.3 通過javax.script調(diào)用其他語言.781 24.4 啟動(dòng)自己的腳本引擎 .783
你還可能感興趣
我要評(píng)論
|