本書是Oracle公司指定的Java語言入門教程,由Java語言和平臺開發(fā)團隊的多位成員親自撰寫,并由眾多世界級Java專家精心評審,確保了準(zhǔn)確性和及時性,多年來引領(lǐng)了一批又一批程序員步入Java殿堂。
目 錄第1章 快速入門1關(guān)于Java技術(shù)1Java程序語言2Java平臺2Java技術(shù)的功能4Java技術(shù)的優(yōu)勢4“Hello World!”示例程序5用NetBeans IDE開發(fā)“Hello World!”6在Microsoft Windows中開發(fā)“Hello World!”15在Solaris和Linux中開發(fā)“Hello World!”20“Hello World!”示例程序剖析23源碼注釋24HelloWorldApp類定義25main方法25常見問題(及其解決方案)27編譯器問題..27運行時問題..29問題和練習(xí):快速入門31問題31練習(xí)32答案32第2章 面向?qū)ο蟮木幊谈拍?3對象34類36繼承38接口39包40問題和練習(xí):面向?qū)ο蟮木幊谈拍?1問題41練習(xí)41答案41第3章 語言基礎(chǔ)43變量44命名45基本數(shù)據(jù)類型46數(shù)組51小結(jié)57問題和練習(xí):變量57運算符58賦值運算符、算術(shù)運算符和一元運算符59等式運算符、關(guān)系運算符和條件運算符62位運算符和移位運算符65小結(jié)66問題和練習(xí):運算符67表達式、語句和塊68表達式68語句 70塊71問題和練習(xí):表達式、語句和塊71控制流語句72if-then語句和if-then-else語句72switch語句74while語句和do-while語句..79for語句80分支語句82小結(jié)85問題和練習(xí):控制流語句86第4章 類和對象87類88聲明類89聲明成員變量90定義方法92構(gòu)建構(gòu)造器94將消息傳給方法或構(gòu)造器95對象99創(chuàng)建對象100使用對象104類的更多細節(jié)107方法的返回值107使用this關(guān)鍵字109控制對類成員的訪問110類成員112初始化字段116小結(jié)118問題和練習(xí):類119問題和練習(xí):對象120嵌套類121為什么使用嵌套類122靜態(tài)嵌套類122內(nèi)部類123隱藏123序列化124內(nèi)部類示例125局部類和匿名類127修飾符127局部類127匿名類131Lambda表達式136何時使用嵌套類、局部類、匿名類和Lambda表達式 155問題和練習(xí):嵌套類156枚舉類型157問題和練習(xí):枚舉類型161第5章 注解163注解的基本概念164注解格式164哪些地方使用注解165聲明注解類型165預(yù)定義注解類型167Java語言使用的注解類型167應(yīng)用于其他注解的注解類型169類型注解和可插拔類型系統(tǒng)170重復(fù)注解171步驟1:聲明可重復(fù)的注解類型172步驟2:聲明包含的注解類型172檢索注解173設(shè)計注意事項.173問題和練習(xí):注解173問題173練習(xí)174答案174第6章 接口與繼承175接口175Java語言的接口176將接口用作API177定義接口177實現(xiàn)接口178將接口用作類型180演化接口181默認方法182小結(jié)192問題和練習(xí):接口193繼承193Java平臺中類的層次結(jié)構(gòu)194繼承示例195子類能做什么196超類的私有成員196轉(zhuǎn)換對象197狀態(tài)、實現(xiàn)和類型的多繼承198覆蓋和屏蔽方法199多態(tài)性203屏蔽字段206使用super關(guān)鍵字206將對象用作超類208編寫final類和方法212抽象方法和類212小結(jié)216問題和練習(xí):繼承216第7章 泛型219為什么用泛型220泛型類型220一個簡單的Box類220Box類的泛型版本221類型參數(shù)命名約定221泛型類型的調(diào)用和實例化222鉆石運算符223多個類型參數(shù)223參數(shù)化類型224原生類型224泛型方法226受限類型參數(shù)227多重限制228泛型方法和受限類型參數(shù)229泛型、繼承和子類型229泛型類和子類型230類型推導(dǎo)232類型推導(dǎo)與泛型方法232類型推導(dǎo)與泛型類的實例化233類型推導(dǎo)與泛型類和非泛型類的泛型構(gòu)造器234目標(biāo)類型235通配符236上界通配符236界通配符 237下界通配符238通配符和子類型239通配符匹配和輔助方法240通配符使用指南243類型擦除244泛型類型的擦除245泛型方法的擦除246類型擦除效果和橋方法247不可具體化類型和可變長參數(shù)方法249泛型的局限性252不能用基本數(shù)據(jù)類型實例化泛型類型252不能創(chuàng)建類型參數(shù)實例253不能聲明類型為“類型參數(shù)”的靜態(tài)字段254對參數(shù)化類型不能用類型轉(zhuǎn)換或運算符254不能創(chuàng)建參數(shù)化類型數(shù)組255不能創(chuàng)建、捕獲或拋出參數(shù)化類型的對象255不能重載方法,若方法每次重載的形式參數(shù)類型都被擦為相同的原生類型256問題和練習(xí):泛型256答案258第8章 程序包259創(chuàng)建和使用程序包259創(chuàng)建程序包261命名程序包262使用程序包成員263管理源文件和類文件267小結(jié)269問題和練習(xí):創(chuàng)建和使用程序包269問題269練習(xí)270答案270第9章 數(shù)和字符串271數(shù)271Number類272格式化數(shù)字打印輸出274其他數(shù)學(xué)運算方法279自動裝箱和拆箱283小結(jié)286問題和練習(xí):數(shù)286字符287轉(zhuǎn)義字符288字符串288創(chuàng)建字符串289字符串長度290字符串連接291創(chuàng)建格式字符串292數(shù)字和字符串之間的轉(zhuǎn)換292操作字符串中的字符295比較字符串和字符串的子串300StringBuilder類302小結(jié)306問題和練習(xí):字符和字符串307第10章 異常309什么是異常310捕獲或指明規(guī)定311三類異常311繞過捕獲或指明312捕獲和處理異常.313try塊314catch塊315finally塊316try-with-resources語句317匯總320指明一個方法拋出的異常323如何拋出異常324throw語句325Throwable類及其子類325Error類326Exception類326鏈?zhǔn)疆惓?.326創(chuàng)建異常類328未檢查異常:爭議329異常的優(yōu)點330優(yōu)點1:從正規(guī)代碼中分離出錯誤處理代碼331優(yōu)點2:根據(jù)調(diào)用棧上傳錯誤332優(yōu)點3:分組和區(qū)分錯誤類型334小結(jié)335問題和練習(xí)336問題336練習(xí)337答案337第11章 基本I/O和NIO.2339I/O流339字節(jié)流340字符流342緩沖流345掃描和格式化346命令行I/O352數(shù)據(jù)流354對象流357文件I/O(以NIO.2為特征)359什么是路徑(以及其他文件系統(tǒng)情況)359Path類362文件操作370檢查文件或目錄374刪除文件或目錄375復(fù)制文件或目錄376移動文件或目錄377管理元數(shù)據(jù)(文件和文件存儲屬性)378讀取、寫入和創(chuàng)建文件386隨機存取文件393創(chuàng)建和讀取目錄395符號鏈接或其他方式的鏈接399遍歷文件樹401查找文件407監(jiān)視目錄的變化410其他有用的方法416遺留文件的 I/O代碼 418小結(jié)421問題和練習(xí):基本I/O422問題422練習(xí)422答案422第12章 集合423集合簡介424集合框架是什么424Java集合框架的好處425接口426Collection接口428遍歷集合429Collection接口的批量操作432Collection接口的數(shù)組操作432Set接口433List接口438Queue接口446Deque接口448Map接口449對象排序458SortedSet接口464SortedMap接口467小結(jié)469問題和練習(xí):接口470聚合操作471管道和流472聚合操作和迭代的區(qū)別474歸約474并行480副作用484問題和練習(xí):聚合操作487實現(xiàn)489Set實現(xiàn)492List實現(xiàn)493Map實現(xiàn)495Queue實現(xiàn)496Deque實現(xiàn)498封裝實現(xiàn)499簡單實現(xiàn)502小結(jié)504問題和練習(xí):實現(xiàn)504算法505排序505混排508常規(guī)數(shù)據(jù)操作.508查詢508組合509查找極值509自定義集合實現(xiàn)509為何自定義實現(xiàn)510如何編寫自定義實現(xiàn) 511互操作性513兼容性513API設(shè)計515第13章 并發(fā)519進程和線程520進程520線程520線程對象521定義和啟動一個線程521使用Sleep函數(shù)暫停執(zhí)行522中斷523聯(lián)合525簡單線程例子525同步527線程沖突527內(nèi)存一致性錯誤528同步方法529內(nèi)部鎖和同步531原子訪問533活性533死鎖534饑餓和活鎖535保護塊535不可變對象539同步類舉例540定義不可變對象的策略541高級并發(fā)對象543鎖對象544執(zhí)行器546并發(fā)集合552原子變量553并發(fā)隨機數(shù)554問題和練習(xí):并發(fā)555問題555練習(xí)555答案556第14章 正則表達式557簡介558什么是正則表達式558包中的正則表達式如何表示558測試工具559字符串文字560元字符.561字符類562簡單類562預(yù)定義字符類566量詞568零長度匹配569捕獲組和帶有量詞的字符類572貪婪型、勉強型和占有型量詞之間的區(qū)別573捕獲組574編號574反向引用575邊界匹配器576模式類的方法578使用標(biāo)記創(chuàng)建模式578嵌套標(biāo)記表達式580使用matches(String, CharSequence)方法580使用split(String)方法581其他實用方法582java.lang.String中模式方法的等價582Matcher類的方法583索引方法583學(xué)習(xí)方法584替換方法584使用start和end方法585使用matches和lookingAt方法586使用replaceFirst(String) 和replaceAll(String) 587使用appendReplacement(StringBuffer, String)和appendTail(StringBuffer)588Matcher方法在java.lang.String中的等價589PatternSyntaxException類的方法589Unicode支持591匹配特定代碼點591Unicode字符屬性591問題和練習(xí):正則表達式592問題592練習(xí)593答案593第15章 平臺環(huán)境595配置工具595屬性596命令行參數(shù)600環(huán)境變量601其他配置工具602系統(tǒng)工具603命令行I/O對象603系統(tǒng)屬性604安全管理器607系統(tǒng)的其他方法608路徑和類路徑609更新PATH環(huán)境變量(Microsoft Windows)609更新PATH變量(Solaris、Linux和OS X)611檢查CLASSPATH變量(所有平臺)612問題和練習(xí):平臺環(huán)境613問題613練習(xí)614答案614第16章 在JAR文件中打包程序615JAR文件使用入門616創(chuàng)建JAR文件616查看JAR文件內(nèi)容620抽取JAR文件內(nèi)容622更新JAR文件623運行打包為JAR的軟件625清單文件使用入門627理解默認的清單文件627修改清單文件628設(shè)置應(yīng)用程序的入口點629將類文件加入JAR文件的類路徑630設(shè)置包版本信息631用JAR文件封裝包633加強清單文件屬性的安全性634JAR文件的簽名和驗證635理解簽名和驗證636對JAR文件簽名639驗證簽名的JAR文件641使用JAR相關(guān)API642例子:JarRunner應(yīng)用643JarClassLoader類643JarRunner類646問題和練習(xí):在JAR文件中打包程序648問題648答案648第17章 Java Web Start649其他參考文獻650開發(fā)Java Web Start應(yīng)用650創(chuàng)建頂層JPanel類651創(chuàng)建應(yīng)用652從最后部署機制中分離出核心功能的好處652獲取資源653部署Java Web Start應(yīng)用653設(shè)置Web服務(wù)器656顯示自定義的加載進度指示器656開發(fā)自定義的加載進度指示器657為Java Web Start應(yīng)用指定自定義的加載進度指示器659運行Java Web Start應(yīng)用660通過瀏覽器運行Java Web Start應(yīng)用660通過Java Cache Viewer運行Java Web Start應(yīng)用660從桌面運行Java Web Start應(yīng)用661Java Web Start與安全661動態(tài)下載HTTPS認證662Java Web Start常見問題662問題和練習(xí):Java Web Start663問題663練習(xí)664答案664第18章 applet665開始使用applet666定義Applet類的子類666里程碑方法667applet的生命周期668applet的執(zhí)行環(huán)境670開發(fā)applet670部署applet673applet更多功能..677查找和加載數(shù)據(jù)文件677定義和使用applet參數(shù).678顯示簡短的狀態(tài)字符串681在瀏覽器中顯示文檔682從applet調(diào)用JavaScript代碼683從JavaScript代碼中調(diào)用applet方法686通過事件句柄處理初始化狀態(tài)689操縱applet網(wǎng)頁的DOM691顯示自定義加載進度指示器693將診斷寫入標(biāo)準(zhǔn)輸出和錯誤流698開發(fā)可拖動的applet698和其他applet通信701與服務(wù)器端應(yīng)用交互 703applet能做什么和不能做什么705applet常見問題及解決方案707問題和練習(xí):applet708問題708練習(xí)709答案709第19章 Java富互聯(lián)網(wǎng)應(yīng)用系統(tǒng)711設(shè)置可信參數(shù)和安全屬性711系統(tǒng)屬性713JNLP API714通過JNLP API訪問客戶端715cookie719cookie的類型719RIA中的cookie支持719獲取cookie720自定義加載體驗722RIA的安全性722安全RIA入門724安全代碼入門724測試最新的JRE724導(dǎo)入清單文件屬性725使用簽名的JNLP文件725對JAR文件進行簽名和加時間戳725使用HTTPS協(xié)議726避免局部RIA726問題和練習(xí):Java富互聯(lián)網(wǎng)應(yīng)用系統(tǒng)726問題726練習(xí)726答案727第20章 深入理解部署729RIA的用戶接受度729部署工具731部署工具腳本所在位置731部署applet732部署Java Web Start應(yīng)用735檢查客戶端的JRE軟件版本738Java網(wǎng)絡(luò)加載協(xié)議739JNLP文件結(jié)構(gòu)739部署的最佳實踐748減少下載時間748避免不必要的更新檢查749確保JRE軟件存在751問題和練習(xí):深入理解部署753問題753練習(xí)753答案753第21章 日期/時間API755日期/時間API簡介756日期/時間API設(shè)計原則756清晰756流暢757不可變757可擴展757日期/時間程序包757法命名約定758標(biāo)準(zhǔn)日歷759簡介759枚舉類型DayOfWeek和Month760DayOfWeek760Month762日期類762LocalDate763YearMonth763MonthDay764Year764日期時間類764LocalTime764LocalDateTime765時區(qū)和偏移量類766ZoneId和ZoneOffset766日期/時間類767實例類770解析和格式化772解析772格式化773時間包774Temporal和TemporalAccessor774ChronoField和IsoFields775ChronoUnit775時間調(diào)節(jié)器776時間查詢778周期和持續(xù)時間780持續(xù)時間781ChronoUnit781周期782時鐘783非ISO日期約定784轉(zhuǎn)換成非ISO類型的日期784轉(zhuǎn)換成ISO類型的日期786遺留的日期/時間代碼787與遺留代碼的互操作787將java.util的日期和時間類功能映射到j(luò)ava.time788日期和時間的格式789小結(jié)789問題和練習(xí):日期/時間API791問題791練習(xí)791答案791第22章 JavaFX簡介793附錄 Java程序語言認證復(fù)習(xí)大綱795程序員I級考試795主題1:Java基礎(chǔ)795主題2:Java數(shù)據(jù)類型的使用796主題3:運算符和判定構(gòu)造的使用797主題4:數(shù)組的創(chuàng)建和使用797主題5:循環(huán)構(gòu)造的使用798主題6:方法和封裝的使用798主題7:繼承的使用799主題8:異常處理799主題9:選用Java API中的類800程序員II級考試801Java SE 8升級考試801主題1:Lambda表達式801主題2:內(nèi)置Lambda類型的使用801主題3:過濾帶Lambda類型的集合802主題4:Lambda類型的集合操作803主題5:并行流803主題6:Lambda詳情804主題7:增強的方法804主題8:Java SE 8日期/時間API的使用804主題9:帶Nashorn的Java的JavaScript使用805