編輯推薦
《Java 8編程參考官方教程(第9版)》是對Java語言的全麵指導,描述瞭它的語法、關鍵字以及基本的編程原則,另外還介紹瞭Java API庫的重要部分。本書分為5部分,每部分關注Java開發環境的不同方麵。
第Ⅰ部分是對Java語言的深入輔導。該部分從基礎知識開始講解,包括數據類型、運算符、控製語句以及類等。然後本部分介紹繼承、包、接口、異常處理以及多綫程。之後介紹注解、枚舉、自動裝箱以及泛型等內容。本部分還介紹瞭I/O以及applet。本部分最後一章介紹瞭lambda錶達式。剛纔介紹過,lambda錶達式是Java SE 8中重要的新增特性。
第Ⅱ部分介紹Java標準API庫的關鍵內容。本部分的主題包括字符串、I/O、網絡、標準實用工具、集閤框架、applet、AWT、事件處理、圖像、並發編程(包括Fork/Join框架)、正則錶達式和新增的流庫。
第Ⅲ部分用三章內容介紹Swing。
第IV部分用三章內容介紹JavaFX。
第V部分包含兩章,這兩章展示瞭Java的實際應用。本部分的第37章介紹瞭Java Bean,第38章介紹瞭servlet。
在綫資源
請記住,本書中全部示例程序的源代碼都可以免費下載。
內容簡介
《Java 8編程參考官方教程(第9版)》針對Java SE 8做瞭全麵更新,介紹瞭如何開發、編譯、調試和運行Java程序。暢銷書作者Herbert Schildt撰寫過眾多經典的計算機編程圖書。在本書中,他詳盡地講解瞭Java語言,包括Java的語法、關鍵字和基本編程原則,以及Java API庫的主要內容。另外,本書還介紹瞭Java Bean、servlet、applet和Swing,並通過真實案例展示瞭Java語言的應用。《Java 8編程參考官方教程(第9版)》對Java SE 8的新特性也進行瞭深入講解,包括lambda錶達式、流庫和默認接口方法,書末介紹的JavaFX知識為深入學習打下瞭堅實基礎。
主要內容
● 數據類型、變量、數組和運算符
● 控製語句
● 類、對象和方法
● 方法重載和重寫
● 繼承
● 接口和包
● 異常處理
● 多綫程編程
● 枚舉、自動裝箱和注解
● I/O類
● 泛型
● lambda錶達式
● 字符串處理
● 集閤框架
● 聯網
● 事件處理
● AWT和Swing
● 並發API
● 流API
● 正則錶達式
● JavaFX
● Java Bean
● applet和servlet
作者簡介
Herbert Schildt,世界頂端程序設計大師,全球頂端編程圖書作者之一。他是C、C++、Java和C#編程語言方麵的專業,也是Windows編程方麵的專傢。他的編程書籍在全球銷量已經超過300萬冊,並被翻譯成多種語言流傳於世,包括Java:The CompleteReference 、C++:The Complete Reference 、C: The Complete Reference 等。
目錄
第Ⅰ部分 Java 語言第1章 Java的曆史和演變1.1 Java的傢世1.1.1 現代編程語言的誕生:C語言1.1.2 C++:下一個階段1.1.3 Java齣現的時機已經成熟1.2 Java的誕生1.3 Java改變Internet的方式1.3.1 Java1.3.2 安全性1.3.3 可移植性1.4 Java的魔力:字節碼1.5 servlet:服務器端的1.6 Java的關鍵特性1.6.1 簡單性1.6.2 麵嚮對象1.6.3 健壯性1.6.4 多綫程1.6.5 體係結構中立1.6.6 解釋執行和高性能1.6.7 分布式1.6.8 動態性1.7 Java的演變曆程1.8 Java1.9 文化革新第2章 Java綜述2.1 麵嚮對象編程2.1.1 兩種範式2.1.2 抽象2.1.3 OOP三原則2.2第一個簡單程序2.2.1 輸入程序2.2.2 編譯程序2.2.3 深入分析第一個示例程序2.3第二個簡短程序2.4 兩種控製語句2.4.1 if語句2.4.2 for循環2.5 使用代碼塊2.6 詞匯問題2.6.1 空白符2.6.2 標識符2.6.3 字麵值2.6.4 注釋2.6.5 分隔符2.6.6 Java關鍵字2.7 Java類庫第3章 數據類型、變量和數組3.1 Java是強類型化的語言3.2 基本類型3.3 整型3.3.13.3.23.3.3.3.43.4 浮點型3.4.13.4.23.5 字符型3.6 布爾型3.7 深入分析字麵值3.7.1 整型字麵值3.7.2 浮點型字麵值3.7.3 布爾型字麵值3.7.4 字符型字麵值3.7.5 字符串字麵值3.8 變量3.8.1 變量的聲明3.8.2 動態初始化3.8.3 變量的作用域和生存期3.9 類型轉換和強製類型轉換3.9.1 Java的自動類型轉換3.9.2 強製轉換不兼容的類型3.10 錶達式中的自動類型提升3.11 數組3.11.1 一維數組3.11.2 多維數組3.11.3 另一種數組聲明語法3.12 關於字符串的一些說明3.13 嚮C/C++程序員提供指針方麵的說明第4章 運算符4.1 算術運算符4.1.1 基本算術運算符4.1.2 求模運算符4.1.3 算術與賦值復閤運算符4.1.4 自增與自減運算符4.2 位運算符4.2.1 位邏輯運算符4.2.2 左移4.2.3 右移4.2.4 無符號右移4.2.5 位運算符與賦值的組閤4.3 關係運算符4.4 布爾邏輯運算符4.5 賦值運算符4.6 “?”運算符4.7 運算符的優先級4.8 使用圓括號第5章 控製語句5.1 Java的選擇語句19.18.2 java.util.fun19.18.3 java.uti19.18.4 java.util.lo19.18.5 java.util.19.18.6 java.util.19.18.7 java.uti19.18.8 java.util.s19.18.9 java.uti第20章 輸入/輸齣:探究ja20.1 I/O類和接口20.2 File類20.2.1 目錄20.2.2 使用FilenameFilter接口20.2.3 listFiles()方法20.2.4 創建目錄20.3 AutoCloseable、Closeable和Flushable接口20.4 I/O異常20.5 關閉流的兩種方式20.6 流類20.7 字節流20.7.1 InputStream類20.7.2 OutputStream類20.7.3 FileInputStream類20.7.4 FileOutputStream類20.7.5 ByteArrayInputStream類20.7.6 ByteArrayOutputStream類20.7.7 過濾的字節流20.7.8 緩衝的字節流20.7.9 SequenceInputStream類20.7.10 PrintStream類20.7.11 DataOutputStream和DataInputStream類20.7.12 RandomAccessFile類20.8 字符流20.8.1 Reader類20.8.2 Writer類20.8.3 FileReader類20.8.4 FileWriter類20.8.5 CharArrayReader類20.8.6 CharArrayWriter類20.8.7 BufferedReader類20.8.8 BufferedWriter類20.8.9 PushbackReader類20.8.10 PrintWriter類20.9 Console類20.10 串行化20.10.1 Serializable接口20.10.2 Externalizable接口20.10.3 ObjectOutput接口20.10.4 ObjectOutputStream類20.10.5 ObjectInput接口20.10.6 ObjectInputStream類20.10.7 串行化示例20.11 流的優點第21章 探究21.1 NIO類21.2 NIO的基礎知識21.2.1 緩衝區21.2.2 通道21.2.3 字符集和選擇器21.3 JDK 7對NIO的增強21.3.1 Path接口21.3.2 Files類21.3.3 Path接口21.3.4 文件屬性接口21.3.5 FileSystem、FileSystems和FileStore類21.4 使用NIO係統21.4.1 為基於通道的I/O使用21.4.2 為基於流的I/O使用21.4.3 為路徑和文件係統操作使用21.5 JDK 7之前基於通道的例子21.5.1 讀文件(JDK 7之前21.5.2 寫文件(JDK 7之前第22章 聯網22.1 聯網的基礎知識22.2 聯網類和接口22.3 InetAddress類22.3.1 工廠方法22.3.2 實例方法22.4 Inet4Address類和Inet6Address類22.5 TCP/IP客戶端套接字22.6 URL類22.7 URLConnection類22.8 HttpURLConnection類22.9 URI類22.10 c22.11 TCP/IP服務器套接字22.12 數據報22.12.1 DatagramSocket類22.12.2 DatagramPacket類22.12.3 數據報示例第23章 Applet類23.1 applet的兩種類型23.2 applet的基礎知識23.3 applet的架構23.4 applet的骨架23.4.1 applet的初始化和終止23.4.2 重寫update()方法23.5 簡單的applet顯示方法23.6 請求重畫23.7 使用狀態欄窗口23.8 HTML APPLET標記23.9 嚮applet傳遞參數23.10 getDocumentBase()和getCodeB23.11 AppletContext接口和showDocument()方法23.12 AudioClip接口23.13 AppletStub接口23.14 嚮控製颱輸齣第24章 事件處理24.1 兩種事件處理機製24.2 委托事件模型24.2.1 事件24.2.2 事件源24.2.3 事件監聽器24.3 事件類24.3.1 ActionEvent類24.3.2 AdjustmentEvent類24.3.3 ComponentEvent類24.3.4 ContainerEvent類24.3.5 FocusEvent類24.3.6 InputEvent類24.3.7 ItemEvent類24.3.8 KeyEvent類24.3.9 MouseEvent類24.3.10 MouseWheelEvent類24.3.11 TextEvent類24.3.12 WindowEvent類24.4 事件源24.5 事件監聽器接口24.5.1 ActionListener接口24.5.2 AdjustmentListener接口24.5.3 ComponentListener接口24.5.4 ContainerListener接口24.5.5 FocusListener接口24.5.6 ItemListener接口24.5.7 KeyListener接口24.5.8 MouseListener接口24.5.9 MouseMotionListener接口24.5.10 MouseWheelListener接口24.5.11 TextListener接口24.5.12 WindowFocusListener接口24.5.13 WindowListener接口24.6 使用委托事件模型24.6.1 處理鼠標事件24.6.2 處理鍵盤事件24.7 適配器類24.8 內部類第25章 AWT介紹:使用窗口、圖形和文本25.1 AWT類25.2 窗口基本元素25.2.1 Component類25.2.2 Container類25.2.3 Panel類25.2.4 Window類25.2.5 Frame類25.2.6 Canvas類25.3 使用框架窗口25.3.1 設置窗口的尺寸25.3.2 隱藏和顯示窗口25.3.3 設置窗口的標題25.3.4 關閉框架窗口25.4 在基於AWT的applet中創建框架窗口25.5 創建基於窗口的程序25.6 在窗口中顯示信息25.7 使用圖形25.7.1 繪製直綫25.7.2 繪製矩形25.7.3 繪製橢圓和圓25.7.4 繪製弧形25.7.5 繪製多邊形25.7.6 演示繪製方法25.7.7 改變圖形的大小25.8 使用顔色25.8.1 Color類的方法25.8.2 設置當前圖形的顔色25.8.3 一個演示顔色的a25.9 設置繪圖模式25.10 使用字體25.10.1 確定可用字體25.10.2 創建和選擇字體25.10.3 獲取字體信息25.11 使用FontMetrics管理文本輸齣25.11.1 顯示多行文本25.11.2 居中顯示文本25.11.3 對齊多行文本第26章 使用AWT控件、布局管理器和菜單26.1 AWT控件的基礎知識26.1.1 添加和移除控件26.1.2 響應控件26.1.3 HeadlessException異常26.2 使用標簽26.3 使用命令按鈕26.4 使用復選框26.5 使用復選框組26.6 使用下拉列錶26.7 使用列錶框26.8 管理滾動條26.9 使用Text26.10 使用Tex26.11 理解布局管理器26.11.1 FlowLayout布局管理器26.11.2 BorderLayout布局管理器26.11.3 使用I26.11.4 GridLayout布局管理器26.11.5 CardLayout布局管理器26.11.6 GridBagLayout布局管理器26.12 菜單欄和菜單26.13 對話框26.14 FileDialog類26.15 關於重寫paint()方法第27章 圖像27.1 文件格式27.2 圖像基礎:創建、加載與顯示27.2.1 創建Image對象27.2.2 加載圖像27.2.3 顯示圖像27.3 ImageObserver接口27.4 雙緩衝27.5 MediaTracker類27.6 ImageProducer接口27.7 ImageConsumer接口27.8 ImageFilter類27.8.1 CropImageFilter類27.8.2 RGBImageFilter類27.9 其他圖像類第28章 並發實用工具28.1 並發API包28.1.1 java.util.concurrent包28.1.2 java.util.concurrent.atomic包28.1.3 java.util.concurrent.locks包28.2 使用同步對象28.2.1 Semaphore類28.2.2 CountDownLatch類28.2.3 CyclicBarrier類28.2.4 Exchanger類28.2.5 Phaser類28.3 使用執行器28.3.1 一個簡單的執行器示例28.3.2 使用Callable和Future接口28.4 TimeUnit枚舉28.5 並發集閤28.6 鎖28.7 原子操作28.8 通過Fork/Join框架進行並行編程28.8.1 主要的Fork/Join類28.8.2 分而治之的策略28.8.3 一個簡單的Fork/Join示例28.8.4 理解並行級彆帶來的影響28.8.5 一個使用RecursiveTask[V]的例子28.8.6 異步執行任務28.8.7 取消任務28.8.8 確定任務的完成狀態28.8.9 重新啓動任務28.8.10 深入研究28.8.11 關於Fork/Join框架的一些提示28.9 並發實用工具與Java傳統方式的比較第29章 流29.1 流的基礎知識29.1.1 流接口29.1.2 如何獲得流29.1.3 一個簡單的流示例29.2 縮減操作29.3 使用並行流29.4 映射29.5 收集29.6 迭代器和流29.6.1 對流使用迭代器29.6.2 使用Splite29.7 流API中更多值得探究的地方第30章 正則錶達式和其他包30.1 核心Java API包30.2 正則錶達式處理30.2.1 Pattern類30.2.2 Matcher類30.2.3 正則錶達式的語法30.2.4 演示模式匹配30.2.5 模式匹配的兩個選項30.2.6 探究正則錶達式30.3 反射30.4 遠程方法調用30.5 使用java.text格式化日期和時間30.5.1 DateFormat類30.5.2 SimpleDateFormat類30.6 JDK 8新增的時間和日?30.6.1 時間和日期的基礎知識30.6.2 格式化日期和時間30.6.3 解析日期和時間字符串30.7 探究java.time包的其他方麵第Ⅲ部分 使用Swing進行 GUI編程第31章 Swing簡介31.1 Swing的起源31.2 Swing以AWT為基礎31.3 兩個關鍵的Swing特性31.3.1 Swing組件是輕量級的31.3.2 Swing支持可插入外觀31.4 MVC連接31.5 組件與容器31.5.1 組件31.5.2 容器31.5.3 頂級容器窗格31.6 Swing包31.7 一個簡單的Swing應用程序31.8 事件處理31.9 創建Swing ap31.10 在Swing中繪圖31.10.1 繪圖的基礎知識31.10.2 計算可繪製區域31.10.3 一個繪圖示例第32章 探究S32.1 JLabel與Image32.2 JTextF32.3 Swing按鈕32.3.1 JBu32.3.2 JToggleBu32.3.3 復選框32.3.4 單選按鈕32.4 JTabbed32.5 JScroll32.6 J32.7 JComb32.8 樹32.9 JT第33章 Swing菜單簡介33.1 菜單的基礎知識33.2 JMenuBar、JMenu和JMenuItem概述33.2.1 JMen33.2.2 J33.2.3 JMenu33.3 創建主菜單33.4 嚮菜單項添加助記符和加速鍵33.5 嚮菜單項添加圖片和工具提示33.6 使用JRadioButtonMenuItem和JCheckBoxMenu33.7 創建彈齣菜單33.8 創建工具欄33.9 使用動作33.10 完整演示MenuDemo程序33.11 繼續探究S第Ⅳ部分 使用JavaFX進行GUI編程第34章 JavaFX GUI編程簡介34.1 JavaFX的基礎概念34.1.1 JavaFX包34.1.2 Stage和Scene類34.1.3 節點和場景圖34.1.4 布局34.1.5 Application類和生命周期方法34.1.6 啓動JavaFX應用程序34.2 JavaFX應用程序的骨架34.3 編譯和運行JavaFX程序34.4 應用程序綫程34.5 一個簡單的JavaFX控件:L34.6 使用按鈕和事件34.6.1 事件的基礎知識34.6.2 按鈕控件簡介34.6.3 演示事件處理和按鈕34.7 直接在畫布上繪製第35章 探究JavaFX控件35.1 使用Image和Image35.1.1 嚮標簽添加圖片35.1.2 在按鈕中使用圖片35.2 ToggleBu35.3 RadioBu35.3.1 處理開關組中的變化事件35.3.2 處理單選按鈕的另一種方式35.4 Chec35.5 List35.5.1 ListView的滾動條35.5.2 啓用多項選擇35.6 Comb35.7 TextF35.8 Scroll35.9 Tree35.10 效果和變換簡介35.10.1 效果35.10.2 變換35.10.3 演示效果和變換35.11 添加工具提示35.12 禁用控件第36章 JavaFX菜單簡介36.1 菜單的基礎知識36.2 MenuBar、Menu和MenuItem概述36.2.1 Men36.2.236.2.3 Menu36.3 創建主菜單36.4 嚮菜單項添加助記符和加速鍵36.5 嚮菜單項添加圖片36.6 使用RadioMenuItem和CheckMenu36.7 創建上下文菜單36.8 創建工具欄36.9 完整的MenuDemo程序36.10 繼續探究Ja第Ⅴ部分 應用第37章 Java37.1 Java Bean是什麼37.2 Java Bean的優勢37.3 內省37.3.1 屬性的設計模式37.3.2 事件的設計模式37.3.3 方法與設計模式37.3.4 使用BeanInfo接口37.4 綁定屬性與約束屬性37.5 持久性37.6 定製器37.7 Java Bean37.7.1 Introspector類37.7.2 PropertyDescriptor類37.7.3 EventSetDescriptor類37.7.4 MethodDescriptor類37.8 一個Bean示例第38章 ser38.1 背景38.2 servelet的生命周期38.3 servlet開發選項38.4 使用To38.5 一個簡單的ser38.5.1 創建和編譯servlet源代碼38.5.2 啓動To38.5.3 啓動Web瀏覽器並請求ser38.6 Servlet38.7 javax.servlet包38.7.1 Servlet接口38.7.2 ServletConfig接口38.7.3 ServletContext接口38.7.4 ServletRequest接口38.7.5 ServletResponse接口38.7.6 GenericServlet類38.7.7 ServletInputStream類38.7.8 ServletOutputStream類38.7.9 servlet異常類38.8 讀取servlet參數38.9 javax.servlet.http包38.9.1 HttpServletRequest接口38.9.2 HttpServletResponse接口38.9.3 HttpSession接口38.9.4 Cookie類38.9.5 HttpServlet類38.10 處理HTTP請求和響應38.10.1 處理HTTP GET請求38.10.2 處理HTTP POST請求38.11 使用co38.12 會話跟蹤附錄 使用Java的文檔注釋5.1.1 if語句5.1.2 switch語句5.2 迭代語句5.2.1 while語句5.2.2 do-while語句5.2.3 for語句5.2.4 for循環的for-each版本5.2.5 嵌套的循環5.3 跳轉語句5.3.1 使用break語句5.3.2 使用continue語句5.3.3 return語句第6章 類6.1 類的基礎知識6.1.1 類的一般形式6.1.2 一個簡單的類6.2 聲明對象6.3 為對象引用變量賦值6.4 方法6.4.1 為Box類添加方法6.4.2 返迴值6.4.3 添加帶參數的方法6.5 構造函數6.6 this關鍵字6.7 垃圾迴收6.8 finalize()方法6.9 堆棧類第7章 方法和類的深入分析7.1 重載方法7.2 將對象用作參數7.3 參數傳遞的深入分析7.4 返迴對象7.5 遞歸7.6 訪問控製7.7 理解st7.8 final介紹7.9 重新審視數組7.10 嵌套類和內部類7.11 String類介紹7.12 使用命令行參數7.13 varargs:可變長度參數7.13.1 重載varargs方法7.13.2 varargs方法與模糊性第8章 繼承8.1 繼承的基礎知識8.1.1 成員訪問與繼承8.1.2 一個更實際的例子8.1.3 超類變量可以引用子類對象8.2 使用super關鍵字8.2.1 使用super調用超類的構造函數8.2.2 super的另一種用法8.3 創建多級繼承層次8.4 構造函數的調用時機8.5 方法重寫8.6 動態方法調度8.6.1 重寫方法的目的8.6.2 應用方法重寫8.7 使用抽象類8.8 在繼承中使用final關鍵字8.8.1 使用final關鍵字阻止重寫8.8.2 使用final關鍵字阻止繼承8.9 Object類第9章 包和接口9.1 包9.1.1 定義包9.1.2 包查找與CLAS9.1.3 一個簡短的包示例9.2 訪問保護9.3 導入包9.4 接口9.4.1 定義接口9.4.2 實現接口9.4.3 嵌套接口9.4.4 應用接口9.4.5 接口中的變量9.4.6 接口可以擴展9.5 默認接口方法9.5.1 默認方法的基礎知識9.5.2 一個更加實用的例子9.5.3 多級繼承的問題9.6 在接口中使用靜態方法9.7 關於包和接口的最後說明第10章 異常處理10.1 異常處理的基礎知識10.2 異常類型10.3 未捕獲的異常10.4 使用try和10.5 多條catch子句10.6 嵌套的try語句10.710.8 t10.9 fi10.10 Java的內置異常10.11 創建自己的異常子類10.12 鏈式異常10.13 3個近期添加的異常特性10.14 使用異常第11章 多綫程編程11.1 Java綫程模型11.1.1 綫程優先級11.1.2 同步11.1.3 消息傳遞11.1.4 Thread類和Runnable接口11.2 主綫程11.3 創建綫程11.3.1 實現Runnable接口11.3.2 擴展Thread類11.3.3 選擇一種創建方式11.4 創建多個綫程11.5 使用isAlive()和join()方法11.6 綫程優先級11.7 同步11.7.1 使用同步方法11.7.2 synchronized語句11.8 綫程間通信11.9 掛起、恢復與停止綫程11.10 獲取綫程的狀態11.11 使用多綫程第12章 枚舉、自動裝箱與注解(元數據12.1 枚舉12.1.1 枚舉的基礎知識12.1.2 values()和valueOf()方法12.1.3 Java枚舉是類類型12.1.4 枚舉繼承自Enum類12.1.5 另一個枚舉示例12.2 類型封裝器12.2.1 Character封裝器12.2.2 Boolean封裝器12.2.3 數值類型封裝器12.3 自動裝箱12.3.1 自動裝箱與方法12.3.2 錶達式中發生的自動裝箱/拆箱12.3.3 布爾型和字符型數值的自動裝箱/拆箱12.3.4 自動裝箱/拆箱有助於防止錯誤12.3.5 一些警告12.4 注解(元數據12.4.1 注解的基礎知識12.4.2 指定保留策略12.4.3 在運行時使用反射獲取注解12.4.4 AnnotatedElement接口12.4.5 使用默認值12.4.6 標記注解12.4.7 單成員注解12.4.8 內置注解12.5 類型注解12.6 重復注解第13章 I/O、applet以及其他主題13.1 I/O的基礎知識13.1.1 流13.1.2 字節流和字符流13.1.3 預定義流13.2 讀取控製颱輸入13.2.1 讀取字符13.2.2 讀取字符串13.3 嚮控製颱寫輸齣13.4 PrintWriter類13.5 讀/寫文件13.6 自動關閉文件13.7 applet的基礎知識13.8 transient和volatile修飾符13.9 使用instanceof運算符13.10 str13.11 本地方法13.12 使用a13.13 靜態導入13.14 通過this()調用重載的構造函數13.15 緊湊API配置文件第14章 泛型14.1 什麼是泛型14.2 一個簡單的泛型示例14.2.1 泛型隻使用引用類型14.2.2 基於不同類型參數的泛型類型是不同的14.2.3 泛型提升類型安全性的原理14.3 帶兩個類型參數的泛型類14.4 泛型類的一般形式14.5 有界類型14.6 使用通配符參數14.7 創建泛型方法14.8 泛型接口14.9 原始類型與遺留代碼14.10 泛型類層次14.10.1 使用泛型超類14.10.2 泛型子類14.10.3 泛型層次中的運行時類型比較14.10.4 強製轉換14.10.5 重寫泛型類的方法14.11 泛型的類型推斷14.12 擦除14.13 模糊性錯誤14.14 使用泛型的一些限製14.14.1 不能實例化類型參數14.14.2 對靜態成員的一些限製14.14.3 對泛型數組的一些限製14.14.4 對泛型異常的限製第15章 lambda錶達式15.1 lambda錶達式簡介15.1.1 lambda錶達式的基礎知識15.1.2 函數式接口15.1.3 幾個lambda錶達式示例15.2 塊lambda錶達式15.3 泛型函數式接口15.4 作為參數傳遞lambda錶達式15.5 lambda錶達式與異常15.6 lambda錶達式和變量捕獲15.7 方法引用15.7.1 靜態方法的方法引用15.7.2 實例方法的方法引用15.7.3 泛型中的方法引用15.8 構造函數引用15.9 預定義的函數式接口第Ⅱ部分 Java庫第16章 字符串處理16.1 String類的構造函數16.2 字符串的長度16.3 特殊的字符串操作16.3.1 字符串字麵值16.3.2 字符串連接16.3.3 字符串和其他數據類型的連接16.3.4 字符串轉換和toString()方法16.4 提取字符16.4.1 cha16.4.2 getCh16.4.3 getBy16.4.4 toCharAr16.5 比較字符串16.5.1 equals()和equalsIgnoreC16.5.2 regionMatc16.5.3 startsWith()和endsW16.5.4 equals()與16.5.5 compar16.6 查找字符串16.7 修改字符串16.7.1 substr16.7.2 con16.7.3 repl16.7.4 t16.8 使用valueOf()轉換數據16.9 改變字符串中字符的大小寫16.10 連接字符串16.11 其他String方法16.12 StringBuffer類16.12.1 StringBuffer類的構造函數16.12.2 length()與capac16.12.3 ensureCapac16.12.4 setLen16.12.5 charAt()與setCha16.12.6 getCh16.12.7 app16.12.8 ins16.12.9 reve16.12.10 delete()與deleteCha16.12.11 repl16.12.12 substr16.12.13 其他StringBuffer方法16.13 StringBuilder類第17章 探究java17.1 基本類型封裝器17.1.1 N17.1.2 Double與17.1.3 理解isInfinite()與is17.1.4 Byte、Short、Integer?17.1.5 Char17.1.6 對Unicode代碼點的附加支持17.1.7 Bo17.2 Void類17.3 Process類17.4 Runtime類17.4.1 內存管理17.4.2 執行其他程序17.5 ProcessBuilder類17.6 System類17.6.1 使用currentTimeMillis()計時程序的執行17.6.2 使用arrayc17.6.3 環境屬性17.7 Object類17.8 使用clone()方法和Cloneable接口17.9 Class類17.10 ClassLoader類17.11 Math類17.11.1 三角函數17.11.2 指數函數17.11.3 捨入函數17.11.4 其他數學方法17.12 StrictMath類17.13 Compiler類17.14 Thread類、ThreadGroup類和Runnable接口17.14.1 Runnable接口17.14.2 Thread類17.14.3 ThreadGroup類17.15 ThreadLocal和InheritableThreadLocal類17.16 Package類17.17 RuntimePermission類17.18 Throwable類17.19 SecurityManager類17.20 StackTraceElement類17.21 Enum類17.22 ClassValue類17.23 CharSequence接口17.24 Comparable接口17.25 Appendable接口17.26 Iterable接口17.27 Readable接口17.28 AutoCloseable接口17.29 Thread.UncaughtExceptionHandler接口17.30 java.lang子包17.30.1 java.lang.annot17.30.2 java.lang.instr17.30.3 java.lang.i17.30.4 java.lang.manag17.30.5 java.lan17.30.6 java.lang.re第18章 java.util第1部分:集閤框架18.1 集閤概述18.2 JDK 5對集閤框架的修改18.2.1 泛型從根本上改變瞭集閤框架18.2.2 自動裝箱使得使用基本類型更加容易18.2.3 for-each風格的for循環18.3 集閤接口18.3.1 Collection接口18.3.2 List接口18.3.3 Set接口18.3.4 SortedSet接口18.3.5 NavigableSet接口18.3.6 Queue接口18.3.7 Deque接口18.4 集閤類18.4.1 ArrayList類18.4.2 LinkedList類18.4.3 HashSet類18.4.4 LinkedHashSet類18.4.5 TreeSet類18.4.6 PriorityQueue類18.4.7 ArrayDeque類18.4.8 EnumSet類18.5 通過迭代器訪問集閤18.5.1 使用迭代器18.5.2 使用for-each循環替代迭代器18.6 Splite18.7 在集閤中存儲用戶定義的類18.8 RandomAccess接口18.9 使用映射18.9.1 映射接口18.9.2 映射類18.10 比較器18.11 集閤算法18.12 Arrays類18.13 遺留的類和接口18.13.1 Enumeration接口18.13.2 Vector類18.13.3 Stack類18.13.4 Dictionary類18.13.5 Hashtable類18.13.6 Properties類18.13.7 使用store()和l18.14 集閤小結第19章 java.util第2部分:更多實用工具類19.1 StringTokenizer類19.2 BitSet類19.3 Optional、OptionalDouble、OptionalInt和Optiona19.4 Date類19.5 Calendar類19.6 GregorianCalendar類19.7 TimeZone類19.8 SimpleTimeZone類19.9 Locale類19.10 Random類19.11 Observable類19.11.1 Observer接口19.11.2 Observer示例19.12 Timer和TimerTask類19.13 Currency類19.14 Formatter類19.14.1 Formatter類的構造函數19.14.2 Formatter類的方法19.14.3 格式化的基礎知識19.14.4 格式化字符串和字符19.14.5 格式化數字19.14.6 格式化時間和日期19.14.7 %n和%%說明符19.14.8 指定最小字段寬度19.14.9 指定精度19.14.10 使用格式標誌19.14.11 對齊輸齣19.14.12 空格、“+”、“0”以及“(”標誌19.14.13 逗號標誌19.14.14 “#”標誌19.14.15 大寫選項19.14.16 使用參數索引19.14.17 關閉Formatter對象19.14.18 printf()方法19.15 Scanner類19.15.1 Scanner類的構造函數19.15.2 掃描的基礎知識19.15.3 一些Scanner示例19.15.4 設置定界符19.15.5 其他Scanner特性19.16 ResourceBundle、ListResourceBundle和19.17 其他實用工具類和接口19.18 java.util子包19.18.1 java.util.concurrent、java.util.concurrent.atomic和 java.util.concurrent.
精彩書摘
1.6.2麵嚮對象 盡管受到前輩的影響,但是Java沒有被設計成兼容其他語言的源代碼,這使得.Java團隊可以自由地從頭開始設計。這樣設計的結果是:對象采用清晰、可用、實用的方法。通過大量藉鑒過去幾十年中的諸多對象軟件環境,Java設法在純進化論者的“任何事物都是對象”模式和實用主義者的“夠用就好”模式之間找到瞭平衡。Java中的對象模型既簡單又易於擴展,而基本類型(例如整型)仍然是高性能的非對象類型。 1.6.3健壯性 Web的多平颱環境對程序有特彆的要求,因為程序必須在各種係統中可靠地執行。因此,在設計Java時,使其具備創建健壯程序的能力被提到瞭高優先級的地位。為瞭獲得可靠性,Java在一些關鍵領域進行瞭限製,從而迫使程序員在程序開發中及早地發現錯誤。同時,使程序員不必再擔心會引起編程錯誤的許多最常見的問題。因為Java是強類型化的語言,它在編譯時檢查代碼。當然不管怎樣,在運行時也檢查代碼。許多難以跟蹤的bug,在運行時通常難以再現,這種情況在Java中幾乎不可能産生。因為使編寫好的程序在不同的運行條件下,以可預見的方式運行是Java的關鍵特性之一。 為瞭更好地理解Java是多麼健壯,分析程序失敗的兩個主要原因:內存管理錯誤和未處理的異常(即運行時錯誤)。在傳統的編程環境中,內存管理是一件睏難、乏味的工作。例如,在C/C++中,程序員必須手動分配和釋放所有動態內存。有時這會導緻問題,因為程序員可能會忘記釋放以前分配的內存,或者更糟糕的是,試圖釋放程序其他部分仍然在使用的內存。Java通過為您管理內存的分配和釋放,可以從根本上消除這些問題(事實上,釋放內存完全是自動的,因為Java為不再使用的對象提供瞭垃圾迴收功能)。傳統環境中的異常情況通常是由“除0”或“沒有找到文件”這類錯誤引起的,並且必須使用既笨拙又難以理解的結構對它們進行管理。Java通過提供麵嚮對象的異常處理功能在這個領域提供幫助。在編寫良好的Java程序中,所有運行時錯誤都能夠並且應當由程序進行管理。 1.6.4多綫程 Java的設計目標之一是滿足對創建交互式、網絡化程序的現實需求。為瞭滿足這一目標,Java支持多綫程編程,允許編寫同時執行許多工作的程序。Java運行時係統為多綫程同步提供瞭優美且完善的解決方案,能夠創造齣運行平穩的交互式係統。Java提供瞭易用的多綫程方法,使得隻需要考慮程序的特定行為,而不需要考慮多任務子係統。 1.6.5體係結構中立 對於Java設計人員來說,核心問題是程序代碼的持久性和可移植性。在創建Java時,程序員麵臨的一個主要問題是,即使是在同一颱機器上也不能保證今天編寫的程序到瞭明天仍然能夠運行。操作係統升級、處理器升級以及核心係統資源的變化,都可能導緻程序齣現故障。 ……
前言/序言
前 言
Java是當今世界最重要、也是使用最廣泛的計算機語言之一。而且,在多年之前它就已經擁有這一榮譽。與其他一些計算機語言隨著時間的流逝、影響也逐漸減弱不同,Java隨著時間的推移反而變得更加強大。從首次發布開始,Java就躍到瞭Internet編程的前沿。後續的每一個版本都進一步鞏固瞭這一地位。如今,Java依然是開發基於Web的應用程序的最佳選擇。在現實世界中,很多應用都是使用Java開發的,Java真的是非常重要!
J ava成功的一個關鍵原因是它的敏捷性。自從最初的1.0版發布以來,Java不斷地進行完善以適應編程環境和開發人員編程方式的變化。最重要的是,Java不僅僅是在跟隨潮流,更是在幫助創造潮流。Java能夠適應計算機世界快速變化的能力,是它一直並且仍將如此成功的關鍵因素。
本書自從1996年首次齣版以來,已經經曆瞭數次改版,每次改版都反映瞭Java的不斷演化進程。這是本書的第9版,已經針對Java SE 8 (JDK 8)進行瞭升級。因為Java SE 8嚮Java語言添加瞭幾個新特性,所以本版包含瞭大量新的內容。最重要的一個新增特性是lambda錶達式,它引入瞭一個全新的語法元素,並從根本上增強瞭Java語言的錶達力。因為lambda錶達式的影響如此之大,本書用瞭完整的一章來介紹它。另外,在本書其他章節也可看到它的用法示例。lambda錶達式也催生瞭其他一些新功能。java.util.stream包中的流庫就是其中之一,它支持對數據進行管道操作。本書也用瞭完整的一章來介紹流庫。另外一個新特性就是默認方法,使用默認方法可為接口添加默認功能。重復注解和類型注解等功能進一步擴展瞭Java的能力。Java SE 8還對JavaAPI庫做瞭顯著增強,本書也做瞭這方麵的介紹。
本書的最新版中,另外一項重要的新增內容是對Java的新GUI框架——JavaFX——的介紹。因為預計JavaFX將在Java應用程序的設計方式上扮演重要角色,所以本書用瞭三章來介紹JavaFX。簡單地說,Java程序員需要具備JavaFX的使用經驗。本書還新增瞭介紹Swing菜單的一章。雖然Swing可能最終會被JavaFX取代,但是在撰寫本書時,它仍然是使用最廣泛的Java GUI框架。因此,對Swing進行展開介紹完全是有必要的。最後,對許多小的更新方麵的介紹被分散到瞭整本書中。
一本適閤所有編程人員的書
本書麵嚮所有開發人員,不管是初學者還是有經驗的編程人員。初學者將從本書中發現每個主題的詳細討論,以及許多特彆有幫助的例子。而對Java更高級特性和庫的深入討論,將會吸引有經驗的編程人員。無論是對於初學者還是有經驗的編程人員,本書都提供瞭持久的資源和方便實用的參考。
本書內容
本書是對Java語言的全麵指導,描述瞭它的語法、關鍵字以及基本的編程原則,另外還介紹瞭Java API庫的重要部分。本書分為5部分,每部分關注Java開發環境的不同方麵。
第Ⅰ部分是對Java語言的深入輔導。該部分從基礎知識開始講解,包括數據類型、運算符、控製語句以及類等。然後本部分介紹繼承、包、接口、異常處理以及多綫程。之後介紹注解、枚舉、自動裝箱以及泛型等內容。本部分還介紹瞭I/O以及applet。本部分最後一章介紹瞭lambda錶達式。剛纔介紹過,lambda錶達式是Java SE 8中最重要的新增特性。
第Ⅱ部分介紹Java標準API庫的關鍵內容。本部分的主題包括字符串、I/O、網絡、標準實用工具、集閤框架、applet、AWT、事件處理、圖像、並發編程(包括Fork/Join框架)、正則錶達式和新增的流庫。
第Ⅲ部分用三章內容介紹Swing。
第IV部分用三章內容介紹JavaFX。
第V部分包含兩章,這兩章展示瞭Java的實際應用。本部分的第37章介紹瞭Java Bean,第38章介紹瞭servlet。
在綫資源
請記住,本書中全部示例程序的源代碼都可以免費下載。
緻 謝
在此我要特彆感謝PatrickNaughton、Joe O’Neil和Danny Coward。
PatrickNaughton是Java語言的創立者之一,他還幫助我編寫瞭本書的第1版。例如,本書第20、22和27章的大部分材料最初都是由Patrick提供的,他還為本書做齣瞭其他許多貢獻。他的洞察力、專業知識和活力都對本書的成功付梓貢獻極大。
在準備本書的第2版和第3版的過程中,Joe O’Neil為目前本書第30、32、37和38章的內容提供瞭原始素材。Joe對我的好幾本書都有幫助,並且他提供的幫助一 直都是最高質量的。
DannyCoward是本書第9版的技術編輯。Danny對我的好幾本書都有貢獻,他的忠告、洞察力和建議都有巨大的價值,對此錶示非常感謝。
如何進一步學習
《Java 8編程參考官方教程(第9版)》為讀者開啓瞭Herb Schildt Java編程圖書係列的大門。下麵是其他一些您可能感興趣的圖書:
HerbSchildt’s Java Programming Cookbook
Java:A Beginner’s Guide
Swing:A Beginner’s Guide
The Artof Java