第1章 起步 1
1.1 关于Java技术 1
1.1.1 Java编程语言 1
1.1.2 Java平台 2
1.1.3 Java技术可以做什么 3
1.2 Java技术将如何改变我们的生活 5
1.3 第一步(Win32) 5
1.3.2 创建第一个应用程序 6
1.3.1 检查表 6
1.3.3 创建第一个applet 9
1.3.4 错误解释(Win32) 11
1.4 第一步(UNIX/Linux) 12
1.4.1 检查表 12
1.4.2 创建第一个应用程序 12
1.4.3 创建第一个applet 16
1.4.4 错误解释(UNIX/Linux) 17
1.5.2 创建第一个应用程序 18
1.5 第一步(MacOS) 18
1.5.1 检查表 18
1.5.3 创建第一个applet 23
1.5.4 错误解释(MacOS) 25
1.6 分析Hello World 25
1.6.1 对应用程序的解释 25
1.6.2 对applet的剖析 28
1.7 问题与练习 31
1.7.1 问题 31
1.7.2 练习 32
1.7.3 解答 33
1.8 代码样例 33
第2章 面向对象的编程概念 34
2.1 什么是对象 34
2.2 什么是消息 36
2.3 什么是类 37
2.4 什么是继承 39
2.5 什么是接口 40
2.6 如何将这些概念运用到代码中 41
2.6.1 ClickMe的源代码和applet标记 42
2.6.2 ClickMe applet中的对象 42
2.6.3 ClickMe applet中的类 43
2.6.4 ClickMe applet中的消息 43
2.6.5 ClickMe applet中的继承 44
2.6.6 ClickMe applet中的接口 45
2.6.7 API文档 46
2.8.1 问题 47
2.7 小结 47
2.8 问题与练习 47
2.8.2 练习 48
2.8.3 解答 48
2.9 代码样例 48
第3章 语言基础 49
3.1 变量 49
3.1.1 数据类型 50
3.1.3 作用范围 52
3.1.2 变量名称 52
3.1.4 变量初始化 54
3.1.5 final变量 54
3.1.6 变量的小结 54
3.1.7 问题与练习:变量 55
3.2 操作符 55
3.2.1 算术操作符 56
3.2.2 关系和条件操作符 60
3.2.3 移动和位操作符 63
3.2.4 赋值操作符 66
3.2.5 其他操作符 67
3.2.6 操作符的小结 68
3.2.7 问题与练习:操作符 70
3.3 表达式、语句和代码块 71
3.3.1 表达式 71
3.3.2 语句 73
3.3.5 问题与练习:表达式、语句和代码块 74
3.3.3 代码块 74
3.3.4 表达式、语句和代码块的小结 74
3.4 流程控制语句 75
3.4.1 while和do-while语句 76
3.4.2 for语句 77
3.4.3 if-else语句 78
3.4.4 switch语句 80
3.4.5 异常处理语句 83
3.4.6 分支语句 83
3.4.7 流程控制语句的小结 87
3.4.8 问题与练习:流程控制语句 89
3.5 代码样例 90
第4章 对象基础和简单数据对象 93
4.1 对象的生存周期 93
4.1.1 创建对象 94
4.1.2 使用对象 98
4.1.3 清除不被使用的对象 100
4.1.5 问题与练习:对象 101
4.1.4 对象小结 101
4.2 字符和字符串 102
4.2.1 字符 103
4.2.2 字符串和字符串缓冲区 105
4.2.3 创建字符串和字符串缓冲区 105
4.2.4 得到字符串或字符串缓冲区的长度 107
4.2.5 通过索引从字符串或字符串缓冲区得到字符 107
4.2.6 在字符串中搜索字符或子字符串 109
4.2.7 比较字符串和部分字符串 111
4.2.8 操作字符串 112
4.2.9 修改字符串缓冲区 113
4.2.10 字符串和编译器 115
4.2.11 字符和字符串小结 115
4.2.12 问题与练习:字符和字符串 117
4.3 数字 118
4.3.1 数字类 119
4.3.2 将字符串转换为数字 121
4.3.3 将数字转换为字符串 122
4.3.4 对数字进行格式化 123
4.3.5 用定制的格式对数字进行格式化 125
4.3.6 高级算术功能 126
4.3.7 数字小结 131
4.3.8 问题与练习:数字 131
4.4 数组 132
4.4.1 创建和使用数组 133
4.4.2 对象数组 135
4.4.3 数组的数组 136
4.4.4 复制数组 138
4.4.5 数组小结 139
4.4.6 问题与练习:数组 139
4.5 代码样例 140
第5章 类和继承 143
5.1 创建类 143
5.1.1 声明类 143
5.1.2 声明成员变量 145
5.1.3 定义方法 146
5.1.4 为类提供构造器 149
5.1.5 将信息传递给方法或构造器 150
5.1.6 从方法返回值 152
5.1.7 使用this关键字 154
5.1.8 控制对类成员的访问 155
5.1.9 理解实例和类成员 160
5.1.10 实例和类成员的初始化 162
5.1.12 问题与练习:创建类 164
5.1.11 创建类的小结 164
5.2 管理继承 165
5.2.1 覆盖和隐藏方法 165
5.2.2 隐藏成员变量 168
5.2.3 使用super 168
5.2.4 使用Object的后代 169
5.2.5 编写final类和方法 172
5.2.6 编写抽象类和方法 173
5.2.8 问题与练习:管理继承 175
5.2.7 管理继承的小结 175
5.3 实现嵌套的类 176
5.3.1 内部类 178
5.3.2 关于嵌套类的其他问题 180
5.3.3 嵌套类的小结 180
5.3.4 问题与练习:嵌套类 180
5.4 代码样例 181
6.1 编写和使用接口 183
第6章 接口和包 183
6.1.1 定义接口 184
6.1.2 实现接口 185
6.1.3 将接口作为类型使用 186
6.1.4 接口不能改变 186
6.1.5 接口小结 187
6.1.6 问题与练习:接口 187
6.2 创建和使用包 188
6.2.1 创建包 189
6.2.3 使用包成员 190
6.2.2 命名包 190
6.2.4 管理源代码文件和类文件 192
6.2.5 创建和使用包的小结 194
6.2.6 问题与练习:创建和使用包 194
6.3 代码样例 195
第7章 使用异常处理错误 196
7.1 什么是异常 196
7.2 捕获或指定要求 197
7.3 捕获和处理异常 198
7.3.1 try块 199
7.3.2 catch块 200
7.3.3 finally块 200
7.3.4 结合 201
7.4 指定方法抛出的异常 205
7.5 如何抛出异常 206
7.5.1 throw语句 206
7.5.2 Throwable类及其子类 207
7.5.3 创建自己的异常类 208
7.6 运行时异常——争论 209
7.7 异常的优点 210
7.7.1 优点1:将错误处理代码与“常规”代码分离 210
7.7.2 优点2:将错误沿调用堆栈向上传递 211
7.7.3 优点3:对错误类型进行分组和区分 213
7.8 异常的小结 214
7.9 问题与练习 214
7.9.1 问题 214
7.9.2 练习 215
7.9.3 解答 216
7.10 代码样例 216
第8章 线程:同时执行多个任务 217
8.1 什么是线程 217
8.2 使用Timer和Timer Task类 219
8.2.1 停止计时器线程 220
8.2.2 重复执行任务 221
8.2.3 关于Timer的更多信息 222
8.3.1 对Thread类进行子类化和覆盖run 223
8.3 定制线程的run方法 223
8.3.2 实现Runnable接口 225
8.3.3 决定使用Runnable接口 226
8.4 线程的生存周期 226
8.4.1 创建线程 227
8.4.2 启动线程 227
8.4.3 使线程不可运行 229
8.4.4 停止线程 229
8.4.5 isAlive方法 230
8.5 理解线程优先级 231
8.5.1 400000微米线程赛跑 231
8.5.2 自私的线程 233
8.5.3 时间片 233
8.5.4 线程优先级的小结 235
8.6 线程的同步 235
8.6.1 生产者/消耗者例子 235
8.6.2 锁定对象 237
8.6.3 使用notifyAll和wait方法 239
8.6.4 运行生产者/消耗者例子 241
8.6.5 避免饿死和死锁 242
8.7 线程的分组 243
8.7.1 线程组 244
8.7.2 在组中显示地创建线程 244
8.7.3 得到线程的组 244
8.7.4 使用ThreadGroup类 245
8.8 线程的小结 248
8.8.1 线程的包支持 248
8.8.2 线程的语言支持 249
8.8.3 线程的运行时支持 249
8.9 问题与练习 249
8.10 代码样例 250
第9章 I/O:读和写 252
9.1 I/O流概述 252
9.1.1 字符流 253
9.1.3 理解I/O超类 254
9.1.2 字节流 254
9.2 使用流 255
9.2.1 如何使用文件流 257
9.2.2 如何使用管道流 259
9.2.3 如何封装流 261
9.2.4 如何联结文件 261
9.2.5 操作过滤器流 263
9.3 对象的串行化 270
9.3.1 对对象进行串行化 271
9.3.2 为类提供对象串行化 272
9.4 操作随机访问文件 274
9.4.1 使用随机访问文件 276
9.4.2 为随机访问文件编写过滤器 277
9.5 其他问题 279
9.6 读和写的小结 279
9.7 问题与练习 280
9.7.1 问题 280
9.7.2 练习 280
9.8 代码样例 281
9.7.3 解答 281
第10章 Swing用户界面 283
10.1 SwingAPI概述 283
10.2 示例1:Hello World Swing 284
10.3 示例2:SwingApplication 286
10.3.1 外观 286
10.3.2 建立按钮和标签 287
10.3.3 处理事件 288
10.3.4 在组件周围添加边框 290
10.4 示例3:CelsiusConverter 290
10.4.1 添加HTML 291
10.4.2 添加图标 292
10.5 示例4:LunarPhases 292
10.5.1 复合边框 294
10.5.2 组合框 295
10.5.3 多个图像 296
10.6 示例5:VoteDialog 296
10.6.1 单选按钮 297
10.6.2 对话框 298
10.7 布局管理 301
10.8 线程和Swing 304
10.8.1 单线程规则 305
10.8.2 如何在事件调度线程中执行代码 306
10.9 Swing组件的可视索引 306
10.11 问题与练习 313
10.11.1 问题 313
10.10 小结 313
10.11.2 练习 314
10.11.3 解答 315
10.12 代码样例 315
附录A 常见问题及其解决方案 317
附录B 用于Internet的applet 329
附录C 集合 377
附录D 被废弃的线程方法 426
附录E 参考信息 432