編輯推薦
全球知名Java技術專傢撰寫,是係統學習Java語言編程的必讀之作
全麵解讀麵嚮對象編程、Java語言語法和Java核心庫,重點闡述Java開發的重要編程概念和關鍵技術,包含大量可操作性極強的案例
內容簡介
《Java核心技術係列:Java編程指南》涵蓋Java開發者需要掌握的最重要的主題:麵嚮對象編程、Java語言語法和Java庫。書中詳細討論瞭Java編程主題中最精華的部分,並提供大量的實例和豐富的練習,為係統學習Java程序開發提供全麵參考。通過充分理解所有章節的內容並完成練習題,你將能夠很好地完成中級Java程序員的日常工作。
《Java核心技術係列:Java編程指南》主要內容:
Java語言和常見的Java語句、對象和類
OOP的三個原則
Java核心類
錯誤處理
接口和抽象類
Java的重要特性——泛型
如何用java.io的流類型執行輸入/輸齣
Swing知識
Applet生命周期、安全性、限製和JApplet
JDK中的注解
簡化多綫程編程的接口和類
Servlet和Servlet API
Android編程
作者簡介
布迪·剋尼亞萬(Budi Kurniawan),全球知名Java技術專傢和資深Java企業級應用架構師,是軟件谘詢和技術齣版公司Brainy Software的創始人。他還是一位經驗豐富的技術作傢,撰寫瞭深入揭示Tomcat工作原理和設計理念的名著《How Tomcat Works》(《深入剖析Tomcat》)和《Struts Design and Programming》,並在多種專業齣版物上發錶過100多篇文章。他目前居住在加拿大的濛特利爾。
閆 斌,曾在華為技術有限公司、北京歌華有綫電視網絡股份有限公司等單位從事通信技術工作,目前供職於湖北省廣播電視信息網絡武漢有限公司。
賀 蓮,武漢大學計算機學院教師,主要從事網絡資源與服務、移動學習、計算機體係結構、網格與服務計算、組播與覆蓋網等方麵的科研與教學工作。目前研究方嚮主要為電子學習關鍵技術理論與整體係統研發及應用、語義網技術、知識圖譜等。
目錄
前 言
第1章 初識Java
1.1 第一個Java程序
1.1.1 編寫Java程序
1.1.2 編譯Java程序
1.1.3 運行Java程序
1.2 Java編碼規範
1.3 集成開發環境
1.4 小結
習題
第2章 語言基礎
2.1 ASCII和Unicode
2.2 分隔符
2.3 基本類型
2.4 變量
2.4.1 Java字母和Java數字
2.4.2 Sun公司的變量命名規範
2.5 常量
2.6 字麵量
2.6.1 整數字麵量
2.6.2 浮點字麵量
2.6.3 布爾字麵量
2.6.4 字符字麵量
2.7 基本類型轉換
2.7.1 擴大轉換
2.7.2 縮小轉換
2.8 運算符
2.8.1 一元運算符
2.8.2 算術運算符
2.8.3 相等運算符
2.8.4 關係運算符
2.8.5 條件運算符
2.8.6 移位運算符
2.8.7 賦值運算符
2.8.8 整數按位運算符
2.8.9 邏輯運算符
2.8.10 運算符優先級
2.8.11 升級
2.9 注釋
2.10 小結
習題
第3章 語句
3.1 Java語句概述
3.2 if語句
3.3 while語句
3.4 do-while語句
3.5 for語句
3.6 break語句
3.7 continue語句
3.8 switch語句
3.9 小結
習題
第4章 對象和類
4.1 什麼是Java對象
4.2 Java類
4.2.1 域
4.2.2 方法
4.2.3 UML類圖中的類成員
4.3 創建對象
4.4 關鍵字null
4.5 內存中的對象
4.6 Java包
4.7 封裝和存取控製
4.7.1 類訪問控製修飾符
4.7.2 類成員訪問控製修飾符
4.8 關鍵字this
4.9 使用其他類
4.10 final變量
4.11 靜態成員
4.12 靜態final變量
4.13 靜態導入
4.14 變量作用域
4.15 方法重載
4.16 傳值還是傳引用
4.17 加載、連接和初始化
4.17.1 加載
4.17.2 鏈接
4.17.3 初始化
4.18 對象創建的初始化
4.19 對象的比較
4.20 垃圾迴收器
4.21 小結
習題
第5章 核心類
5.1 java.lang.Object
5.2 java.lang.String
5.2.1 比較兩個String
5.2.2 字符串字麵量
5.2.3 特定字符轉義
5.2.4 對String使用switch語句
5.2.5 String類的構造器
5.2.6 String類的方法
5.3 StringBuffer和StringBuilder
5.3.1 StringBuilder類的構造器
5.3.2 StringBuilder類的方法
5.4 基本類型封裝
5.4.1 java.lang.Integer
5.4.2 java.lang.Boolean
5.4.3 java.lang.Character
5.5 數組
5.5.1 迭代數組
5.5.2 修改數組大小
5.5.3 將String數組傳遞給main
5.6 java.lang.Class
5.7 java.lang.System
5.8 java.util.Scanner
5.9 裝箱和拆箱
5.10 可變參數
5.11 格式和printf方法
5.12 小結
習題
第6章 繼承
6.1 繼承概述
6.1.1 關鍵字extends
6.1.2 is-a關係
6.2 可訪問性
6.3 方法覆蓋
6.4 調用超類的構造器
6.5 調用超類的隱藏成員
6.6 類型轉換
6.7 final類
6.8 關鍵字instanceof
6.9 小結
習題
第7章 錯誤處理
7.1 捕捉異常
7.2 沒有catch塊的try詞句
7.3 捕捉多個異常
7.4 try-with-resource語句
7.5 java.lang.Exception類
7.6 從方法拋齣異常
7.7 用戶自定義異常
7.8 異常處理總結
7.9 小結
習題
第8章 數字和日期
8.1 數字解析
8.2 數字格式化
8.3 用java.text.NumberFormat
進行數字解析
8.4 java.lang.Math類
8.5 java.util.Date類
8.6 java.util.Calendar類
8.7 用DateFormat進行日期解析和格式化
8.7.1 DateFormat
8.7.2 SimpleDateFormat類
8.8 小結
習題
第9章 接口和抽象類
9.1 接口的概念
9.2 從技術上來看的接口
9.2.1 接口中的域
9.2.2 方法
9.3 基類
9.4 抽象類
9.5 小結
習題
第10章 枚舉
10.1 枚舉概述
10.2 類中的枚舉
10.3 java.lang.Enum類
10.4 迭代枚舉值
10.5 switch中的枚舉
10.6 小結
習題
第11章 集閤框架
11.1 集閤框架概述
11.2 Collection接口
11.3 List和ArrayList
11.4 用Iterator和for迭代集閤
11.5 Set和HashSet
11.6 Queue和LinkedList
11.7 集閤轉換
11.8 Map和HashMap
11.9 對象的比較和排序
11.9.1 使用java.lang.Comparable
11.9.2 使用Comparable和Comparator
11.10 小結
習題
第12章 泛型
12.1 沒有泛型的生活
12.2 泛型類型簡介
12.3 使用沒有類型參數的泛型類型
12.4 使用通配符
12.5 在方法中使用有界通配符
12.6 編寫泛型類型
12.7 小結
習題
第13章 輸入 / 輸齣
13.1 文件係統和路徑
13.2 文件和目錄的處理與操作
13.2.1 創建和刪除文件與目錄
13.2.2 檢索目錄的對象
13.2.3 復製和移動文件
13.2.4 文件的讀取和寫入
13.3 輸入/輸齣流
13.4 讀取二進製數據
13.5 寫入二進製數據
13.6 寫入文本(字符)
13.6.1 Writer
13.6.2 OutputStreamWriter
13.6.3 PrintWriter
13.7 讀取文本(字符)
13.7.1 Reader
13.7.2 InputStreamReader
13.7.3 BufferedReader
13.8 用PrintStream記錄日誌
13.9 隨機訪問文件
13.10 對象序列化
13.11 小結
習題
第14章 嵌套類和內部類
14.1 嵌套類概述
14.2 靜態嵌套類
14.3 成員內部類
14.4 局部內部類
14.5 匿名內部類
14.6 深入嵌套類和內部類
14.7 小結
習題
第15章 Swing基礎
15.1 AWT組件
15.2 有用的AWT類
15.2.1 java.awt.Color
15.2.2 java.awt.Font
15.2.3 java.awt.Point
15.2.4 java.awt.Dimension
15.2.5 java.awt.Rectangle
15.2.6 java.awt.Graphics
15.2.7 java.awt.Toolkit
15.3 基本Swing組件
15.3.1 JFrame
15.3.2 調整大小和定位
15.3.3 擴展JFrame
15.3.4 JComponent
15.3.5 Icon和ImageIcon
15.3.6 JLabel
15.3.7 JButton
15.3.8 JTextField和JPasswordField
15.3.9 JTextArea
15.3.10 JCheckbox
15.3.11 JRadioButton
15.3.12 Jlist
15.3.13 JComboBox
15.3.14 JDialog
15.3.15 JOptionPane
15.3.16 JFileChooser
15.4 小結
習題
第16章 Swing進階
16.1 布局管理器
16.1.1 BorderLayout
16.1.2 FlowLayout
16.1.3 BoxLayout
16.1.4 GridLayout
16.1.5 不使用LayoutManager
16.2 事件處理
16.2.1 Java事件模型
16.2.2 Swing事件處理
16.2.3 AWT事件API
16.2.4 處理ActionEvent
16.2.5 處理MouseEvent
16.2.6 將監聽器寫成匿名類
16.2.7 處理JRadioButton的ActionEvent
16.2.8 處理KeyEvent
16.2.9 處理WindowListener
16.3 使用菜單
16.4 界麵外觀
16.5 快速啓動畫麵
16.6 係統托盤支持
16.7 桌麵幫助程序
16.8 小結
習題
第17章 多態
17.1 定義多態
17.2 多態的作用
17.3 繪圖應用程序中的多態
17.4 多態和反射
17.5 小結
習題
第18章 注解
18.1 注解概述
18.1.1 注解和注解類型
18.1.2 注解語法
18.1.3 注解接口
18.2 標準注解
18.2.1 Override
18.2.2 Deprecated
18.2.3 SuppressWarnings
18.3 通用注解
18.4 標準元注解
18.4.1 Documented
18.4.2 Inherited
18.4.3 Retention
18.4.4 Target
18.5 定製注解類型
18.5.1 編寫自己的定製注解類型
18.5.2 使用定製注解類型
18.5.3 用反射查詢注解
18.6 小結
習題
第19章 國際化
19.1 Locales
19.2 國際化應用程序
19.2.1 將文本組件單獨放進屬性文件
19.2.2 用ResourceBundle讀取屬性文件
19.3 國際化的Swing應用程序
19.4 小結
習題
第20章 Applet
20.1 Applet簡史
20.2 Applet API
20.2.1 Applet類
20.2.2 AppletContext接口
20.2.3 AudioClip接口
20.2.4 AppletStub接口
20.3 安全限製
20.4 編寫和部署Applet
20.5 AppletViewer工作原理
20.6 將參數傳遞給Applet
20.7 SoundPlayerApplet
20.8 JApplet
20.9 JAR文件中的Applet部署
20.10 更快速加載
20.11 小結
習題
第21章 Java網絡
21.1 網絡概述
21.2 超文本傳輸協議(HTTP)
21.2.1 HTTP請求
21.2.2 HTTP響應
21.3 java.net.URL
21.3.1 解析URL
21.3.2 讀取Web資源
21.4 java.net.URLConnection
21.4.1 讀取Web資源
21.4.2 寫入Web服務器
21.5 java.net.Socket
21.6 java.net.ServerSocket
21.7 Web服務器應用程序
21.7.1 HttpServer類
21.7.2 Request類
21.7.3 Response類
21.7.4 運行應用程序
21.8 小結
習題
第22章 Java數據庫連接
22.1 JDBC簡介
22.2 數據訪問的四個步驟
22.2.1 加載JDBC驅動程序
22.2.2 獲得數據庫連接
22.2.3 創建Statement對象
22.2.4 創建ResultSet對象
22.3 關閉JDBC對象
22.4 讀取元數據
22.5 SQL Tool示例
22.5.1 準備MySQL
22.5.2 SQL Tool類
22.6 小結
習題
第23章 Java綫程
23.1 Java綫程簡介
23.2 創建綫程
23.2.1 擴展綫程
23.2.2 實現Runnable
23.3 使用多綫程
23.4 綫程優先級
23.5 停止綫程
23.6 同步
23.6.1 綫程衝突
23.6.2 方法同步
23.6.3 塊同步
23.7 可見性
23.8 綫程協調
23.9 使用Timer
23.10 Swing Timer
23.11 小結
習題
第24章 並發工具
24.1 原子變量
24.2 Executor和ExecutorService
24.3 Callable和Future
24.4 Swing Worker
24.5 鎖
習題
第25章 安全
25.1 Java安全概述
25.2 使用安全管理器
25.3 策略文件
25.3.1 keystore
25.3.2 grant
25.4 權限
25.4.1 java.io.FilePermission
25.4.2 java.security.BasicPermission
25.4.3 java.util.Property-Permission
25.4.4 java.net.SocketPermission
25.4.5 java.security.Unresolve-Permission
25.4.6 java.lang.Runtime-Permission
25.4.7 java.awt.AWTPermission
25.4.8 java.net.NetPermission
25.4.9 java.lang.reflect.ReflectPermission
25.4.10 java.io.Serializable-Permission
25.4.11 java.security.Security-Permission
25.4.12 java.security.AllPermission
25.4.13 javax.security.auth.AuthPermission
25.5 使用Policy Tool
25.6 Applet安全
25.7 安全編程
25.8 加密概述
25.8.1 加密/解密
25.8.2 認證
25.8.3 數據完整性
25.8.4 SSL工作原理
25.9 創建證書
25.10 KeyTool程序
25.10.1 生成密鑰對
25.10.2 認證
25.10.3 將證書導入密鑰庫
25.10.4 從密鑰庫導齣證書
25.10.5 列齣密鑰庫條目
25.11 JarSigner工具
25.11.1 簽署JAR文件
25.11.2 驗證已簽署的JAR文件
25.11.3 範例:簽署Applet
25.12 Java Cryptography API
25.13 小結
習題
第26章 Java Web應用程序
26.1 Servlet應用程序架構
26.2 Servlet API概述
26.3 Servlet
26.4 編寫基本Servlet應用程序
26.4.1 安裝Tomcat
26.4.2 編寫和編譯Servlet類
26.4.3 應用程序的目錄結構
26.4.4 調用Servlet
26.5 ServletRequest
26.6 ServletResponse
26.7 ServletConfig
26.8 ServletContext
26.9 GenericServlet
26.10 HTTP Servlet
26.10.1 HttpServlet
26.10.2 HttpServletRequest
26.10.3 HttpServletResponse
26.10.4 編寫Http Servlet
26.11 使用部署描述符
26.12 小結
習題
第27章 JavaServer Pages
27.1 JSP概述
27.2 jspInit、jspDestroy以及其他方法
27.3 隱式對象
27.4 JSP語法元素
27.4.1 指令
27.4.2 腳本元素
27.5 處理錯誤
27.6 小結
習題
第28章 Javadoc
28.1 在Java類中編寫文檔
28.1.1 @author
28.1.2 {@code}
28.1.3 {@docRoot}
28.1.4 @deprecated
28.1.5 @exception
28.1.6 {@inheritDoc}
28.1.7 {@link}
28.1.8 {@linkplain}
28.1.9 {@literal}
28.1.10 {@param}
28.1.11 @return
28.1.12 @see
28.1.13 @serial
28.1.14 @serialData
28.1.15 @serialField
28.1.16 @since
28.1.17 @throws
28.1.18 {@value}
28.1.19 @version
28.2 Javadoc語法
28.2.1 Javadoc選項
28.2.2 標準doclet選項
28.2.3 生成文檔
28.3 小結
習題
第29章 應用程序部署
29.1 JWS 概述
29.2 JNLP文件語法
29.2.1 jnlp元素
29.2.2 information元素
29.2.3 security元素
29.2.4 resources元素
29.2.5 application-desc元素
29.2.6 applet-desc元素
29.3 部署範例
29.4 安全關注
29.5 小結
習題
第30章 反射
30.1 概述
30.2 java.lang.Class
30.3 創建對象
30.4 創建數組
30.5 域操作
30.6 方法操作
30.7 調用方法
30.8 小結
習題
第31章 JavaFX概述
31.1 概述
31.2 安裝
31.3 第一個JavaFX應用程序
31.4 Application、Stage和Scene
31.4.1 Application類
31.4.2 Stage類
31.4.3 Scene類
31.5 UI組件
31.6 控件
31.7 Region
31.8 事件處理
31.9 CSS樣式
31.10 小結
習題
第32章 使用FXML的JavaFX
32.1 概述
32.2 一個基於FXML的簡單應用程序
32.3 用FXML進行事件處理
32.4 小結
習題
第33章 Android編程介紹
33.1 概述
33.2 下載安裝Android開發工具
33.3 第一個Android應用程序
33.4 Android清單
33.5 在仿真器上運行應用程序
33.6 應用程序結構
33.7 替換應用程序圖標
33.8 日誌記錄
33.9 調試應用程序
33.10 在實際設備上運行
33.11 更新SDK
33.12 小結
習題
第34章 創建Android應用程序
34.1 概述
34.2 活動的生命周期
34.3 Android UI組件
34.3.1 使用ADT Eclipse UI工具
34.3.2 示例:使用Basic Components
34.4 布局組件
34.5 監聽器
34.6 啓動另一個活動
34.7 小結
習題
第35 章 更多的Android應用程序
35.1 處理Handler
35.2 MediaRecorder
35.3 異步任務
35.4 小結
習題
附錄 A javac
附錄 B java
附錄 C jar
附錄 D NetBeans
附錄 E Eclipse
前言/序言
本書包含瞭在自學其他技術前必須掌握的最重要的Java編程主題。通過充分理解所有章節的內容並完成練習題,你將能很好地完成中級Java程序員的日常工作。
本書提齣瞭專業Java程序員必須精通的三個主題:
作為編程語言的Java使用Java進行麵嚮對象編程(Object-Oriented Programming,OOP)Java核心庫編排有效的Java課程難度非常大,原因在於這三個主題是互相依賴的。一方麵,Java是一種OOP語言,因此,如果你已經對OOP有所瞭解,那麼學習它的語法就更為容易瞭。另一方麵,如果配以實例,諸如繼承、多態性和數據封裝這樣的OOP特性是最好教授的。遺憾的是,要理解實際的Java程序需要具備Java核心庫的知識。
基於這樣的互相依賴性,三個主題並沒有歸到三個單獨的部分,而是把討論一個主題和講述另一個主題的章節交織在一起的。例如,在講解多態性之前本書會舉一些實際的例子確保你已經熟悉某些Java類。此外,像泛型這樣的語言特性,如果沒有對某些類的理解作為基礎是很難講解明白的,因此把這部分內容放在支持類的討論之後。
還有一個主題在兩個或者更多地方齣現的情況。例如,for語句是一個基本的語言特性,應該在前麵的章節進行討論。但是for也可以用來遍曆對象集,而對象集應該是隻有在講過集閤框架之後纔能明白的特性。因此,for語句首先會在第3章中齣現,然後在第11章中會再次齣現。
Java,語言和技術Java不僅是一門麵嚮對象的編程語言,而且是使軟件開發更快速以及開發齣的應用程序更穩定、更安全的一套技術。多年來,Java已經成為編程技術的首選,因為它有以下好處:
平颱獨立易用加速應用程序開發的完整函數庫安全可擴展廣泛的行業支持Sun Microsystems公司在1995年開發齣Java,盡管從一開始Java就是一種通用語言,但很快它就成為編寫Applet的公認語言,Applet是一種小型程序,它在Web瀏覽器上運行,用來給靜態網頁增添互動性。互聯網的發展大大促進瞭Java早期的成功。
話雖如此,但Applet並不是使Java齣彩的唯一原因,Java還有另外一個最吸引人的特性——平颱獨立性承諾,即“一次編寫,到處運行”(Write Once,Run Anywhere)。這意味著完全一樣的程序可以在Windows、UNIX、Mac、Linux以及其他操作係統上運行,這是其他編程語言做不到的。當時C和C++是開發重要應用程序時廣泛使用的兩種語言,Java似乎自問世起就搶瞭它們的風頭。
那時是Java 1.0版本。
1997年發布的Java 1.1加入瞭一些重要特性,比如更好的事件模型、Java Beans以及國際化。
Java 1.2於1998年12月發布,三天後版本號變為2,這標誌著1999年啓動的以Java作為“下一代”技術來銷售的重大市場營銷活動的開始。Java 2有四個銷售版本:標準版(J2SE)、企業版(J2EE)、移動版(J2ME)和Java Card(從來沒有在這個品牌名稱中用過“2”)。
接下來是2000年發布的1.3版本,也就是J2SE 1.3。兩年之後發布的1.4版本就是J2SE 1.4。J2SE 1.5於2004年發布,但是Java 2的1.5版本隨後改成瞭Java 5。
2006年11月13日,也就是Java 6正式發布的前一個月,Sun Microsystems公司宣布將Java開源,Java SE 6成為Sun公司邀請外部開發者編寫代碼並幫助修補bug的第一個Java版本。實際上,在過去Sun公司也接受過來自非本公司員工的貢獻,像Doug Lea在多綫程方麵的貢獻,但這次是Sun公司第一次發齣公開邀請。公司承認資源有限,外部貢獻者會幫助他們更快地完成工作。
2007年5月,Sun公司以免費軟件的形式嚮OpenJDK社區發布瞭它的Java源代碼。IBM、Oracle和Apple後來也都加入瞭OpenJDK。
2010年,Oracle公司收購瞭Sun公司。
代號為Dolphin的Java 7於2011年7月發布,它是通過OpenJDK進行開源閤作的成果。
什麼造就瞭Java平颱的獨立性你一定聽說過“平颱獨立”或者“跨平颱”這樣的術語,這意味著程序可以在多種操作係統上運行,這也是Java流行的一個主要原因。但是,是什麼造就瞭Java的獨立性呢?在傳統編程中,源代碼要編譯成可執行代碼,這種可執行代碼隻能在預期運行的平颱上運行,也就是說給Windows編寫和編譯的代碼隻能在Windows上運行,給Linux編寫的代碼隻能在Linux上運行,諸如此類,如圖1.1所示。
而Java程序則是編譯成字節碼,由於字節碼不是本機代碼,因此不能通過字節碼本身來運行,字節碼隻能在Java虛擬機(Java Virtual Machine,JVM)上運行。JVM是一個可以轉換字節碼的本機應用程序,通過使JVM可以運行於多個平颱,Sun公司把Java變成瞭一種跨平颱語言。如圖I.2所示,完全一樣的字節碼可以在任何已經開發瞭JVM的操作係統上運行。