第1章 绪论 1
1.1 解决办法 1
1.2 算法——力求准确 3
1.3 用Java实现我们的算法 4
1.4 为什么要学Java 5
1.5 网络计算和Web 6
1.6 人机交互和GUI 7
第2章 程序的基本元素 11
2.1 Java中的“Hello,world!” 11
2.2 编译并运行Java程序 12
2.3 词法元素 13
2.3.1 空白 14
2.3.2 注释 14
2.3.3 关键字 14
2.3.4 标识符 15
2.3.5 字符常量 16
2.3.6 运算符和标点符号 16
2.4 数据类型和变量声明 16
2.4.1 变量 17
2.4.2 变量的初始化 18
2.5 示例:字符串的连接 18
2.6 用户输入 20
2.7 调用预定义的方法 21
2.8 print()和println()详解 22
2.9 数字类型 23
2.9.1 整数类型 23
2.9.2 浮点类型 24
2.9.3 char类型 25
2.9.4 数字与字符串的比较 26
2.10 数学表达式 27
2.10.1 整数运算的例子:MakeChange.java 27
2.10.2 类型转换 28
2.11 赋值运算符 30
2.12 自增运算符和自减运算符 31
2.13 运算符的优先级和结合性 33
2.14 编程风格 34
第3章 语句与控制流 42
3.1 表达式、块和空语句 42
3.2 布尔表达式 44
3.2.1 关系运算符和相等运算符 44
3.2.2 逻辑运算符 44
3.3 if语句 45
3.4 if-else语句 49
3.4.1 嵌套的if-else语句 51
3.4.2 连续的if-else语句 52
3.4.3 不确定的else问题 53
3.5 while语句 54
3.6 for语句 58
3.7 break语句和continue语句 60
3.8 switch语句 62
3.9 利用布尔代数规则 64
3.10 编程风格 64
第4章 方法:功能抽象 74
4.1 方法调用 74
4.2 静态方法的定义 75
4.3 return语句 77
4.4 变量的作用域 78
4.5 自顶向下设计 80
4.6 解决问题:随机数 83
4.7 模拟:计算概率 84
4.8 按值调用 87
4.9 解决问题:一个计算机游戏 88
4.9.1 Twenty-One Pickup:需求分析和定义 89
4.9.2 Twenty-One Pickup:设计 89
4.9.3 Twenty-One Pickup:实现 91
4.9.4 Twenty-One Pickup:测试 96
4.10 递归 96
4.11 解决问题:数学函数 98
4.12 方法重载 100
4.13 编程风格 102
第5章 数组 111
5.1 一维数组 111
5.1.1 对数组元素进行索引 112
5.1.2 数组的初始化 112
5.1.3 数组成员:长度 113
5.2 方法传递数组 114
5.3 数组的赋值 116
5.4 找出数组中的最大值和最小值 117
5.5 最简单的排序方法 119
5.6 搜索已排好序的数组 121
5.7 big-oh:选择最佳算法 123
5.8 类型和数组 124
5.8.1 boolean类型:埃拉托色尼筛选法 124
5.8.2 char类型:使用排队缓冲区 125
5.8.3 double类型:常见形式的sum——累加 126
5.9 二维数组 127
5.10 生命游戏 129
5.10.1 生命游戏:需求分析和定义 130
5.10.2 生命游戏:设计 130
5.10.3 生命游戏:实现 131
5.11 非基本类型的数组 136
5.11.1 String数组 137
5.11.2 Point数组 138
5.12 编程风格 140
第6章 对象:数据抽象 148
6.1 String:使用标准类 148
6.1.1 例子:回文 148
6.1.2 字符串方法 150
6.2 StringBuffer:使用赋值方法 153
6.3 一个简单类的元素 156
6.4 访问public和private:数据隐藏 158
6.5 构造函数和对象的创建 159
6.6 静态域和静态方法 160
6.7 调用方法——总述 162
6.7.1 调用同一个类中的方法 162
6.7.2 调用实例方法 163
6.7.3 调用类方法 163
6.8 解决问题:找零钱 163
6.9 访问另一个对象的私有域 165
6.10 传递对象:引用类型 166
6.11 作用域 168
6.12 关键字final和类常量 169
6.13 对象数组 170
6.14 面向对象设计 173
6.15 编程风格 175
第7章 继承 182
7.1 学生“is a”人 182
7.2 覆盖实例方法 185
7.3 访问修饰符private和public 187
7.4 访问修饰符protected 188
7.5 Object类型和继承 190
7.6 包装类 192
7.7 抽象类 192
7.8 示例:捕食者—被捕食者模拟 194
7.9 接口 200
7.10 多重继承 202
7.11 继承和设计 204
7.12 运算符instanceof和非基本类型的类型转换 205
7.13 编程风格 206
第8章 图形用户界面(一) 211
8.1 “Hello,world!”按钮 211
8.2 监听事件 213
8.3 输入文本和数字 216
8.4 使用多个组件 217
8.5 用Swing绘图 221
8.6 布局管理器FlowLayout 224
8.7 一个简单的绘图程序 226
8.8 applet 231
8.9 编程风格 236
第9章 图形用户界面(二) 241
9.1 在GUI里排列组件 241
9.1.1 BorderLayout类 241
9.1.2 在其他容器里嵌入容器 242
9.2 对组件进行缩放 243
9.3 解决问题:绘制数据 245
9.4 Graphics类 249
9.4.1 画直线 249
9.4.2 画矩形 251
9.4.3 画椭圆 251
9.4.4 画圆弧 251
9.4.5 画多边形 252
9.4.6 画文本 253
9.4.7 使用颜色 253
9.5 修改绘图时所用的笔刷 254
9.6 为GUI添加菜单 258
9.7 事件的监听者和适配类 263
9.8 编程风格 267
第10章 文件的读与写 272
10.1 文件的类型 272
10.2 写文本文件 273
10.3 读文本文件 274
10.3.1 使用标准的Java类读文本文件 276
10.3.2 解析文本流 277
10.4 格式化文本输出 277
10.5 解决问题:文本文件的加密 282
10.6 二进制文件的读和写 284
10.7 检测输入流的结束 286
10.8 编程风格 288
第11章 异常 292
11.1 用try和catch进行异常处理 292
11.2 捕获EOFException异常 296
11.3 从抛出异常的方法突然返回 299
11.4 捕获几个不同的异常 300
11.5 finally子句 301
11.6 程序的正确性:抛出异常 303
11.7 RuntimeException和throws子句 305
11.8 编程风格 307
第12章 动态数据结构 310
12.1 自引用数据结构 310
12.2 栈的链表实现 311
12.3 单向链表 313
12.4 更多链表操作 317
12.4.1 实现IntList类的toString()方法 318
12.4.2 双向链表 319
12.5 泛化的栈 320
12.6 示例:波兰表示和栈计算 323
12.7 队列 324
12.8 迭代器 326
12.8.1 使用迭代器实现方法append() 328
12.8.2 对链表进行排序 330
12.9 迭代器和接口Iterator 331
12.10 删除对象 332
12.11 包 333
12.11.1 包访问 333
12.11.2 使用包 334
12.11.3 创建包 335
12.12 编程风格 335
第13章 用Java线程编写并发程序 340
13.1 AWT的隐式线程 340
13.2 创建线程 341
13.3 两个线程之间的通信 343
13.4 同步化两个线程 344
13.4.1 使用synchronized互斥 345
13.4.2 信号等待同步 346
13.4.3 条件变量和信号量 348
13.5 向另一台计算机传递消息 349
13.6 一个多线程服务器 353
13.7 深入sleep(),wait()和notify() 355
13.7.1 从任意位置调用sleep() 355
13.7.2 在同步方法之外调用wait()和notify() 355
13.7.3 notifyAll()方法 356
13.8 编程风格 358
附录A 位 363
A.1 整数的二进制表示 363
A.2 浮点数的表示 364
A.3 位操作 365
A.3 位操作 366
附录B 参考表 369
B.1 运算符优先级表 369
B.2 标准的Java数学函数 369
附录C 文本I/O包tio 371
C.1 tio.ReadInput类 371
C.2 tio.FormattedWriter类 377
C.3 tio.ReadException类 382
C.4 tio.Console类 382
C.5 tio.PrintFileWriter类 383
附录D 一些Swing组件的总结 384
D.1 JButton类 384
D.2 JComboBox类 384
D.3 JList类 385
D.4 JLabel类 386
D.5 JTextField类 386
D.6 JTextArea类 386
D.7 JPanel类 388
D.8 JScrollPane类 388
附录E 关于C语言 390
E.1 简介 390
E.2 向函数传递参数 399
E.3 数组 407
E.4 字符串 413
E.5 结构化的数据类型 420
E.6 文件I/O和多个源文件 432
E.6.1 文件I/O以及命令行参数 433
E.6.2 头文件 435