第1篇 面向对象程序设计启步 3
第1单元 职员类 3
1.1 从现实世界中的对象到类模型 3
1.1.1 程序=模型+表现 3
1.1.2 现实世界中的对象分析 4
1.1.3 职员类的UML描述 5
1.1.4 职员类的Java语言描述 5
1.1.5 职员类的Java代码说明 6
1.2 类的应用与测试 8
1.2.1 对象引用及其创建 8
1.2.2 构造器与this() 9
1.2.3 对象成员的访问与this 11
1.2.4 主方法与主类 12
1.2.5 类文件与包 14
1.3 Java程序开发 16
1.3.1 Java编译器与Java虚拟机 16
1.3.2 JDK 16
1.3.3 Eclipse开发环境 18
1.4 知识链接 24
1.4.1 Java语言及其特点 24
1.4.2 Java数据类型 26
1.4.3 字面值 27
1.4.4 基本类型的转换 29
1.4.5 Java关键词与标识符 32
1.4.6 流与标准I/O流对象 33
1.4.7 Java注释 34
习题1 35
第2单元 计算器类 38
2.1 计算器类的定义 38
2.1.1 计算器建模 38
2.1.2 Calculator类的Java描述 39
2.2 Calculator类的测试 39
2.2.1 测试数据设计 39
2.2.2 规避整除风险——Calculator类改进之一 40
2.3 异常处理——Calculator类改进之二 42
2.3.1 Java异常处理概述 42
2.3.2 Java异常处理的基本形式 42
2.3.3 用throws向上层抛出异常 44
2.3.4 用throw直接抛出异常 45
2.3.5 Java提供的主要异常类 47
2.4 用选择结构确定计算类型——Calculator类改进之三 47
2.4.1 用if…else实现calculate()方法 47
2.4.2 关系操作符 49
2.4.3 用switch结构实现calculate()方法 50
2.5 用静态成员变量存储中间结果——Calculator类改进之四 52
2.5.1 静态成员变量的性质 52
2.5.2 带有静态成员变量的Calculator类定义 52
2.6 知识链接 54
2.6.1 Java表达式 54
2.6.2 静态方法——类方法 55
2.6.3 初始化块与静态初始化块 57
2.6.4 String类 60
2.6.5 正则表达式 61
2.6.6 Scanner类 63
习题2 64
第3单元 素数序列产生器 72
3.1 问题描述与对象建模 72
3.1.1 素数序列产生器建模 72
3.1.2 getPrimeSequence()方法的基本思路 72
3.2 使用isPrime()判定素数的PrimeGenerator类的实现 73
3.2.1 采用while结构的getPrimeSequence()方法 73
3.2.2 采用do…while结构的getPrimeSequence()方法 75
3.2.3 采用for结构的getPrimeSequence()方法 75
3.2.4 重复结构中的continue语句 76
3.2.5 采用for结构的isPrime()方法 76
3.2.6 将isPrime()定义为静态方法 77
3.2.7 不用isPrime()判定素数的PrimeGenerator类的实现 78
3.3 知识链接 79
3.3.1 变量的访问属性 79
3.3.2 变量的作用域 79
3.3.3 Java数据实体的生命期 80
3.3.4 基本类型的包装 81
习题3 83
第4单元 扑克游戏 90
4.1 数组与扑克牌的表示和存储 90
4.1.1 数组的概念 90
4.1.2 数组的声明与内存分配 90
4.1.3 数组的初始化 92
4.1.4 匿名数组 93
4.2 数组元素的访问 93
4.2.1 用普通循环结构访问数组元素 94
4.2.2 用增强for遍历数组元素 94
4.3 洗牌 95
4.3.1 随机数与Random类 95
4.3.2 洗牌方法设计 96
4.3.3 含有洗牌方法的扑克游戏类设计 98
4.4 扑克的发牌与二维数组 99
4.4.1 基本的发牌算法 99
4.4.2 用二维数组表示玩家手中的牌 100
4.4.3 使用二维数组的发牌方法 102
4.4.4 含有洗牌、发牌方法的扑克游戏类设计 102
4.5 知识链接 104
4.5.1 数组实用类Arrays 104
4.5.2 java.util.Vector类 105
4.5.3 命令行参数 107
4.5.4 Math类 108
习题4 109
第2篇 面向抽象的结构优化 115
第5单元 学生-研究生 115
5.1 学生类-研究生类层次结构 115
5.1.1 由Student类派生GradStudent类 115
5.1.2 super关键字 117
5.1.3 final关键字 119
5.2 Java的访问权限控制 119
5.2.1 类成员的访问权限控制 119
5.2.2 类的访问权限控制 120
5.2.3 private构造器 120
5.3 类层次中的类型转换 121
5.3.1 类层次中的赋值兼容规则 121
5.3.2 里氏代换原则 122
5.3.3 类型转换与类型测试 122
5.4 方法覆盖与隐藏 123
5.4.1 派生类实例方法覆盖基类中原型相同的实例方法 123
5.4.2 用@Override标注覆盖 124
5.4.3 派生类静态方法隐藏基类中原型相同的静态方法 126
5.4.4 JVM的绑定机制 127
5.5 知识链接 128
5.5.1 Object类 128
5.5.2 @Deprecated与@SuppressWarnings 131
5.5.3 Java异常类和错误类体系 135
习题5 137
第6单元 抽象类与接口 145
6.1 圆、三角形和矩形 145
6.1.1 3个独立的类:Circle、Rectangle和Triangle 145
6.1.2 枚举 147
6.2 抽象类 148
6.2.1 由具体类抽象出抽象类 148
6.2.2 由抽象类派生出实例类 150
6.2.3 抽象类小结 153
6.3 接口 153
6.3.1 接口及其特点 153
6.3.2 接口的实现类 154
6.3.3 关于接口的进一步讨论 156
6.4 知识链接 157
6.4.1 Java构件修饰符小结 157
6.4.2 对象克隆 158
习题6 160
第7单元 面向对象程序架构优化规则 164
7.0 引言 164
7.1 从可重用说起:合成/聚合优先原则 165
7.1.1 继承重用的特点 166
7.1.2 合成/聚合重用及其特点 166
7.1.3 合成/聚合优先原则 167
7.2 从可维护性说起:开-闭原则 168
7.2.1 软件的可维护性和可扩展性 168
7.2.2 开-闭原则 169
7.3 面向抽象编程 170
7.3.1 具体与抽象 170
7.3.2 依赖倒转原则 170
7.3.3 面向接口原则 170
7.3.4 面向接口编程举例 171
7.4 单一职责原则 175
7.4.1 对象的职责 175
7.4.2 单一职责原则的概念 176
7.4.3 接口隔离原则 176
7.5 不要和陌生人说话 181
7.5.1 狭义迪米特法则 181
7.5.2 广义迪米特法则 182
习题7 183
第8单元 设计模式 186
8.1 设计模式概述 186
8.2 设计模式举例——诉讼代理问题 186
8.2.1 无律师的涉讼程序设计 186
8.2.2 请律师代理的涉讼程序设计 187
8.2.3 关于代理模式 189
8.3 设计模式举例——商场营销问题 190
8.3.1 不用策略模式的商场营销解决方案 190
8.3.2 策略模式的定义 192
8.3.3 采用策略模式的商场营销解决方案 193
8.4 设计模式举例——图形对象的创建问题 197
8.4.1 简单工厂模式 197
8.4.2 工厂方法模式 202
8.4.3 策略模式与简单工厂模式结合 207
8.5 知识链接 209
8.5.1 类文件与类加载 209
8.5.2 Class对象 210
8.5.3 反射API 213
8.5.4 使用反射的工厂模式 215
8.5.5 使用反射+配置文件的工厂模式 216
习题8 218
第3篇 基于API的应用开发 223
第9单元 图形用户界面开发 223
9.1 图形用户界面概述 223
9.1.1 组件与容器 223
9.1.2 布局管理器与坐标系 225
9.1.3 事件与事件监听器 227
9.1.4 AWT、Swing、SWT和JFace 228
9.1.5 Swing程序设计的一般流程 229
9.2 Swing组件 229
9.2.1 Swing工具包 229
9.2.2 Swing组件体系与分类 230
9.2.3 Swing容器 232
9.2.4 Swing布局管理器 235
9.3 事件处理 239
9.3.1 事件及其分类 239
9.3.2 事件监听接口 240
9.3.3 事件监听适配器 243
9.4 嵌套类及其在事件处理中的应用 246
9.4.1 嵌套类及其分类 246
9.4.2 实名内部类 246
9.4.3 匿名内部类 248
习题9 250
第10单元 Java网络程序设计 251
10.1 IP地址与InetAddress类 251
10.1.1 IP协议与IP地址 251
10.1.2 InetAddress类 251
10.2 Java Socket概述 253
10.2.1 Socket的概念 253
10.2.2 客户端/服务器工作模式 253
10.3 面向TCP的Java Socket程序设计 254
10.3.1 Socket类和ServerSocket类 254
10.3.2 TCP Socket通信过程 255
10.3.3 TCP Socket程序设计 257
10.4 面向UDP的Java程序设计 260
10.4.1 DatagramPacket类 261
10.4.2 DatagramSocket类 261
10.4.3 UDP Socket程序设计 263
10.5 网络资源访问 266
10.5.1 URI、URL和URN 266
10.5.2 URL类 267
10.5.3 URLConnection类 268
10.6 知识链接 268
10.6.1 字节流与字符流 268
10.6.2 缓冲流与转换流 273
10.6.3 PrintWriter类 275
习题10 276
第11单元 JDBC 278
11.1 JDBC概述 278
11.1.1 JDBC的组成与工作过程 278
11.1.2 JDBC API及其对JDBC过程的支持 278
11.2 加载JDBC驱动 280
11.2.1 JDBC数据库驱动程序的类型 280
11.2.2 JDBC驱动类名与JDBC驱动下载 282
11.2.3 DriverManager类 282
11.2.4 注册Driver 284
11.3 连接数据源 286
11.3.1 数据源描述规则——JDBC URL 286
11.3.2 获取Connection对象 287
11.3.3 连接过程中的异常处理 290
11.3.4 Connection接口的常用方法 290
11.4 创建SQL工作空间进行数据库操作 291
11.4.1 SQL 291
11.4.2 创建SQL工作空间 293
11.4.3 用Statement实例封装SQL语句 293
11.5 处理结果集 295
11.5.1 结果集游标管理 295
11.5.2 getXxx()方法 295
11.5.3 updateXxx()方法 296
11.5.4 关闭数据库连接 296
11.5.5 JDBC数据库查询实例 296
11.6 PreparedStatement接口 299
11.6.1 用PreparedStatement实例封装SQL语句的特点 299
11.6.2 PreparedStatement接口的主要方法 299
11.6.3 PreparedStatement对象操作SQL语句的步骤 300
11.6.4 Java日期数据 303
11.7 事务处理 304
11.7.1 事务的概念 304
11.7.2 Connection类中有关事务处理的方法 304
11.7.3 JDBC事务处理程序的基本结构 305
11.8 DAO模式 307
11.8.1 DAO概述 307
11.8.2 DAO模式的基本结构 309
11.8.3 DAO程序举例 312
习题11 318
第12单元 JavaBean 320
12.1 JavaBean概述 320
12.1.1 软件组件与JavaBean 320
12.1.2 JavaBean结构 321
12.1.3 JavaBean规范 323
12.2 开发JavaBean 323
12.2.1 JavaBean API 323
12.2.2 JavaBean开发工具 324
习题12 326
第13单元 程序文档化、程序配置与程序发布 328
13.1 Javadoc 328
13.1.1 Javadoc及其结构 328
13.1.2 Javadoc标签 328
13.1.3 Javadoc应用规范 330
13.1.4 Javadoc命令 332
13.2 自定义Annotation 333
13.2.1 Annotation的基本定义格式 333
13.2.2 向Annotation注入数据 334
13.2.3 通过反射提取Annotation中的数据 335
13.2.4 用Annotation+反射设计DAO基类 336
13.3 Java程序配置 342
13.3.1 程序配置与程序配置文件 342
13.3.2 .properties文件 343
13.3.3 XML配置文件 345
13.3.4 基于InputStream输入流的配置文件的读取 346
13.3.5 基于资源绑定的配置文件读取 353
13.4 Java程序的打包与发布 354
13.4.1 Java程序的打包与JAR文件包 354
13.4.2 manifest文件 354
13.4.3 JAR命令 357
13.4.4 在Eclipse环境中创建可执行JAR包 359
13.4.5 在MyEclipse环境中创建可执行JAR包 361
习题13 361
第4篇 Java高级技术 365
第14单元 Java泛型编程 365
14.1 泛型基础 365
14.1.1 问题的提出 365
14.1.2 泛型方法 367
14.1.3 多泛型类 368
14.2 泛型语法扩展 369
14.2.1 泛型通配符 369
14.2.2 泛型设限 370
14.2.3 泛型嵌套 370
14.3 实例——利用泛型和反射机制抽象DAO 371
习题14 373
第15单元 Java多线程 375
15.1 Java多线程概述 375
15.1.1 进程与线程 375
15.1.2 Java线程的生命周期 376
15.1.3 Java多线程程序实例:室友叫醒 380
15.1.4 线程调度与线程优先级 384
15.1.5 知识链接:JVM运行时数据区 384
15.2 java.lang.Thread类 386
15.2.1 Thread类的构造器 386
15.2.2 Thread类中的优先级别静态常量 387
15.2.3 Thread类中影响线程状态的方法 387
15.2.4 Thread类中的一般方法 388
15.2.5 Thread类从Object继承的方法 388
15.3 多线程管理 388
15.3.1 多线程同步共享资源 388
15.3.2 线程死锁问题 390
15.3.3 线程组 390
习题15 391
第16单元 Java数据结构和接口 397
16.1 数据的逻辑结构与物理结构 397
16.1.1 数据的逻辑结构 397
16.1.2 数据的物理结构 398
16.1.3 Java数据结构API 400
16.2 接口及其应用 401
16.2.1 Collection接口及其方法 401
16.2.2 List接口及其实现 402
16.2.3 Set接口及其实现 404
16.3 聚集的标准输出 406
16.3.1 Iterator接口 406
16.3.2 foreach 407
16.4 Map接口类及其应用 408
16.4.1 Map接口的定义与方法 408
16.4.2 Map.Entry接口 408
16.4.3 HashMap类和TreeMap类 409
习题16 411
附录 413
附录A 符号 413
A.1 Java主要操作符的优先级和结合性 413
A.2 Javadoc标签 413
附录B Java运行时异常类和错误类 414
B.1 RuntimeException类 414
B.2 Error类 415
附录C Java常用工具包 416
参考文献 418