Java语言概述
Java程序运行机制
Java7的JDK
JRE-Java运行时环境
JVM统一标准
三种领域的Java
Java SE
Java EE
Java ME
Java程序的基本规则
程序的组织形式
源文件的命名规则
垃圾回收机制
理解面向对象
面向对象的三种基本特征
封装
继承
多态
面向对象方式的组成
OOA 面向对象分析
OOD 面向对象设计
OOP 面向对象编程
UML2.0
静态图
★用例图
★类图
包图
对象图
★组件图
★部署图
复合结构图
动态图
★顺序图
通信图
★活动图
★状态机图
定时图
交互概观图
数值类型和运算符
基本数据类型
整数类型
字符类型
浮点类型
布尔类型
引用类型
基本类型的类型转换
自动类型转换
强制类型转换
表达式类型的自动提升
直接量
运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
类型相关运算符
关于注释
流程控制与数组
顺序结构
分支结构
if条件语句
switch分支语句
循环结构
while循环语句
do while 循环语句
for循环语句
嵌套循环
控制循环结构
数组类型
定义数组
数组的初始化
使用数组
foreach 循环
深入数组
操作数组的工具类
面向对象
类和对象
定义
对象的产生和使用
对象的this引用
方法详解
方法的所属性
方法的参数传递机制
形参个数可变的方法
递归方法
方法重载
成员变量和局部变量
成员变量
实例 Field(不以 static 修饰)
类 Field(以 static 修饰)
局部变量
形参(方法签名中定义的变量)
方法局部变量(在方法内定义)
代码块局部变量(在代码块内定义)
隐藏和封装
理解封装
访问控制符
package包和导入
package包结构
import导入语句
import static 静态导入
Java 的常用包
深入构造器
使用构造器执行初始化
构造器重载
类的继承
继承的特点
重写父类的方法
super 限定
调用父类构造器
多态
多态性
引用变量的强制类型转换
instanceof 运算符
继承与组合
使用继承的注意点
利用组合实现复用
初始化块
使用初始化块
初始化块和构造器
静态初始化块
Java7增强的包装类
处理对象
打印对象和 toString 方法
== 和 equals 方法
类成员
理解类成员
单例类(Singleton)
final 修饰符
final 成员变量
final 局部变量
final 修饰基本类型和引用类型变量的区别
可执行“宏替换”的 final 变量
final 方法
final 类
不可变类
缓存实例的不可变类
抽象类
抽象方法和抽象类
抽象类的作用
更彻底的抽象:接口
接口的概念
接口的定义
接口的继承
使用接口
接口和抽象类
面向接口编程
简单工厂模式
Printer.java
OutputFactory.java
Computer.java
BetterPrinter.java
Output.java
命令模式
AddCommand.java
PrintCommand.java
CommandTest.java
ProcessArray.java
Command.java
内部类
非静态内部类
静态内部类
使用内部类
在外部类内部使用内部类
在外部类以外使用非静态内部类
在外部类以外使用静态内部类
局部内部类
匿名内部类
闭包和回调
TeachableProgrammerTest.java
TeachableProgrammer.java
Programmer.java
枚举类
手动实现枚举类
枚举类入门
枚举类的 Field、方法和构造器
实现接口的枚举类
包含抽象方法的枚举类
对象与垃圾回收
对象在内存中的状态
强制垃圾回收
finalize 方法
对象的软、弱和虚引用
修饰符的适用范围
使用 JAR 文件
JAR 命令详解
创建可执行的 JAR 包
关于 JAR 包的技巧
与运行环境交互
与用户互动
运行 Java 程序的参数
使用 Scanner 获取键盘输入
使用 BufferedReader 获取键盘输入
系统相关
System 类
Runtime 类
常用类
Object 类
Java7 新增的 Objects 类
String、StringBuffer 和 StringBuilder 类
Math 类
Java 7 的 ThreadLocalRandom 与 Random
BigDecimal 类
处理日期的类
Date 类
Calendar 类
TimeZone 类
正则表达式
创建正则表达式
使用正则表达式
国际化与格式化
Java 国际化的思路
Java 支持的国家和语言
完成程序国际化
使用 MessageFormat 处理包含点位符的字符串
使用类文件代替资源文件
使用 NumberFormat 格式化数字
使用 DateFormat 格式化日期时间
使用 SimpleDataFormat 格式化日期
Java集合
Java 集合概述
p27581.jpg
Collection 和 Iterator 接口
使用 Iterator 接口遍历集合元素
使用 foreach 循环遍历集合元素
Set 集合
HashSet 类
LinkedHashSet 类
TreeSet 类
EnumSet 类
各 Set 实现类的性能分析
List 集合
List 接口和 ListIterator 接口
ArrayList 和 Vector 实现类
固定长度的 List
Queue 集合
PriorityQueue 实现类
Deque 接口与 ArrayDeque 实现类
LinkedList 实现类
各种线性表的性能分析
Map
HashMap 和 Hashtable 实现类
LinkedHashMap 实现类
使用 Properties 读写属性文件
SortedMap 接口和 TreeMap 实现类
WeakHashMap 实现类
IdentityHashMap 实现类
EnumMap 实现类
各 Map 实现类的性能分析
HashSet 和 HashMap 的性能选项
操作集合的工具类:Collections
排序操作
查找、替换操作
同步控制
设置不可变集合
烦琐的接口:Enumeration
泛型
泛型入门
深入泛型
定义泛型接口、类
从泛型类派生子类
并不存在泛型类
类型通配符
泛型方法
定义泛型方法
泛型方法和类型通配符的区别
Java 7 的“菱形”语法与泛型构造器
设定通配符下限
泛型方法与重载
擦除与转换
泛型与数组
异常处理
异常处理机制
使用 try...catch 捕获异常
异常类的继承体系
Java 7 提供的多异常捕获
访问异常信息
使用 finally 回收资源
异常处理的嵌套
Java 7 的自动关闭资源的 try 语句
Checked 异常和 Runtime 异常体系
使用 throw 抛出异常
抛出异常
自定义异常类
catch 和 throw 同时使用
Java 7 增强的 throw 语句
异常链
Java 的异常跟踪栈
异常处理规则
不要过度使用异常
不要使用过于庞大的 try 块
避免使用 Catch All 语句
不要忽略捕获到的异常
AWT 编程
GUI(图形用户界面)和 AWT
AWT 容器
布局管理器
FlowLayout 布局管理器
BorderLayout 布局管理器
GridLayout 布局管理器
GridBagLayout 布局管理器
CardLayout 布局管理器
绝对定位
BoxLayout 布局管理器
AWT 常用组件
基本组件
对话框 Dialog
事件处理
Java 事件模型的流程
事件和事件监听器
事件适配器
使用内部类实现监听器
使用外部类实现监听器
类本身作为事件监听器
匿名内部类实现监听器
AWT 菜单
菜单条、菜单和菜单项
右键菜单
在 AWT 中绘图
画图的实现原理
使用 Graphics 类
处理位图
Image 抽象类和 BufferedImage 实现类
使用 ImageIO 输入/输出位图
剪贴板
数据传递的类和接口
传递文本
使用系统剪贴板传递图像
使用本地剪贴板传递对象引用
通过系统剪贴板传递 Java 对象
拖放功能
拖放目标
拖放源
Swing 编程
Swing 概述
Swing 基本组件的用法
Java 7 的 Swing 组件层次
AWT 组件的 Swing 实现
为组件设置边框
Swing 组件的双缓冲和键盘驱动
使用 JToolBar 创建工具条
使用 JFileChooser 和 Java7 增强的 JColorChooser
使用 JOptionPane 创建简单对话框
Swing 中的特殊容器
使用 JSplitPane
使用 JTabbedPane
使用 JLayeredPane、JDesktopPane 和 JInternalFrame
Swing 简化的拖放功能
Java7 新增的 Swing 功能
使用 JLayer 装饰组件
创建透明、不规则形状窗口
NonRegularWindow.java
使用 JProgressBar、ProgressMonitor 和 BoundedRangeModel 创建进度条
创建进度条
JProgressBarTest2.java
创建进度条对话框
ProgressMonitorTest.java
使用 JSlider 和 BoundedRangeModel 创建滑动条
JSliderTest.java
使用 JSpinner 和 SpinnerModel 创建微调控制器
使用 JList、JComboBox 创建列表框
简单列表框
ListTest.java
不强制存储列表项的 ListModel 和 ComboBoxModel
强制存储列表项的 DefaultListModel 和 DefaultComboBoxModel
使用 ListcellRenderer 改变列表项外观
使用 JTree 和 TreeModel 创建树
创建树
拖动、编辑树节点
监听节点事件
使用 DefaultTreeCellRenderer 改变节点外观
扩展 DefaultTreeCellRenderer 改变节点外观
ExtendsDefaultTreeCellRenderer.java
实现 TreeCellRenderer 改变节点外观
使用 JTable 和 TableModel 创建表格
创建表格
TableModel 和监听器
TableColumnModel 和监听器
实现排序
绘制单元格内容
编辑单元格内容
使用 JFormattedTextField 和 JTextPane 创建格式文本
监听 Document 的变化
使用 JPasswordField
使用 JFormattedTextField
使用 JEditorPane
使用 JTextPane
MySQL 数据库与 JDBC 编程
JDBC 基础
JDBC 简介
JDBC 驱动程序
SQL 语法
关系数据库基本概念和 MySQL 基本命令
SQL 语句基础
DDL 语句
创建表的语法
修改表结构的语法
删除表的语法
truncate 表
数据库约束
NOT NULL 约束
UNIQUE 约束
PRIMARY KEY 约束
FOREIGN KEY 约束
CHECK 约束
索引
视图
DML 语句语法
单表查询
数据库函数
分组和组函数
多表连接查询
SQL 92 的连接查询
SQL 99 的连接查询
子查询
集合运算
JDBC 的典型用法
JDBC 常用接口和类简介
JDBC 编程步骤
ConnMySql.java
执行 SQL 语句的方式
使用 executeUpdate 方法执行 DDL 和 DML 语句
使用 execute 方法执行 SQL 语句
使用 PreparedStatement 执行 SQL 语句
使用 CallableStatement 调用存储过程
管理结果集
可滚动、可更新的结果集
处理 Blob 类型数据
使用 ResultSetMetaData 分析结果集
Java 7 的 RowSet 1.1
Java 7 新增的 RowSetFactory 与 RowSet
离线 RowSet
离线 RowSet 的查询分页
事务处理
事务的概念和 MySQL 事务支持
JDBC 的事务支持
批量更新
分析数据库信息
使用 DatabaseMetaData 分析数据库信息
使用系统表分析数据库信息
选择合适的分析方式
使用连接池管理连接
DBCP 数据源
C3P0 数据源
Annotation(注释)
基本 Annotation
限定重写父类方法:@Override
标记已过时:@Deprecated
抑制编译器警告:@SuppressWarnings
Java 7 的“堆污染”警告与 @SafeVarargs
JDK 的元 Annotation
使用 @Retention
使用 @Target
使用 @Documented
使用 @Inherited
自定义 Annotation
定义 Annotation
提取 Annotation 信息
使用 Annotation 的示例
编译时处理 Annotation
输入/输出
File 类
访问文件和目录
文件过滤器
理解 Java 的 IO 流
流的分类
流的概念模型
字节流和字符流
InputStream 和 Reader
OutputStream 和 Writer
输入/输出流体系
处理流的用法
输入/输出流体系
转换流
推回输入流
重定向标准输入/输出
Java 虚拟机读写其他进程的数据
RandomAccessFile
对象序列化
序列化的含义和意义
使用对象流实现序列化
对象引用的序列化
自定义序列化
另一种自定义序列化机制
版本
NIO
Java 新 IO 概述
使用 Buffer
使用 Channel
字符集和 Charset
文件锁
Java 7 的 NIO.2
Path、Paths 和 Files 核心 API
使用 FileVisitor 遍历文件和目录
使用 WatchService 监控文件变化
访问文件属性
多线程
线程概述
线程和进程
多线程的优势
线程的创建和启动
继承 Thread 类创建线程类
实现 Runnable 接口创建线程类
使用 Callable 和 Future 创建线程
创建线程的三种方式对比
线程的生命周期
新建和就绪状态
运行和阻塞状态
线程死亡
控制线程
join 线程
后台线程
线程睡眠:sleep
线程让步:yield
改变线程优先级
线程同步
线程安全问题
同步代码块
同步方法
释放同步监视器的锁定
同步锁(Lock)
死锁
线程通信
传统的线程通信
使用 Condition 控制线程通信
使用阻塞队列(BlockingQueue)控制线程通信
线程组和未处理的异常
线程池
Java 5 实现的线程池
Java 7 新增的 ForkJoinPool
线程相关类
ThreadLocal 类
包装线程不安全的集合
线程安全的集合类
网络编程
网络编程的基础知识
网络基础知识
IP 地址和端口号
Java 的基本网络支持
使用 InetAddress
使用 URLDecoder 和 URLEncoder
使用 URL 和 URLConnection
基于 TCP 协议的网络编程
TCP 协议基础
使用 ServerSocket 创建 TCP 服务器端
使用 Socket 进行通信
加入多线程
记录用户信息
半关闭的 Socket
使用 NIO 实现非阻塞 Socket 通信
使用 Java 7 的 AIO 实现非阻塞通信
基于 UDP 协议的网络编程
UDP 协议基础
使用 DatagramSocket 发送、接收数据
使用 MulticastSocket 实现多点广播
使用代理服务器
直接使用 Proxy 创建连接
使用 ProxySelector 自动选择代理服务器
类加载机制与反射
类的加载、连接和初始化
JVM 和类
类的加载
类的连接
类的初始化
类初始化的时机
类加载器
类加载器简介
类加载机制
创建并使用自定义的类加载器
URLClassLoader 类
URLClassLoaderTest.java
通过反射查看类信息
获得 Class 对象
从 Class 中获取信息
使用反射生成并操作对象
创建对象
调用方法
访问属性值
操作数组
使用反射生成 JDK 动态代理
使用 Proxy 和 InvocationHandler 创建动态代理
动态代理和 AOP
反射和泛型
泛型和 Class 类
使用反射来获取泛型信息