第 1 章 Java 入门
1.1 Java 的平台无关性 . . . . . . . . 1
1.1.1 平台与机器指令 . . . . . . . . 1
1.1.2 C/C++程序依赖平台 . . . . . . . … 2
1.1.3 虚拟机与平台 . . . . . . . . … 2
1.2 Java 之父——James Gosling . . . . . . … 3
1.3 Java 的地位 . . . . . . . . . 3
1.3.1 网络地位 . . . . . . . . . 3
1.3.2 语言地位 . . . . . . . . . 3
1.3.3 需求地位 . . . . . . . . . 4
1.4 安装 JDK . . . . . . . . . … 4
1.4.1 平台简介 . . . . . . . . . 4
1.4.2 安装 Java SE 平台 . . . . . . . … … 4
1.4.3 系统环境的设置 . . . . . . . . 6
1.5 Java 程序的开发步骤 . . . . . . . … … 7
1.6 一个简单的 Java 应用程序 . . . . . . . 8
1.6.1 编写源文件 . . . . . . . . … … 8
1.6.2 编译 . . . . . . . . . … … 9
1.6.3 运行 . . . . . . . . . … … 11
1.7 上机实践 . . . . . . . . . . 11
1.7.1 输出两行文字 . . . . . . . . … 11
1.7.2 使用-encoding 参数 . . . . . . . … 13
1.8 课外读物 . . . . . . . . . . 13
习题 1 . . . . . . . . . . . 14第 Ⅳ
2 章 Java 应用程序的基本结构
2.1 问题的提出 . . . . . . . . . 15
2.2 简单的 Circle 类 . . . . . . . . … 16
2.3 使用 Circle 类创建对象 . . . . . . . … 16
2.3.1 用类声明对象 . . . . . . . . … 17
2.3.2 为对象分配变量 . . . . . . . . 17
2.3.3 使用对象 . . . . . . . . . 18
2.4 在应用程序中使用对象 . . . . . . . … 18
2.5 Java 应用程序的基本结构 . . . . . . … … 19
2.6 在一个源文件中编写多个类 . . . . . . … … 21
2.7 编程风格 . . . . . . . . . … 22
2.7.1 Allmans 风格 . . . . . . . . … 22
2.7.2 Kernighan 风格 . . . . . . . . 22
2.7.3 注释 . . . . . . . . . … … 23
2.8 上机实践 . . . . . . . . . . 23
2.8.1 联合编译 . . . . . . . . . 23
2.8.2 编译多个类 . . . . . . . . … … 25
2.9 课外读物 . . . . . . . . . . 26
习题 2 . . . . . . . . . . . 26
第 3 章 标识符与简单数据类型
3.1 标识符与关键字 . . . . . . . . … 27
3.1.1 标识符 . . . . . . . . . … 27
3.1.2 关键字 . . . . . . . . . … 27
3.2 简单数据类型 . . . . . . . . … … 28
3.2.1 逻辑类型 . . . . . . . . . 28
3.2.2 整数类型 . . . . . . . . . 28
3.2.3 字符类型 . . . . . . . . . 29
3.2.4 浮点类型 . . . . . . . . . 30
3.3 简单数据类型的级别与类型转换运算 . . . . . … 31
3.4 从命令行窗口输入输出数据 . . . . . . … … 32
3.4.1 输入基本型数据 . . . . . . . . 32
3.4.2 输出基本型数据 . . . . . . . . 33
3.5 上机实践 . . . . . . . . . . 34
3.5.1 输出希腊字母 . . . . . . . . … 34
3.5.2 产品的总价 . . . . . . . . … … 35
3.6 课外读物 . . . . . . . . . . 36
习题 3 . . . . . . . . . . . 37Ⅴ
第 4 章 运算符、 表达式与语句
4.1 运算符与表达式 . . . . . . . . … 38
4.1.1 算术运算符与算术表达式 . . . . . . … … 38
4.1.2 自增、 自减运算符 . . . . . . . … … 38
4.1.3 算术混合运算的精度 . . . . . . . … 38
4.1.4 关系运算符与关系表达式 . . . . . . … … 39
4.1.5 逻辑运算符与逻辑表达式 . . . . . . … … 39
4.1.6 赋值运算符与赋值表达式 . . . . . . … … 40
4.1.7 位运算符 . . . . . . . . . 40
4.1.8 instanceof 运算符 . . . . . . . … … 41
4.1.9 运算符综述 . . . . . . . . … … 41
4.2 语句概述 . . . . . . . . . … 41
4.3 条件分支语句 . . . . . . . . … … 42
4.3.1 if 语句 . . . . . . . . . … 42
4.3.2 if… else 语句 . . . . . . . . … 42
4.3.3 if… else if… else 语句 . . . . . . . 43
4.4 开关语句 . . . . . . . . . … 45
4.5 循环语句 . . . . . . . . . … 47
4.5.1 for 循环语句 . . . . . . . . … 47
4.5.2 while 循环语句 . . . . . . . . 48
4.5.3 do… while 循环语句 . . . . . . . … 48
4.6 break 和 continue 语句 . . . . . . . 49
4.7 数组 . . . . . . . . . . 50
4.7.1 声明数组 . . . . . . . . . 50
4.7.2 为数组分配元素 . . . . . . . . 51
4.7.3 数组元素的使用 . . . . . . . . 52
4.7.4 length 的使用 . . . . . . . . 52
4.7.5 数组的初始化 . . . . . . . . … 52
4.7.6 数组的引用 . . . . . . . . … … 52
4.7.7 遍历数组 . . . . . . . . . 54
4.8 上机实践 . . . . . . . . . . 55
4.8.1 猜数游戏 . . . . . . . . . 55
4.8.2 遍历与复制数组 . . . . . . . . 56
4.9 课外读物 . . . . . . . . . . 58
习题 4 . . . . . . . . . . . 58
第 5 章 类与对象
5.1 面向对象的特性 . . . . . . . . … 60
5.2 类 . . . . . . . . . . … 61Ⅵ
5.2.1 类声明 . . . . . . . . . … 61
5.2.2 类体 . . . . . . . . . … … 62
5.2.3 成员变量 . . . . . . . . . 62
5.2.4 方法 . . . . . . . . . … … 63
5.2.5 需要注意的问题 . . . . . . . . 65
5.2.6 类的 UML 图 . . . . . . . . … 65
5.3 构造方法与对象的创建 . . . . . . . … 66
5.3.1 构造方法 . . . . . . . . . 66
5.3.2 创建对象 . . . . . . . . . 67
5.3.3 使用对象 . . . . . . . . . 69
5.3.4 对象的引用和实体 . . . . . . . … … 70
5.4 参数传值 . . . . . . . . . … 71
5.4.1 传值机制 . . . . . . . . . 71
5.4.2 基本数据类型参数的传值 . . . . . . … … 72
5.4.3 引用类型参数的传值 . . . . . . . … 72
5.5 对象的组合 . . . . . . . . . 75
5.5.1 由矩形和圆组合而成的图形 . . . . . . … 75
5.5.2 关联关系和依赖关系的 UML 图 . . . . . … … 78
5.6 实例成员与类成员 . . . . . . . . 79
5.6.1 实例变量和类变量的声明 . . . . . . … … 79
5.6.2 实例变量和类变量的区别 . . . . . . … … 79
5.6.3 实例方法和类方法的定义 . . . . . . … … 81
5.6.4 实例方法和类方法的区别 . . . . . . … … 81
5.7 方法重载与多态 . . . . . . . . … 82
5.8 this 关键字 . . . . . . . . . 83
5.8.1 在构造方法中使用 this . . . . . . . 84
5.8.2 在实例方法中使用 this . . . . . . . 84
5.9 包 . . . . . . . . . . … 86
5.9.1 包语句 . . . . . . . . . … 86
5.9.2 有包名的类的存储目录 . . . . . . . 86
5.9.3 运行有包名的主类 . . . . . . . … … 87
5.10 import 语句 . . . . . . . . … … 88
5.10.1 引入类库中的类 . . . . . . . … … 88
5.10.2 引入自定义包中的类 . . . . . . . 89
5.11 访问权限 . . . . . . . . . 91
5.11.1 何谓访问权限 . . . . . . . . 91
5.11.2 私有变量和私有方法 . . . . . . . 91
5.11.3 共有变量和共有方法 . . . . . . . 92
5.11.4 友好变量和友好方法 . . . . . . . 93
5.11.5 受保护的成员变量和方法 . . . . . . … 93
5.11.6 public 类与友好类. . . . . . . … 94
5.12 基本类型的类包装 . . . . . . . . … 94Ⅶ
5.12.1 Double 类和 Float 类 . . . . . . … … 95
5.12.2 Byte 类、 Short 类、 Integer 类、 Long 类 . . . . 95
5.12.3 Character 类 . . . . . . . . 95
5.13 可变参数 . . . . . . . . . 95
5.14 var 局部变量 . . . . . . . . … 97
5.15 上机实践 . . . . . . . . . … … 98
5.15.1 机动车 . . . . . . . . . 98
5.15.2 电视机 . . . . . . . . . 99
5.15.3 森林 . . . . . . . . . 101
5.16 课外读物 . . . . . . . . . … … 103
习题 5 . . . . . . . . . . … … 103
第 6 章 子类与继承
6.1 子类与父类 . . . . . . . . … … 106
6.2 子类的继承性 . . . . . . . . … 107
6.2.1 子类和父类在同一包中的继承性 . . . . . … 107
6.2.2 子类和父类不在同一包中的继承性 . . . . . 108
6.2.3 继承关系的 UML 图. . . . . . . … 108
6.3 成员变量的隐藏和方法重写 . . . . . . … 108
6.3.1 成员变量的隐藏 . . . . . . . … … 108
6.3.2 方法重写 . . . . . . . . … … 108
6.4 super 关键字 . . . . . . . . … 111
6.4.1 用 super 操作被隐藏的成员变量和方法 . . . . … 111
6.4.2 使用 super 调用父类的构造方法 . . . . . … 113
6.5 final 关键字 . . . . . . . . … … 114
6.5.1 final 类 . . . . . . . . . 114
6.5.2 final 方法 . . . . . . . . … … 114
6.5.3 常量 . . . . . . . . . … 114
6.6 对象的上转型对象 . . . . . . . … … 114
6.7 继承与多态 . . . . . . . . … … 116
6.8 abstract 类和 abstract 方法 . . . . . . … 117
6.9 面向抽象编程 . . . . . . . . … 118
6.10 开-闭原则 . . . . . . . . … … 121
6.11 上机实践 . . . . . . . . . … … 122
6.11.1 面积之和 . . . . . . . . … 122
6.11.2 薪水总和 . . . . . . . . … 124
6.12 课外读物 . . . . . . . . . … … 126
习题 6 . . . . . . . . . . … … 126第 Ⅷ
7 章 接口与实现
7.1 接口 . . . . . . . . . … … 128
7.2 实现接口 . . . . . . . . . 129
7.3 理解接口 . . . . . . . . . 131
7.4 接口的 UML 图 . . . . . . . . … 132
7.5 接口回调 . . . . . . . . . 132
7.6 接口与多态 . . . . . . . . … … 134
7.7 接口变量作参数 . . . . . . . . 135
7.8 abstract 类与接口的比较 . . . . . . … … 136
7.9 面向接口编程 . . . . . . . . … 136
7.10 函数接口与 Lambda 表达式 . . . . . . 139
7.11 上机实践 . . . . . . . . . … … 141
7.11.1 评价成绩 . . . . . . . . … 141
7.11.2 小狗的状态 . . . . . . . . 142
7.12 课外读物 . . . . . . . . . … … 144
习题 7 . . . . . . . . . . … … 144
第 8 章 内部类与异常类
8.1 内部类 . . . . . . . . . … 146
8.2 匿名类 . . . . . . . . . … 147
8.2.1 和子类有关的匿名类 . . . . . . . 147
8.2.2 和接口有关的匿名类 . . . . . . . 149
8.3 异常类 . . . . . . . . . … 150
8.3.1 try… catch 语句 . . . . . . . … … 150
8.3.2 自定义异常类 . . . . . . . . 151
8.3.3 finally 子语句 . . . . . . . . 153
8.4 断言 . . . . . . . . . … … 154
8.5 上机实践 . . . . . . . . . … … 155
8.5.1 内部购物券 . . . . . . . . … 155
8.5.2 检查危险品 . . . . . . . . … 157
8.6 课外读物 . . . . . . . . . … … 159
习题 8 . . . . . . . . . . … … 159
第 9 章 常用实用类
9.1 String 类 . . . . . . . . . … … 160
9.1.1 构造字符串对象 . . . . . . . 160
9.1.2 String 类的常用方法 . . . . . . … 161
9.1.3 字符串与基本数据的相互转换 . . . . . 164Ⅸ
9.1.4 对象的字符串表示 . . . . . . … … 166
9.1.5 字符串与字符数组、 字节数组 . . . . . 166
9.1.6 正则表达式及字符串的替换与分解 . . . . … 169
9.2 StringBuffer 类 . . . . . . . . 172
9.2.1 StringBuffer 对象的创建 . . . . . . … 172
9.2.2 StringBuffer 类的常用方法 . . . . . . 173
9.3 StringTokenizer 类 . . . . . . . … … 175
9.4 Date 类 . . . . . . . . . … 176
9.4.1 构造 Date 对象 . . . . . . . … … 176
9.4.2 日期格式化 . . . . . . . . … 176
9.5 Calendar 类 . . . . . . . . … … 178
9.6 Math 类和 BigInteger 类 . . . . . . … … 181
9.6.1 Math 类 . . . . . . . . … … 181
9.6.2 BigInteger 类 . . . . . . . . 181
9.7 DecimalFormat 类 . . . . . . . … … 182
9.7.1 格式化数字 . . . . . . . . … 182
9.7.2 将格式化字符串转换为数字 . . . . . . 184
9.8 Pattern 类和 Match 类 . . . . . . . 185
9.8.1 模式对象 . . . . . . . . … … 185
9.8.2 匹配对象 . . . . . . . . … … 185
9.9 Scanner 类 . . . . . . . . … … 187
9.10 Record 类 . . . . . . . . . … 188
9.11 UUID 类 . . . . . . . . . … … 190
9.12 上机实践 . . . . . . . . . … … 191
9.12.1 购物小票 . . . . . . . . … 191
9.12.2 替换错别字 . . . . . . . . 192
9.13 课外读物 . . . . . . . . . … … 193
习题 9 . . . . . . . . . . … … 194
第10 章 输入输出流
10.1 File 类 . . . . . . . . . … … 196
10.1.1 文件的属性 . . . . . . . … 197
10.1.2 目录 . . . . . . . . … 197
10.1.3 文件的创建与删除 . . . . . . … 199
10.1.4 运行可执行文件 . . . . . . … … 199
10.2 字节流与字符流 . . . . . . . … … 199
10.2.1 InputStream 类与 OutputStream 类 . . . . … 200
10.2.2 Reader 类与 Writer 类 . . . . . . … 200
10.2.3 关闭流. . . . . . . . … … 201
10.3 文件字节流 . . . . . . . . . 201
10.3.1 文件字节输入流 . . . . . . … … 201Ⅹ
10.3.2 文件字节输出流 . . . . . . … … 202
10.4 文件字符流 . . . . . . . . … 203
10.5 缓冲流 . . . . . . . . . 204
10.6 随机流 . . . . . . . . . 206
10.7 数组流 . . . . . . . . . 208
10.8 数据流 . . . . . . . . . 210
10.9 对象流 . . . . . . . . . 213
10.10 序列化与对象克隆 . . . . . . . … 215
10.11 文件锁 . . . . . . . . . 216
10.12 使用 Scanner 解析文件 . . . . . . … 217
10.13 上机实践 . . . . . . . . . … 219
10.13.1 分析成绩单 . . . . . . . … 219
10.13.2 统计英文单词 . . . . . . . 221
10.14 课外读物 . . . . . . . . . … 223
习题 10 . . . . . . . . . . … 223
第 11 章 组件与事件处理
11.1 Java Swing 概述 . . . . . . . … … 225
11.2 窗口 . . . . . . . . . . 226
11.2.1 JFrame 常用方法 . . . . . . … 226
11.2.2 菜单条、 菜单、 菜单项 . . . . . … … 227
11.3 常用组件与布局 . . . . . . . . … 229
11.3.1 常用组件 . . . . . . . … … 229
11.3.2 常用容器 . . . . . . . … … 231
11.3.3 常用布局 . . . . . . . … … 232
11.3.4 选项卡窗格 . . . . . . . … 234
11.4 处理事件 . . . . . . . . . … 236
11.4.1 事件处理模式 . . . . . . . 237
11.4.2 ActionEvent 事件 . . . . . . … 237
11.4.3 ItemEvent 事件 . . . . . . … … 241
11.4.4 DocumentEvent 事件 . . . . . … … 243
11.4.5 MouseEvent 事件 . . . . . . … 245
11.4.6 焦点事件 . . . . . . . … … 249
11.4.7 键盘事件 . . . . . . . … … 249
11.4.8 匿名类实例或窗口作为监视器 . . . . … … 252
11.4.9 事件总结 . . . . . . . … … 254
11.5 使用 MVC 结构 . . . . . . . … … 254
11.6 对话框 . . . . . . . . . … … 257
11.6.1 消息对话框 . . . . . . . … 257Ⅺ
11.6.2 输入对话框 . . . . . . . … 259
11.6.3 确认对话框 . . . . . . . … 260
11.6.4 颜色对话框 . . . . . . . … 262
11.6.5 文件对话框 . . . . . . . … 263
11.6.6 自定义对话框 . . . . . . . 265
11.7 发布 GUI 程序 . . . . . . . . 267
11.8 上机实践 . . . . . . . . . … 267
11.8.1 算术测试. . . . . . . . … 267
11.8.2 计算器. . . . . . . . … … 271
11.9 课外读物 . . . . . . . . . … 274
习题 11 . . . . . . . . . . … 274
第 12 章 Java 多线程机制
12.1 进程与线程 . . . . . . . . … 275
12.1.1 操作系统与进程. . . . . . . … 275
12.1.2 进程与线程. . . . . . . . 275
12.2 Java 中的线程 . . . . . . . . 276
12.2.1 Java 的多线程机制 . . . . . . … … 276
12.2.2 线程的状态与生命周期. . . . . . … 277
12.2.3 线程调度与优先级. . . . . . . 280
12.3 Thread 类与线程的创建 . . . . . . … … 280
12.3.1 使用 Thread 的子类 . . . . . . … … 280
12.3.2 使用 Thread 类 . . . . . . . … 281
12.3.3 关于 run()方法启动的次数 . . . . . … … 282
12.4 线程的常用方法 . . . . . . . … … 282
12.5 线程同步 . . . . . . . . … … 286
12.6 在同步方法中使用 wait()、 notify()和 notifyAll()方法 . . … 287
12.7 线程联合 . . . . . . . . … … 289
12.8 上机实践——打字练习 . . . . . . . … 290
12.9 课外读物 . . . . . . . . . … 292
习题 12 . . . . . . . . . . … 293
第 13 章 Java 网络编程
13.1 URL 类 . . . . . . . . . 295
13.1.1 URL 的构造方法 . . . . . . . 295
13.1.2 读取 URL 中的资源 . . . . . . … … 296
13.2 InetAddress 类 . . . . . . . … … 297
13.2.1 地址的表示. . . . . . . . 297Ⅻ
13.2.2 获取地址. . . . . . . . … 297
13.3 套接字 . . . . . . . . . … … 298
13.3.1 套接字概述 . . . . . . . … 298
13.3.2 客户端套接字. . . . . . . … … 298
13.3.3 ServerSocket 对象与服务器端套接字 . . . . 299
13.3.4 使用多线程技术 . . . . . . … … 301
13.4 UDP 数据报 . . . . . . . . … 305
13.4.1 发送数据包. . . . . . . . 305
13.4.2 接收数据包. . . . . . . . 306
13.5 广播数据报 . . . . . . . . … 309
13.6 上机实践——结算账单 . . . . . . … … 311
13.7 课外读物 . . . . . . . . . … 314
习题 13 . . . . . . . . . . … 314
第 14 章 综合实训——生命游戏
14.1 游戏规则 . . . . . . . . . … 315
14.2 实训目的 . . . . . . . . . … 315
14.3 数据模型和视图 . . . . . . . . … 316
14.4 实训代码 . . . . . . . . . … 316
14.5 实训练习 . . . . . . . . . … 325
14.6 课外读物 . . . . . . . . . … 32
