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