第1章 Java概述
1.1 Java語言的發展簡史
1.2 Java的競爭對手及各自優勢
1.2.1 C#簡介和優勢
1.2.2 Ruby簡介和優勢
1.2.3 Python的簡介和優勢
1.3 Java程序運行機製
1.3.1 高級語言的運行機製
1.3.2 Java程序的運行機製和JVM
1.4 開發Java的準備
1.4.1 安裝JDK
學生提問:不是說JVM是運行Java程序的虛擬機嗎?那JRE和JVM的關係是怎樣的呢?
學生提問:為什麼不安裝公共JRE係統呢?
1.4.2 設置PATH環境變量
學生提問:為什麼選擇設置用戶變量,用戶變量和係統變量有什麼區彆呢?
1.5 第一個Java程序
1.5.1 編輯Java源代碼
1.5.2 編譯Java程序
學生提問:當我們使用編譯C程序時,不僅需要指定存放目標文件的位置,也需要指定目標文件的文件名,這裏使用javac編譯Java程序時怎麼不需要指定目標文件的文件名呢?
1.5.3 運行Java程序
1.5.4 根據CLASSPATH環境變量定位類
1.6 Java程序的基本規則
1.6.1 Java程序的組織形式
1.6.2 Java源文件的命名規則
1.6.3 初學者容易犯的錯誤
1.7 垃圾迴收機製
1.8 何時開始使用IDE工具
學生提問:老師,我想學習Java編程,到底是學習Eclipse好呢,還是學習JBuilder好呢?
1.9 本章小結
本章練習
第2章 理解麵嚮對象
2.1 麵嚮對象
2.1.1 結構化程序設計簡介
2.1.2 程序的三種基本結構
2.1.3 麵嚮對象程序設計簡介
2.1.4 麵嚮對象的基本特徵
2.2 UML(統一建模語言)介紹
2.2.1 用例圖
2.2.2 類圖
2.2.3 組件圖
2.2.4 部署圖
2.2.5 順序圖
2.2.6 活動圖
2.2.7 狀態機圖
2.3 Java的麵嚮對象特徵
2.3.1 一切都是對象
2.3.2 類和對象
2.4 本章小結
第3章 數據類型和運算符
3.1 注釋
3.1.1 單行注釋和多行注釋
3.1.2 文檔注釋
學生提問:API文檔是什麼?
學生提問:為什麼要掌握查看API文檔的方法?
3.2 標識符和關鍵字
3.2.1 分隔符
3.2.2 標識符規則
3.2.3 Java關鍵字
3.3 數據類型分類
3.4 基本數據類型
3.4.1 整型
3.4.2 字符型
3.4.3 浮點型
3.4.4 布爾型
3.5 基本類型的類型轉換
3.5.1 自動類型轉換
3.5.2 強製類型轉化
3.5.3 錶達式類型的自動提升
3.6 直接量
3.6.1 直接量的類型
3.6.2 直接量的賦值
3.7 運算符
3.7.1 算術運算符
3.7.2 賦值運算符
3.7.3 位運算符
3.7.4 擴展後的賦值運算符
3.7.5 比較運算符
學生提問:Java為什麼要對這些數據進行緩存呢?
3.7.6 邏輯運算符
3.7.7 三目運算符
3.7.8 運算符的結閤性和優先級
3.8 本章小結
本章練習
第4章 流程控製和數組
4.1 順序結構
4.2 分支結構
4.2.1 if條件語句
4.2.2 switch分支語句
4.3 循環結構
4.3.1 while循環語句
4.3.2 do while循環語句
4.3.3 for循環
4.3.4 嵌套循環
4.4 控製循環結構
4.4.1 使用break結束循環
4.4.2 使用continue結束本次循環
4.4.3 使用return結束方法
4.5 數組類型
4.5.1 理解數組:數組也是一種類型
學生提問:int[]是一種類型嗎?怎麼使用這種類型呢?
4.5.2 定義數組
4.5.3 數組的初始化
學生提問:能不能隻分配內存空間,不賦初始值呢?
4.5.4 使用數組
學生提問:為什麼要我記住這些異常信息?
4.5.5 JDK1.5提供瞭foreach循環
4.6 深入數組
4.6.1 內存中的數組
學生提問:為什麼有棧內存和堆內存之分?
4.6.2 基本類型數組的初始化
4.6.3 引用類型數組的初始化
4.6.4 沒有多維數組
學生提問:我是否可以讓圖4.13中灰色覆蓋的數組元素再次指嚮另一個數組?這樣不可以擴展成三維數組嗎?甚至擴展到更多維的數組?
4.6.5 操作數組的工具類
4.6.6 數組的應用舉例
4.7 本章小結
本章練習
第5章 麵嚮對象(上)
5.1 類和對象
5.1.1 定義類
學生提問:構造器不是沒有返迴值嗎?為什麼不能用void修飾呢?
5.1.2 對象的産生和使用
5.1.3 對象、引用和指針
5.1.4 對象的this引用
5.2 方法詳解
5.2.1 方法的所屬性
5.2.2 方法的參數傳遞機製
5.2.3 形參長度可變的方法
5.2.4 遞歸方法
5.2.5 方法重載
學生提問:為什麼方法的返迴值類型不能用於區分重載的方法?
5.3 成員變量和局部變量
5.3.1 成員變量和局部變量
5.3.2 成員變量的初始化和內存中的運行機製
5.3.3 局部變量的初始化和內存中的運行機製
5.3.4 變量的使用規則
5.4 隱藏和封裝
5.4.1 理解封裝
5.4.2 使用訪問控製符
5.4.3 package和import
5.4.4 Java的常用包
5.5 深入構造器
5.5.1 使用構造器執行初始化
學生提問:構造器是創建Java對象的途徑,是不是說構造器完全負責創建Java對象?
5.5.2 構造器的重載
學生提問:為什麼要用this來調用另一個重載的構造器?我把另一個構造器裏的代碼復製、粘貼到這個構造器裏不就可以瞭嗎?
5.6 類的繼承
5.6.1 繼承的特點
5.6.2 重寫父類的方法
5.6.3 父類實例的super引用
學生提問:我們隻是創建瞭一個Ostrich對象時,哪來的Bird對象?
5.6.4 調用父類構造器
學生提問:為什麼我創建Java對象時從未感覺到java.lang.Object的構造器被調用過?
5.7 多態
5.7.1 多態性
5.7.2 引用變量的強製類型轉換
5.7.3 instanceof運算符
5.8 繼承與組閤
5.8.1 使用繼承的注意點
5.8.2 利用組閤實現復用
學生提問:使用組閤關係來實現復用時,需要創建兩個Animal對象,是不是意味著使用組閤關係時係統開銷更大?
5.9 初始化塊
5.9.1 使用初始化塊
5.9.2 初始化塊和構造器
5.9.3 靜態初始化塊
5.10 本章小結
本章練習
第6章 麵嚮對象(下)
6.1 基本數據類型的包裝類
6.2 處理對象
6.2.1 打印對象和toString方法
6.2.2 ==和equals比較運算符
6.3 類成員
6.3.1 理解類成員
6.3.2 單例(Singleton)類
6.4 final修飾符
6.4.1 final變量
6.4.2 final方法
6.4.3 final類
6.4.4 不可變類
6.4.5 緩存實例的不可變類
6.5 抽象類
6.5.1 抽象方法和抽象類
6.5.2 抽象類的作用
6.6 更徹底的抽象:接口
6.6.1 接口的概念
6.6.2 接口的定義
6.6.3 接口的繼承
6.6.4 使用接口
6.6.5 接口和抽象類
6.6.6 麵嚮接口編程
6.7 內部類
6.7.1 非靜態內部類
學生提問:非靜態內部類對象和外部類對象的關係是怎樣的?
6.7.2 靜態內部類
學生提問:為什麼靜態內部類實例方法也不能訪問外部類的實例屬性呢?
學生提問:接口裏是否能定義內部接口?
6.7.3 使用內部類
學生提問:既然內部類是外部類的成員,是否可以為外部類定義子類,在子類中再定義一個內部類來重寫其父類中的內部類?
6.7.4 局部內部類
6.7.5 匿名內部類
6.7.6 閉包(Closure)和迴調
6.8 枚舉類
6.8.1 手動實現枚舉類
6.8.2 枚舉類入門
6.8.3 枚舉類的屬性、方法和構造器
6.8.4 實現接口的枚舉類
6.8.5 包含抽象方法的枚舉類
6.9 對象與垃圾迴收
6.9.1 對象在內存中的狀態
6.9.2 強製垃圾迴收
6.9.3 finalize方法
6.9.4 對象的軟、弱和虛引用
6.10 修飾符的適用範圍
6.11 使用JAR文件
6.11.1 jar命令詳解
6.11.2 創建可執行的JAR包
6.11.3 關於JAR包的技巧
6.12 本章小結
本章練習
第7章 Java集閤
7.1 Java集閤概述
7.2 Collection和Iterator接口
7.2.1 使用Iterator接口遍曆集閤元素
7.2.2 使用foreach循環遍曆集閤元素
7.3 Set接口
7.3.1 HashSet類
學生提問:hashCode方法對於HashSet的作用是什麼?
7.3.2 TreeSet類
7.3.3 EnumSet類
7.4 List接口
7.4.1 List接口和ListIterator接口
7.4.2 ArrayList和Vector實現類
7.4.3 固定長度的List
7.5 Queue接口
7.5.1 LinkedList實現類
7.5.2 PriorityQueue實現類
7.6 Map
7.6.1 HashMap和Hashtable實現類
7.6.2 SortedMap接口和TreeMap實現類
7.6.3 WeakHashMap實現類
7.6.4 IdentityHashMap實現類
7.6.5 EnumMap實現類
7.7 HashSet和HashMap的性能選項
7.8 操作集閤的工具類:Collections
7.8.1 排序操作
7.8.2 查找,替換操作
7.8.3 同步控製
7.8.4 設置不可變集閤
7.9 煩瑣的接口:Enumeration
7.10 本章小結
本章練習
第8章 泛型
8.1 泛型入門
8.1.1 編譯時不檢查類型的異常
8.1.2 手動實現編譯時檢查類型
8.1.3 使用泛型
8.2 深入泛型
8.2.1 定義泛型接口、類
8.2.2 從泛型類派生子類
8.2.3 並不存在泛型類
8.3 類型通配符
8.3.1 使用類型通配符
8.3.2 設定類型通配符的上限
8.3.3 設定類型形參的上限
8.4 泛型方法
8.4.1 定義泛型方法
8.4.2 泛型方法和類型通配符的區彆
8.4.3 設定通配符的下限
8.4.4 泛型方法與方法重載
8.5 擦除和轉換
8.6 泛型與數組
8.7 本章小結
第9章 與運行環境交互
9.1 與用戶互動
9.1.1 運行Java程序的參數
9.1.2 使用Scanner獲取鍵盤輸入
9.1.3 使用BufferedReader獲取鍵盤輸入
9.2 係統相關
9.2.1 System類
9.2.2 Runtime類
9.3 常用類
9.3.1 Object類
9.3.2 String、StringBuffer和StringBuilder類
9.3.3 Math類
9.3.4 Random類
9.3.5 BigDecimal類
9.4 處理日期的類
9.4.1 Date類
9.4.2 Calendar類
9.4.3 TimeZone類
9.5 正則錶達式
9.5.1 創建正則錶達式
9.5.2 使用正則錶達式
9.6 程序國際化
9.6.1 Java國際化的思路
9.6.2 Java支持的語言和國傢
9.6.3 完成程序國際化
9.6.4 使用MessageFormat處理包含占位符的字符串
9.6.5 使用類文件代替資源文件
9.6.6 使用NumberFormat格式化數字
9.6.7 使用DateFormat格式化日期
9.7 本章小結
本章練習
第10章 異常處理
10.1 異常概述
10.2 異常處理機製
10.2.1 使用try...catch捕獲異常
10.2.2 異常類的繼承體係
10.2.3 訪問異常信息
10.2.4 使用finally迴收資源
10.2.5 異常處理的嵌套
10.3 Checked異常和Runtime異常體係
10.3.1 使用throws聲明拋齣異常
10.4 使用throw拋齣異常
10.4.1 拋齣異常
10.4.2 自定義異常類
10.4.3 catch和throw同時使用
10.4.4 異常鏈
10.5 Java的異常跟蹤棧
10.6 異常處理規則
10.6.1 不要過度使用異常
10.6.2 不要使用過於龐大的try塊
10.6.3 避免使用Catch All語句
10.6.4 不要忽略捕獲到的異常
10.7 本章小結
本章練習
第11章 AWT編程
11.1 GUI(圖形用戶界麵)和AWT
11.2 AWT容器
11.3 布局管理器
11.3.1 FlowLayout布局管理器
11.3.2 BorderLayout布局管理器
學生提問:BorderLayout最多隻能放置5個組件嗎?那它還有什麼作用?
11.3.3 GridLayout布局管理器
11.3.4 GridBagLayout布局管理器
11.3.5 CardLayout布局管理器
11.3.6 絕對定位
11.3.7 BoxLayout布局管理器
學生提問:圖11.15和圖11.16顯示的所有按鈕都緊挨在一起,如果希望像FlowLayout、GridLayout等布局管理器指定組件的間距該怎麼辦?
11.4 AWT 常用組件
11.4.1 基本組件
11.4.2 對話框
11.5 事件處理
11.5.1 Java事件模型的流程
11.5.2 事件和事件監聽器
11.5.3 事件適配器
11.5.4 事件監聽器的實現形式
11.6 AWT的菜單
11.6.1 菜單條、菜單和菜單項
11.6.2 右鍵菜單
學生提問:為什麼即使我沒有給多行文本域編寫右鍵菜單,但當我在多行文本域上單擊右鍵時一樣會彈齣右鍵菜單?
11.7 在AWT中繪圖
11.7.1 畫圖的實現原理
11.7.2 使用Graphics類
11.8 處理位圖
11.8.1 Image抽象類和BufferedImage實現類
11.8.2 使用ImageIO輸入/輸齣位圖
11.9 剪貼闆
11.9.1 數據傳遞的類和接口
11.9.2 傳遞文本
11.9.3 使用係統剪貼闆傳遞圖像
11.9.4 使用本地剪貼闆來傳遞對象引用
11.9.5 通過係統剪貼闆傳遞Java對象
11.10 本章小結
本章練習
第12章 Swing編程
12.1 Swing概述
12.2 Swing基本組件的用法
12.2.1 Swing組件層次
12.2.2 AWT組件的Swing實現
學生提問:為什麼單擊Swing多行文本域時不是彈齣像AWT多行文本域中的右鍵菜單?
12.2.3 使用JToolBar創建工具條
12.2.4 使用JColorChooser和JFileChooser
12.2.5 使用JOptionPane
12.3 Swing中的特殊容器
12.3.1 使用JSplitPane
12.3.2 使用JTabbedPane
12.3.3 使用JLayeredPane、JDesktopPane和JInternalFrame
12.4 Swing拖放功能
12.4.1 拖放目標
12.4.2 拖放源
12.4.3 簡化的拖放操作
12.5 Applet和JApplet
12.5.1 Applet簡介及其安全性
12.5.2 開發Applet類
12.5.3 使用HTML頁麵裝載Applet
12.5.4 appletviewer簡介
12.5.5 Applet的生命周期和動畫機製
學生提問:程序中重寫paint方法時繪製瞭一個字符串,但圖12.28上則繪製齣瞭如此之多的字符串,這是為什麼呢?
12.5.6 使用Applet創建音樂播放器
12.6 使用JProgressBar、ProgressMonitor和BoundedRangeModel創建進度條
12.6.1 創建進度條
12.6.2 創建進度對話框
12.7 使用JSlider和BoundedRangeModel創建滑動條
12.8 使用JSpinner和SpinnerModel創建微調控製器
12.9 使用JList、JComboBox創建列錶框
12.9.1 簡單列錶框
12.9.2 不強製存儲列錶項的ListModel和ComboBoxModel
12.9.3 強製存儲列錶項的DefaultListModel和DefaultComboBoxModel
學生提問:為什麼JComboBox提供瞭添加、刪除列錶項目的方法?而JList沒有提供添加、刪除列錶項的方法呢?
12.9.4 使用ListCellRenderer改變列錶項外觀
12.10 使用JTree和TreeModel創建樹
12.10.1 創建樹
12.10.2 拖動、編輯樹節點
12.10.3 監聽節點事件
12.10.4 使用TreeCellRendering改變節點外觀
12.11 使用JTable和TableModel創建錶格
12.11.1 創建JTable
學生提問:我們指定的錶格數據、錶格列標題都是Object類型的數組,JTable如何顯示這些Object對象?
12.11.2 TableModel和監聽器
12.11.3 TableColumnModel和監聽器
12.11.4 實現排序
12.11.5 繪製單元格內容
12.11.6 編輯單元格內容
12.12 使用JFormattedTextField和JTextPane創建格式文本
12.12.1 監聽Document的改變
12.12.2 使用JPasswordField
12.12.3 使用JFormattedTextField
12.12.4 使用JEditorPane
12.12.5 使用JTextPane
12.13 本章小結
本章練習
第13章 JDBC編程
13.1 JDBC基礎
13.1.1 JDBC簡介
13.1.2 JDBC驅動程序類型
13.2 SQL語法介紹
13.2.1 安裝數據庫
13.2.2 關係數據庫基本概念和MySQL基本命令
13.2.3 SQL語句基礎
13.2.4 DDL語句
13.2.5 DML語句語法
13.2.6 select語句和SQL函數
13.2.7 分組和組函數
13.2.8 多錶連接查詢和子查詢
13.3 JDBC的典型用法
13.3.1 JDBC常用接口和類簡介
13.3.2 JDBC編程步驟
學生提問:前麵給齣的僅是MySQL和Oracle兩種數據庫的驅動,我看不齣驅動類字符串有什麼規律啊。如果我希望使用其他數據庫,我怎麼用其他數據庫的驅動類呢?
13.4 執行SQL語句的方式
13.4.1 使用executeUpdate執行DDL和DML語句
13.4.2 使用execute方法執行SQL語句
13.4.3 使用PreparedStatement執行SQL語句
13.4.4 使用CallableStatement調用存儲過程
13.5 管理結果集
13.5.1 可滾動、可更新的結果集
13.5.2 處理Blob類型數據
13.5.3 使用ResultSetMetaData分析結果集
13.6 事務處理
13.6.1 事務的概念和MySQL事務支持
13.6.2 JDBC的事務支持
13.6.3 批量更新
13.7 分析數據庫信息
13.7.1 使用DatabaseMetaData分析數據庫信息
13.7.2 使用係統錶分析數據庫信息
13.7.3 選擇閤適的分析方式
13.8 使用連接池管理連接
13.9 本章小結
本章練習
第14章 Annotation(注釋)
14.1 基本Annotation
14.1.1 限定重寫父類方法:@Override
14.1.2 標示已過時:@Deprecated 676
14.1.3 抑製編譯器警告:@SuppressWarnings
14.2 自定義Annotation
14.2.1 定義Annotation
14.2.2 提取Annotation的信息
14.2.3 使用Annotation的例子
14.3 JDK的元Annotation
14.3.1 使用@Retention
14.3.2 使用@Target
14.3.3 使用@Documented
14.3.4 使用@Inherited
14.4 使用APT處理Annotation
14.5 本章小結
第15章 輸入/輸齣
15.1 File類
15.1.1 訪問文件和目錄
15.1.2 文件過濾器
15.2 理解Java的IO流
15.2.1 流的分類
15.2.2 流的概念模型
15.3 字節流和字符流
15.3.1 InputStream和Reader
15.3.2 OutputStream和Writer
15.4 輸入/輸齣流體係
15.4.1 處理流的用法
15.4.2 輸入/輸齣流體係
15.4.3 轉換流
學生提問:怎麼沒有把字符流轉換成字節流的轉換流呢?
15.4.4 推迴輸入流
15.5 重定嚮標準輸入/輸齣
15.6 Java虛擬機讀寫其他進程的數據
15.7 RandomAccessFile
15.8 對象序列化
15.8.1 序列化的含義和意義
15.8.2 使用對象流實現序列化
15.8.3 對象引用的序列化
15.8.4 自定義序列化
15.8.5 另一種自定義序列化機製
15.8.6 版本
15.9 Java新IO
15.9.1 Java新IO概述
15.9.2 使用Buffer
15.9.3 使用Channel
15.9.4 編碼集和Charset
15.9.5 文件鎖
15.10 本章小結
本章練習
第16章 多綫程
16.1 綫程概述
16.1.1 綫程和進程
16.1.2 多綫程的優勢
16.2 綫程的創建和啓動
16.2.1 繼承Thread類創建綫程類
16.2.2 實現Runnable接口創建綫程類
16.2.3 兩種方式所創建綫程的對比
16.3 綫程的生命周期
16.3.1 新建和就緒狀態
16.3.2 運行和阻塞狀態
16.3.3 綫程死亡
16.4 控製綫程
16.4.1 join綫程
16.4.2 後颱綫程
16.4.3 綫程睡眠:sleep
16.4.4 綫程讓步:yield
16.4.5 改變綫程優先級
16.5 綫程的同步
16.5.1 綫程安全問題
16.5.2 同步代碼塊
16.5.3 同步方法
16.5.4 釋放同步監視器的鎖定
16.5.5 同步鎖(Lock)
16.5.6 死鎖
16.6 綫程通信
16.6.1 綫程的協調運行
16.6.2 使用條件變量控製協調
16.6.3 使用管道流
16.7 綫程組和未處理的異常
16.8 Callable和Future
16.9 綫程池
16.10 綫程相關類
16.10.1 ThreadLocal類
16.10.2 包裝綫程不安全的集閤
16.10.3 綫程安全的集閤類
16.11 本章小結
第17章 網絡編程
17.1 網絡編程的基礎知識
17.1.1 網絡基礎知識
17.1.2 IP地址和端口號
17.2 Java的基本網絡支持
17.2.1 使用InetAddress
17.2.2 使用URLDecoder和URLEncoder
17.2.3 使用URL和URLConnection
17.3 基於TCP協議的網絡編程
17.3.1 TCP協議基礎
17.3.2 使用ServletSocket創建TCP服務器端
17.3.3 使用Socket進行通信
17.3.4 加入多綫程
17.3.5 記錄用戶信息
17.3.6 使用NIO實現非阻塞Socket通信
17.4 基於UDP協議的網絡編程
17.4.1 UDP協議基礎
17.4.2 使用DatagramSocket發送、接收數據
17.4.3 使用MulticastSocket實現多點廣播
17.5 使用代理服務器
17.5.1 直接使用Proxy創建連接
17.5.2 使用ProxySelector選擇代理服務器
17.6 本章小結
本章練習
第18章 類加載和反射
18.1 類的加載、連接和初始化
18.1.1 JVM和類
18.1.2 類的加載
18.1.3 類的連接
18.1.4 類的初始化
18.1.5 類初始化的時機
18.2 類加載器
18.2.1 類加載器簡介
18.2.2 類加載機製
18.2.3 創建並使用自定義的類加載器
18.2.4 URLClassLoader類
18.3 通過反射查看類信息
18.3.1 獲得Class對象
18.3.2 從Class中獲取信息
18.4 使用反射生成並操作對象
18.4.1 創建對象
18.4.2 調用方法
18.4.3 訪問屬性值
18.4.4 操作數組
18.5 使用反射生成JDK動態代理
18.5.1 使用Proxy和InvocationHandler創建動態代理
18.5.2 動態代理和AOP
18.6 反射和泛型
18.6.1 泛型和Class類
18.6.2 使用反射來獲取泛型信息
18.7 本章小結
本章練習
上善若水——兼談我的創作理念
· · · · · · (
收起)