第1章 词法结构 1
1.1 简介 1
1.2 空白 3
1.2.1 缩进 6
1.3 注释 7
1.3.1 注释掉大块代码 7
1.4 标识符 8
1.4.1 Java命名惯例 10
1.5 关键字 12
1.6 直接量 13
1.6.1 字符直接量 14
1.6.2 转义序列 15
1.6.3 字符串直接量 22
1.6.4 数值直接量 23
1.6.5 类直接量 28
1.7 分隔符 30
1.8 操作符 31
第2章 编译单元 32
2.1 引言 33
2.2 类体声明中的术语 34
2.2.1 Java中对成员变量的定义 35
2.2.2 在源代码中识别构造方法 35
2.3 编译单元的剖析 35
2.3.1 专用初始化方法 37
2.3.2 原文顺序 40
2.4 包声明 41
2.4.1 包名 41
2.3.3 惟一public包成员的限制 41
2.4.2 包的成员 43
2.4.3 使用SDK创建包 43
2.5 导入声明 44
2.5.1 自动导入 46
2.5.2 冗余导入 48
2.5.3 各种嵌套类的导入(顶层类或内部类) 48
2.5.4 编译器对导入语句的解析 52
2.5.5 按需类型导入声明的效能 58
2.6 类型声明 60
2.6.1 类的类型声明 60
2.6.2 接口类型声明 64
2.7 顶层类的定义 67
2.8 辅助类并没有根本性的不同 68
2.8.1 不使用辅助类的技术争论 71
2.9 类和接口的五种分类 74
2.9.1 public的顶层类 75
2.9.2 非public的成员类 76
2.9.3 局部类和匿名类 80
2.9.4 嵌套的接口 82
2.10 选择使用不同类型的类 82
2.10.1 从VectorEnumerator到匿名类 85
2.11 容器和内部类层次的基本原理 87
2.12 容器和内部类层次 89
2.12.1 容器层次 89
2.12.2 内部类层次 90
第3章 static修饰符、this和super 92
3.1 简介 92
3.2 static修饰符 93
3.2.1 static成员变量 95
3.2.2 static方法 96
3.2.3 static类 97
3.3 static上下文的定义 97
3.3.1 内部类层次中的static上下文 99
3.4 this和super关键字 99
3.4.1 当前对象(this) 101
3.4.2 直接超类(super) 102
3.5 this和super关键字的实际用法 104
3.5.1 使用super引用不同的包中的成员 108
3.6 多个当前实例(又名层级) 109
3.6.1 深度嵌套类型的一个注意事项 111
3.6.2 限定this关键字 112
3.6.3 限定new关键字 114
3.6.4 限定super关键字 116
第4章 原始数据类型和Object类 119
4.1 简介 120
4.2 数据类型定义 121
4.2.1 作为数值集的数据类型 121
4.2.2 面向对象的类型定义 122
4.3 数值(Numeric)数据类型 123
4.3.1 整数类型 123
4.3.2 浮点类型 124
4.3.3 理解浮点类型 137
4.4 字符(char)数据类型 147
4.5 布尔(boolean)数据类型 147
4.7 Number类 148
4.6 空(null)类型 148
4.8 java.math包 149
4.8.1 BigInteger类 149
4.8.2 BigDecimal类 149
4.9 货币计算 155
4.9.1 不精确的结果和比较运算符 155
4.9.2 浮点操作结果凑整 156
4.9.3 用整数类型存储货币值 157
4.10 原始数据类型的包装器(Wrapper)类 158
4.10.1 字符串的基本类型值解析 160
4.10.2 把原始数值类型转换成字符串 162
4.10.3 位模式操作 164
4.10.4 访问原始数据类型的系统属性 164
4.10.5 Unicode工具方法 165
4.11 Object类 173
4.11.1 引用相等vs.等价关系 176
4.11.2 理解散列表(Hash Table) 178
4.11.3 五个内务(Housekeeping)方法 184
4.12 比较方法 204
4.12.1 什么是默认顺序? 205
4.12.2 什么是自然顺序? 205
4.12.3 倒序(递减)排序 206
4.12.4 根据一个以上的成员变量排序 206
4.12.5 Comparable接口 207
4.12.6 Comparator接口 211
第5章 字符串和其他通用数据类型 216
5.1 简介 217
5.2 可以进行修改操作的方法 218
5.4 StringBuffer的容量 219
5.3 String或StringBuffer的长度 219
5.4.1 StringBuffer容量的确定 220
5.5 String索引 220
5.5.1 String和StringBuffer的右开区间 222
5.6 String和StringBuffer类中的已检查异常 222
5.7 String类 222
5.7.1 大小写映射 223
5.7.2 字符串比较 224
5.7.3 访问单个字符或子字符串 225
5.7.4 char[]和String之间的相互转换 227
5.7.5 转换本地编码的字符串 228
5.7.6 String类的杂项方法 229
5.7.7 String类中的特殊构造方法 230
5.8.1 重载的方法append和insert 231
5.8 StringBuffer类 231
5.8.2 StringBuffer类中的其他方法 232
5.9 其他和字符串相关的类 232
5.9.1 StringCharacterIterator类 233
5.9.2 StringReader和StringWriter类 235
5.10 词法分析 236
5.10.1 BreakIterator类 238
5.10.2 StringTokenizer类 244
5.10.3 StreamTokenizer类 245
5.11 字符串连接操作 247
5.11.1 重载的二元+操作符的一个注意事项 253
5.11.2 隐含的字符串转换 254
5.11.3 内置机制 256
5.11.4 共享字符缓冲区 260
5.12 在应用平台上显示诊断信息 261
5.12.1 标准I/O 261
5.12.2 输出和println方法 267
5.13 Locale类 268
5.13.1 默认的区域 271
5.13.2 能够支持的区域 272
5.14 Date类 278
5.14.1 日期比较 279
5.15 GregorianCalendar类 280
5.15.1 实例化GregorianCalendar类 281
5.15.2 矛盾的成员变量优先规则 284
5.15.3 最大DAY_OF_MONTH规则 285
5.16 Calendar类中的日期和时间成员变量 286
5.16.1 日期和时间成员变量的标准默认值 289
5.16.2 格式化日期和时间成员变量 290
5.16.3 日期和时间成员变量的操作方法 291
5.17 TimeZone类 295
5.18 理解i 18n和l 10n的不同 296
5.19 通用数据类型的本地化过程 297
5.19.1 数字的格式化 300
5.19.2 格式化日期和时间 304
第6章 数组和集合框架 318
6.1 介绍 320
6.2 数组、组件和元素类型 321
6.3 数组 322
6.3.1 for循环的标准格式 324
6.3.2 数组类是动态创建的 326
6.3.4 数组类型变量声明 327
6.3.3 数组类型的成员 327
6.3.5 初始化数组类型变量 329
6.3.6 数组访问表达式 331
6.4 忧愁河上的桥(toArray方法) 332
6.5 无类型引用和参数化类型 333
6.5.1 什么是运行时类型? 336
6.6 时间复杂性(或大-O表示法) 336
6.6.1 常数时间操作 339
6.6.2 折合常数时间 340
6.6.3 对数时间 341
6.6.4 线性时间 341
6.6.5 二次方时间 342
6.7 等价关系和元素 343
6.8 重复元素 344
6.8.1 用可变对象作为集的元素或映射的键 345
6.9 集合框架 345
6.9.1 批操作 346
6.9.2 最大普遍性原理 348
6.9.3 Collection接口 350
6.9.4 Map接口 356
6.9.5 容器的内务方法 360
6.10 通用实现 362
6.10.1 选择一个通用实现 363
6.10.2 通用实现的性能优化 379
6.11 专用实现 384
6.11.1 WeakHashMap 384
6.12 视图 385
6.12.1 同步视图 391
6.12.2 不可修改的视图 393
6.12.3 范围视图(子列表,子集和子映射) 395
6.12.4 映射的集合视图 399
6.12.5 数组的列表视图 402
6.13 迭代器 402
6.13.1 列表迭代器 403
6.13.2 用集合视图迭代映射 410
6.13.3 笨人的集合 411
6.13.4 同步迭代器 412
6.13.5 fail-fast迭代器 413
6.13.6 用TreeSet或TreeMap向后迭代 416
6.14 Al-Khwarizmi是关于估算的印度艺术 417
6.15 Arrays和其他Collections的方法 418
6.15.1 集合排序 418
6.15.2 查找 419
6.15.3 克隆和拷贝容器 423
6.15.4 重组 424
6.15.5 填充 426
6.15.6 最小元素和最大元素 427
6.15.7 便利实现 428
6.15.8 数组的equals方法 429
6.16 核心集合接口的定制实现 429
6.16.1 抽象实现 430
6.16.2 可选操作 435
6.16.3 受限容器 437
6.16.4 标准构造方法 440
6.17 多映射和多维数组 442
6.17.1 多映射 442
6.17.2 多维数组 446
6.18 传统容器 449