第1章 一种现代语言 1
1.1 进入Java世界 2
1.1.1 Java的起源 2
1.1.2 成长 3
1.2 虚拟机 4
1.3 Java与其他语言的比较 7
1.4 设计安全 10
1.4.1 语法简单性 10
1.4.2 类型安全和方法绑定 11
1.4.3 递增开发 12
1.4.4 动态内存管理 13
1.4.5 错误处理 14
1.4.6 线程 14
1.4.7 可伸缩性 15
1.5 实现安全 15
1.5.1 校验器 17
1.5.2 类加载器 18
1.5.3 安全管理器 18
1.6 应用和用户级安全性 19
1.7 Java路线图 20
1.7.1 过去:Java 1.0到Java 1.6 20
1.7.2 如今:Java 7 21
1.7.3 将来 23
1.7.4 可用性 24
第2章 第一个应用 25
2.1 Java工具和环境 25
2.2 配置Eclipse并且创建项目 26
2.2.1 导入本书示例 28
2.3 HelloJava 29
2.3.1 类 32
2.3.2 main()方法 32
2.3.3 类和对象 34
2.3.4 变量与类类型 34
2.3.5 HelloComponent 35
2.3.6 继承 36
2.3.7 JComponent类 37
2.3.8 关系与指向 38
2.3.9 包与导入 39
2.3.10 paintComponent()方法 40
2.4 HelloJava2:余波未平 41
2.4.1 实例变量 43
2.4.2 构造函数 43
2.4.3 事件 45
2.4.4 repaint()方法 47
2.4.5 接口 48
2.5 HelloJava3:按钮的震撼 49
2.5.1 方法重载 51
2.5.2 组件 52
2.5.3 容器 52
2.5.4 布局 53
2.5.5 派生子类与子类型 53
2.5.6 更多事件和接口 54
2.5.7 颜色的说明 55
2.5.8 静态成员 55
2.5.9 数组 56
2.5.10 颜色的相关方法 56
2.6 HelloJava4:Netscape的反戈一击 58
2.6.1 线程 60
2.6.2 Thread类 60
2.6.3 Runnable接口 61
2.6.4 启动线程 62
2.6.5 在线程中运行代码 62
2.6.6 异常 63
2.6.7 同步 64
第3章 使用工具 66
3.1 JDK环境 66
3.2 Java虚拟机 67
3.3 运行Java应用程序 67
3.4 类路径 69
3.5 Java编译器 71
3.6 JARFiles 73
3.6.1 文件压缩 73
3.6.2 jar工具 74
3.6.3 Pack200工具 77
3.7 策略文件 78
3.7.1 默认的安全性管理器 78
3.7.2 policytool工具 79
3.7.3 通过默认的安全管理器使用策略文件 81
第4章 JaVa语言 82
4.1 文本编码 82
4.2 注释 83
4.3 类型 85
4.3.1 基本类型 86
4.3.2 引用类型 89
4.3.3 字符串的有关问题 91
4.4 语句和表达式 92
4.4.1 语句 93
4.4.2 表达式 99
4.5 异常 103
4.5.1 异常和错误类 104
4.5.2 异常处理 106
4.5.3 逐级上浮 108
4.5.4 栈轨迹 109
4.5.5 受查和非受查异常 110
4.5.6 抛出异常 111
4.5.7 try的“潜伏”功用 114
4.5.8 finally子句 115
4.5.9 带有资源的Try 116
4.5.10 性能问题 118
4.6 断言 118
4.6.1 启用和禁用断言 119
4.6.2 使用断言 120
4.7 数组 121
4.7.1 数组类型 122
4.7.2 数组的创建和初始化 122
4.7.3 使用数组 124
4.7.4 匿名数组 126
4.7.5 多维数组 126
4.7.6 深入数组 128
第5章 Java中的对象 129
5.1 类 130
5.1.1 访问字段和方法 132
5.1.2 静态成员 133
5.2 方法 136
5.2.1 局部变量 137
5.2.2 遮蔽 137
5.2.3 静态方法 138
5.2.4 初始化局部变量 139
5.2.5 参数传递与引用 140
5.2.6 基本类型的包装器 142
5.2.7 基本类型的自动装箱和拆箱 144
5.2.8 可变长度的参数列表 145
5.2.9 方法重载 146
5.3 对象创建 148
5.3.1 构造函数 148
5.3.2 使用重载构造函数 149
5.3.3 静态和非静态初始化块 151
5.4 对象销毁 152
5.4.1 垃圾回收 152
5.4.2 最终化 153
5.4.3 弱引用和软引用 154
5.5 枚举 155
5.5.1 枚举值 156
5.5.2 定制化枚举 156
第6章 类之间的关系 158
6.1 派生子类和继承 158
6.1.1 被遮蔽变量 160
6.1.2 覆盖方法 162
6.1.3 特殊引用:this和super 169
6.1.4 类型强制转换 170
6.1.5 使用超类构造函数 172
6.1.6 完全揭密:构造函数和初始化 173
6.1.7 抽象方法和类 173
6.2 接口 174
6.2.1 作为回调的接口 176
6.2.2 接口变量 177
6.2.3 子接口 178
6.3 包与编译单元 179
6.3.1 编译单元 179
6.3.2 包名 180
6.3.3 类可见性 180
6.3.4 导入类 181
6.4 变量和方法的可见性 183
6.4.1 基本访问修饰符 184
6.4.2 子类和可见性 185
6.4.3 接口和可见性 186
6.5 数组和类的层次体系结构 186
6.6 内部类 188
6.6.1 内部类作为适配器 190
6.6.2 方法中的内部类 192
第7章 使用对象和类 198
7.1 Object类 198
7.1.1 相等性与等价 199
7.1.2 散列码 200
7.1.3 复制对象 200
7.2 Class类 203
7.3 反射 205
7.3.1 安全性 208
7.3.2 访问字段 209
7.3.3 访问方法 210
7.3.4 访问构造函数 212
7.3.5 关于数组 213
7.3.6 访问泛型类型信息 213
7.3.7 访问注解数据 214
7.3.8 动态接口适配器 214
7.3.9 反射适用之处 215
7.4 注解 216
7.4.1 使用注解 217
7.4.2 标准注解 218
7.4.3 Apt工具 219
第8章 泛型 220
8.1 容器:构建一个更好的捕鼠器 221
8.2 走进泛型 222
8.3 根本就没有勺子 226
8.3.1 擦除 226
8.3.2 原始类型 228
8.4 参数化类型关系 229
8.5 类型转换 232
8.6 编写泛型类 233
8.6.1 类型变量 233
8.6.2 子类化泛型 234
8.6.3 异常和泛型 235
8.6.4 参数类型限制 236
8.7 边界 237
8.8 通配符 239
8.8.1 所有实例化的超类型 240
8.8.2 有界限通配符 240
8.8.3 思考容器 240
8.8.4 下边界 241
8.8.5 读、写和算术 242
8.8.6 <?><Object>和原始类型 243
8.8.7 通配符类型关系 244
8.9 泛型方法 245
8.9.1 泛型方法的引入 246
8.9.2 根据参数进行类型推断 247
8.9.3 根据赋值环境做类型推断 248
8.9.4 显示类型调用 249
8.9.5 通配符捕获 249
8.9.6 通配符类型和泛型方法 249
8.10 参数化类型的数组 250
8.10.1 使用数组类型 251
8.10.2 泛型类型的数组有何优点 252
8.10.3 数组类型中的通配符 252
8.11 案例学习:Enum类 253
8.12 案例学习:sort()方法 254
8.13 结论 255
第9章 线程 256
9.1 线程简介 257
9.1.1 Tbread类和Runnable接口 258
9.1.2 控制线程 262
9.1.3 线程的消亡 264
9.2 applet中线程的实现 266
9.3 同步 268
9.3.1 对方法的串行化访问 269
9.3.2 访问多线程中的类和实例变量 271
9.3.3 wait()和notify()方法 272
9.3.4 传递消息 274
9.3.5 ThreadLocal对象 278
9.4 调度和优先级 279
9.4.1 线程状态 280
9.4.2 时间片划分 281
9.4.3 优先级 282
9.4.4 让步 283
9.5 线程组 283
9.5.1 使用ThreadGroup类 284
9.5.2 未捕获的异常 284
9.6 线程性能 285
9.6.1 同步的开销 285
9.6.2 线程资源消费 286
9.7 并发工具 287
9.7.1 执行器 288
9.7.2 锁 300
9.7.3 同步构造 303
9.7.4 原子操作 308
9.8 结论 310
第10章 文本处理 311
10.1 其他与文本相关的API 312
10.2 String 312
10.2.1 String构造函数 313
10.2.2 事物的字符串表示 314
10.2.3 字符串比较 315
10.2.4 查找 317
10.2.5 编辑 318
10.2.6 String方法小结 319
10.2.7 StringBuilder和StringBuffer 320
10.3 国际化 321
10.3.1 java.util.Locale类 321
10.3.2 资源包 322
10.4 解析与格式化文本 324
10.4.1 解析基本数字 325
10.4.2 文本分词 326
10.5 Printf式格式化 328
10.5.1 Formatter 329
10.5.2 格式字符串 329
10.5.3 字符串转换 330
10.5.4 基本类型和数字转换 332
10.5.5 标志 334
10.5.6 其他 334
10.6 用java.text包格式化 334
10.7 正则表达式 338
10.7.1 regex记法 339
10.7.2 java.util.regex API 349
第11章 核心实用工具 356
11.1 数学实用工具 356
11.1.1 java.1ang.Math类 357
11.1.2 Big/Precise Numbers 359
11.1.3 浮点数组成部分 359
11.1.4 随机数 360
11.2 日期和时间 361
11.2.1 使用日历 362
11.2.2 Time Zones 363
11.2.3 解析和格式化日期 365
11.2.4 Printf式的日期和时间格式化 367
11.3 定时器 368
11.4 集合 370
11.4.1 Collection接口 371
11.4.2 迭代器 374
11.4.3 Collection类型 375
11.4.4 Map接口 378
11.4.5 集合实现 380
11.4.6 哈希码和键值 385
11.4.7 同步和只读集合 386
11.4.8 同步和只读集合 387
11.4.9 WeakHashMap 388
11.4.10 EnumSet和EnumMap 388
11.4.11 排序的集合 389
11.4.12一个令人激动的例子 389
11.5 特性 391
11.5.1 加载和存储 392
11.5.2 系统特性 393
11.6 首选项API 394
11.6.1 类的首选项 395
11.6.2 首选项存储 395
11.6.3 修改通知 396
11.7 日志API 397
11.7.1 概述 397
11.7.2 日志级别 399
11.7.3 一个简单的例子 400
11.7.4 日志建立特性 401
11.7.5 记录器 403
11.7.6 性能 404
11.8 Observers和Observables 404
第12章 输入/输出功能 406
12.1 流 406
12.1.1 终端I/O 409
12.1.2 字符流 411
12.1.3 流包装器 413
12.1.4 管道 416
12.1.5 流与String的转换 418
12.1.6 Implementing a Filter Stream 420
12.2 文件 421
12.2.1 java.io.File类 422
12.2.2 文件流 427
12.2.3 Random AccessFile 429
12.2.4 Resource Paths 430
12.3 NIO File API 432
12.3.1 FileSystem和Path 433
12.3.2 NIO文件操作 435
12.3.3 目录操作 438
12.3.4 监控路径 440
12.4 串行化 441
12.4.1 使用readObject()初始化 443
12.4.2 SerialVersionUID 443
12.5 数据压缩 444
12.5.1 压缩数据 445
12.5.2 解压缩数据 446
12.5.3 作为文件系统的Zip归档文件 448
12.6 NIO包 449
12.6.1 异步I/O 450
12.6.2 性能 450
12.6.3 映射和加锁文件 450
12.6.4 通道 451
12.6.5 缓冲区 451
12.6.6 字符编码器和解码器 455
12.6.7 FileChannel 457
12.6.8 利用NIO实现可伸缩I/O 463