一、目录介绍
第Ⅰ部分 Java语言
第1章 Java的历史和演变
1.1 Java的家世 4
1.1.1 现代编程语言的诞生:C语言 4
1.1.2 C++:下一个阶段 5
1.1.3 Java出现的时机已经成熟 6
1.2 Java的诞生 6
1.3 Java改变Internet的方式 8
1.3.1 Java applet 8
1.3.2 安全性 8
1.3.3 可移植性 8
1.4 Java的魔力:字节码 9
1.5 servlet:服务器端的Java 10
1.6 Java的关键特性 10
1.6.1 简单性 10
1.6.2 面向对象 11
1.6.3 健壮性 11
1.6.4 多线程 11
1.6.5 体系结构中立 11
1.6.6 解释执行和高性能 12
1.6.7 分布式 12
1.6.8 动态性 12
1.7 Java的演变历程 12
1.8 Java SE 8 14
1.9 文化革新 15
第2章 Java综述
2.1 面向对象编程 17
2.1.1 两种范式 18
2.1.2 抽象 18
2.1.3 OOP三原则 19
2.2 第一个简单程序 23
2.2.1 输入程序 23
2.2.2 编译程序 23
2.2.3 深入分析第一个示例程序 24
2.3 第二个简短程序 26
2.4 两种控制语句 27
2.4.1 if语句 27
2.4.2 for循环 29
2.5 使用代码块 30
2.6 词汇问题 31
2.6.1 空白符 32
2.6.2 标识符 32
2.6.3 字面值 32
2.6.4 注释 32
2.6.5 分隔符 32
2.6.6 Java关键字 33
2.7 Java类库 34
第3章 数据类型、变量和数组
3.1 Java是强类型化的语言 35
3.2 基本类型 36
3.3 整型 36
3.3.1 byte 37
3.3.2 short 37
3.3.3 int 37
3.3.4 long 37
3.4 浮点型 38
3.4.1 float 38
3.4.2 double 39
3.5 字符型 39
3.6 布尔型 41
3.7 深入分析字面值 42
3.7.1 整型字面值 42
3.7.2 浮点型字面值 43
3.7.3 布尔型字面值 43
3.7.4 字符型字面值 43
3.7.5 字符串字面值 44
3.8 变量 45
3.8.1 变量的声明 45
3.8.2 动态初始化 45
3.8.3 变量的作用域和生存期 46
3.9 类型转换和强制类型转换 48
3.9.1 Java的自动类型转换 48
3.9.2 强制转换不兼容的类型 48
3.10 表达式中的自动类型提升 50
3.11 数组 51
3.11.1 一维数组 51
3.11.2 多维数组 54
3.11.3 另一种数组声明语法 58
3.12 关于字符串的一些说明 58
3.13 向C/C++程序员提供指针方面的说明 59
第4章 运算符
4.1 算术运算符 61
4.1.1 基本算术运算符 62
4.1.2 求模运算符 63
4.1.3 算术与赋值复合运算符 64
4.1.4 自增与自减运算符 65
4.2 位运算符 66
4.2.1 位逻辑运算符 67
4.2.2 左移 70
4.2.3 右移 71
4.2.4 无符号右移 72
4.2.5 位运算符与赋值的组合 74
4.3 关系运算符 74
4.4 布尔逻辑运算符 75
4.5 赋值运算符 77
4.6 “?”运算符 78
4.7 运算符的优先级 79
4.8 使用圆括号 80
第5章 控制语句
5.1 Java的选择语句 81
5.1.1 if语句 82
5.1.2 switch语句 84
5.2 迭代语句 89
5.2.1 while语句 89
5.2.2 do-while语句 91
5.2.3 for语句 93
5.2.4 for循环的for-each版本 97
5.2.5 嵌套的循环 102
5.3 跳转语句 103
5.3.1 使用break语句 103
5.3.2 使用continue语句 107
5.3.3 return语句 108
第6章 类
6.1 类的基础知识 112
6.1.1 类的一般形式 112
6.1.2 一个简单的类 113
6.2 声明对象 115
6.3 为对象引用变量赋值 117
6.4 方法 118
6.4.1 为Box类添加方法 118
6.4.2 返回值 120
6.4.3 添加带参数的方法 121
6.5 构造函数 123
6.6 this关键字 126
6.7 垃圾回收 127
6.8 finalize()方法 128
6.9 堆栈类 128
第7章 方法和类的深入分析
7.1 重载方法 131
7.2 将对象用作参数 136
7.3 参数传递的深入分析 139
7.4 返回对象 141
7.5 递归 142
7.6 访问控制 144
7.7 理解static 147
7.8 final介绍 149
7.9 重新审视数组 149
7.10 嵌套类和内部类 151
7.11 String类介绍 154
7.12 使用命令行参数 156
7.13 varargs:可变长度参数 157
7.13.1 重载varargs方法 160
7.13.2 varargs方法与模糊性 161
第8章 继承
8.1 继承的基础知识 165
8.1.1 成员访问与继承 167
8.1.2 一个更实际的例子 168
8.1.3 超类变量可以引用子类对象 170
8.2 使用super关键字 171
8.2.1 使用super调用超类的构造函数 171
8.2.2 super的另一种用法 175
8.3 创建多级继承层次 176
8.4 构造函数的调用时机 179
8.5 方法重写 180
8.6 动态方法调度 183
8.6.1 重写方法的目的 184
8.6.2 应用方法重写 185
8.7 使用抽象类 186
8.8 在继承中使用final关键字 189
8.8.1 使用final关键字阻止重写 189
8.8.2 使用final关键字阻止继承 190
8.9 Object类 190
第9章 包和接口
9.1 包 194
9.1.1 定义包 194
9.1.2 包查找与CLASSPATH 195
9.1.3 一个简短的包示例 195
9.2 访问保护 196
9.3 导入包 200
9.4 接口 202
9.4.1 定义接口 202
9.4.2 实现接口 203
9.4.3 嵌套接口 206
9.4.4 应用接口 207
9.4.5 接口中的变量 210
9.4.6 接口可以扩展 212
9.5 默认接口方法 213
9.5.1 默认方法的基础知识 214
9.5.2 一个更加实用的例子 215
9.5.3 多级继承的问题 216
9.6 在接口中使用静态方法 217
9.7 关于包和接口的最后说明 218
第10章 异常处理
10.1 异常处理的基础知识 219
10.2 异常类型 220
10.3 未捕获的异常 221
10.4 使用try和catch 222
10.5 多条catch子句 224
10.6 嵌套的try语句 225
10.7 throw 228
10.8 throws 229
10.9 finally 230
10.10 Java的内置异常 232
10.11 创建自己的异常子类 233
10.12 链式异常 235
10.13 3个近期添加的异常特性 237
10.14 使用异常 238
第11章 多线程编程
11.1 Java线程模型 240
11.1.1 线程优先级 241
11.1.2 同步 241
11.1.3 消息传递 242
11.1.4 Thread类和Runnable接口 242
11.2 主线程 243
11.3 创建线程 244
11.3.1 实现Runnable接口 245
11.3.2 扩展Thread类 247
11.3.3 选择一种创建方式 248
11.4 创建多个线程 248
11.5 使用isAlive()和join()方法 249
11.6 线程优先级 252
11.7 同步 253
11.7.1 使用同步方法 253
11.7.2 synchronized语句 255
11.8 线程间通信 257
11.9 挂起、恢复与停止线程 263
11.10 获取线程的状态 266
11.11 使用多线程 267
第12章 枚举、自动装箱与注解(元数据)
12.1 枚举 269
12.1.1 枚举的基础知识 270
12.1.2 values()和valueOf()方法 272
12.1.3 Java枚举是类类型 273
12.1.4 枚举继承自Enum类 275
12.1.5 另一个枚举示例 277
12.2 类型封装器 279
12.2.1 Character封装器 279
12.2.2 Boolean封装器 279
12.2.3 数值类型封装器 280
12.3 自动装箱 281
12.3.1 自动装箱与方法 281
12.3.2 表达式中发生的自动装箱/拆箱 282
12.3.3 布尔型和字符型数值的自动装箱/拆箱 284
12.3.4 自动装箱/拆箱有助于防止错误 285
12.3.5 一些警告 285
12.4 注解(元数据) 286
12.4.1 注解的基础知识 286
12.4.2 指定保留策略 287
12.4.3 在运行时使用反射获取注解 288
12.4.4 AnnotatedElement接口 293
12.4.5 使用默认值 293
12.4.6 标记注解 295
12.4.7 单成员注解 296
12.4.8 内置注解 297
12.5 类型注解 299
12.6 重复注解 303
第13章 I/O、applet以及其他主题
13.1 I/O的基础知识 308
13.1.1 流 308
13.1.2 字节流和字符流 308
13.1.3 预定义流 310
13.2 读取控制台输入 311
13.2.1 读取字符 311
13.2.2 读取字符串 312
13.3 向控制台写输出 314
13.4 PrintWriter类 314
13.5 读/写文件 315
13.6 自动关闭文件 321
13.7 applet的基础知识 325
13.8 transient和volatile修饰符 327
13.9 使用instanceof运算符 328
13.10 strictfp 330
13.11 本地方法 331
13.12 使用assert 334
13.13 静态导入 337
13.14 通过this()调用重载的构造函数 339
13.15 紧凑API配置文件 342
第14章 泛型
14.1 什么是泛型 344
14.2 一个简单的泛型示例 344
14.2.1 泛型只使用引用类型 348
14.2.2 基于不同类型参数的泛型类型是不同的 348
14.2.3 泛型提升类型安全性的原理 348
14.3 带两个类型参数的泛型类 350
14.4 泛型类的一般形式 352
14.5 有界类型 352
14.6 使用通配符参数 355
14.7 创建泛型方法 363
14.8 泛型接口 366
14.9 原始类型与遗留代码 368
14.10 泛型类层次 370
14.10.1 使用泛型超类 370
14.10.2 泛型子类 372
14.10.3 泛型层次中的运行时类型比较 374
14.10.4 强制转换 376
14.10.5 重写泛型类的方法 376
14.11 泛型的类型推断 378
14.12 擦除 379
14.13 模糊性错误 381
14.14 使用泛型的一些限制 382
14.14.1 不能实例化类型参数 382
14.14.2 对静态成员的一些限制 383
14.14.3 对泛型数组的一些限制 383
14.14.4 对泛型异常的限制 384
第15章 lambda表达式
15.1 lambda表达式简介 386
15.1.1 lambda表达式的基础知识 386
15.1.2 函数式接口 387
15.1.3 几个lambda表达式示例 388
15.2 块lambda表达式 391
15.3 泛型函数式接口 393
15.4 作为参数传递lambda表达式 395
15.5 lambda表达式与异常 398
15.6 lambda表达式和变量捕获 399
15.7 方法引用 400
15.7.1 静态方法的方法引用 400
15.7.2 实例方法的方法引用 401
15.7.3 泛型中的方法引用 405
15.8 构造函数引用 408
15.9 预定义的函数式接口 412