第1章 入门 1
1.1 Java技术现象 1
1.1.1 关于Java技术 1
1.1.2 Java技术能做什么 3
1.1.3 Java技术将如何改变我们的生活 3
1.2 “Hello World!”应用程序 4
1.2.1 使用NetBeans IDE编写“Hello World!” 4
1.2.2 在Microsoft Windows平台上编写“Hello World!” 9
1.2.3 在Solaris OS和Linux平台上编写“Hello World!” 12
1.3 分析“Hello World!”应用程序 15
1.3.1 源代码注释 16
1.3.2 HelloWorldApp类定义 16
1.3.3 main方法 16
1.4 常见问题(和解决方案) 17
1.4.1 编译器问题 17
1.4.2 运行时问题 18
问题和练习:入门 19
第2章 面向对象的编程概念 21
2.1 对象是什么 21
2.2 类是什么 22
2.3 继承是什么 24
2.4 接口是什么 24
2.5 包是什么 25
问题和练习:面向对象的编程概念 25
第3章 语言基础 27
3.1 变量 27
3.1.1 命名 28
3.1.2 基本数据类型 28
3.1.3 数组 30
3.1.4 变量小结 33
问题和练习:变量 34
3.2 操作符 34
3.2.1 赋值、算术和一元操作符 35
3.2.2 相等、关系和条件操作符 37
3.2.3 位操作符和移位操作符 39
3.2.4 操作符小结 40
问题和练习:操作符 41
3.3 表达式、语句和块 42
3.3.1 表达式 42
3.3.2 语句 42
3.3.3 块 43
问题和练习:表达式、语句和块 43
3.4 控制流语句 44
3.4.1 if-then和if-then-else语句 44
3.4.2 switch语句 45
3.4.3 while和do-while语句 47
3.4.4 for语句 48
3.4.5 分支语句 49
3.4.6 控制流语句小结 52
问题和练习:控制流语句 52
第4章 类和对象 54
4.1 类 54
4.1.1 声明类 55
4.1.2 声明成员变量 55
4.1.3 定义方法 57
4.1.4 为类提供构造器 58
4.1.5 把信息传递给方法或构造器 59
4.2 对象 62
4.2.1 创建对象 63
4.2.2 使用对象 66
4.3 关于类的更多介绍 67
4.3.1 从方法返回值 68
4.3.2 使用关键字this 69
4.3.3 控制对类成员的访问 70
4.3.4 了解实例成员和类成员 72
4.3.5 初始化字段 75
4.3.6 创建和使用类和对象的小结 76
问题和练习:类 76
问题和练习:对象 77
4.4 嵌套类 78
4.4.1 为什么使用嵌套类 78
4.4.2 静态嵌套类 79
4.4.3 内部类 79
4.4.4 内部类示例 80
4.4.5 嵌套类小结 81
问题和练习:嵌套类 82
4.5 枚举类型 83
问题和练习:枚举类型 85
4.6 注解 86
4.6.1 文档 86
4.6.2 编译器使用的注解 87
4.6.3 注解处理 88
问题和练习:注解 88
第5章 接口和继承 90
5.1 接口 90
5.1.1 Java中的接口 90
5.1.2 接口作为API 91
5.1.3 接口和多重继承 91
5.1.4 定义接口 91
5.1.5 实现接口 92
5.1.6 使用接口作为类型 93
5.1.7 重新编写接口 94
5.1.8 接口小结 95
问题和练习:接口 95
5.2 继承 95
5.2.1 Java平台类层次结构 96
5.2.2 继承示例 96
5.2.3 在子类中能进行什么操作 97
5.2.4 子类中的私有成员 98
5.2.5 对象的类型转换 98
5.2.6 覆盖和隐藏方法 99
5.2.7 隐藏字段 100
5.2.8 使用关键字super 100
5.2.9 Object作为超类 101
5.2.10 编写最终类和方法 104
5.2.11 抽象方法和抽象类 104
5.2.12 继承小结 106
问题和练习:继承 106
第6章 泛型 108
6.1 简介 108
6.2 泛型类型 109
6.3 泛型方法和构造器 111
6.4 受限类型参数 112
6.5 子类型化 113
6.6 通配符 114
6.7 类型擦除 115
6.8 泛型小结 116
问题和练习:泛型 117
第7章 包 118
7.1 创建和使用包 118
7.1.1 创建包 119
7.1.2 命名包 120
7.1.3 使用包成员 121
7.1.4 管理源文件和类文件 123
7.1.5 创建和使用包小结 124
问题和练习:创建和使用包 124
第8章 数字和字符串 126
8.1 数字 126
8.1.1 数字类 126
8.1.2 格式化数字输出 128
8.1.3 高级算术功能 131
8.1.4 数字小结 134
问题和练习:数字 134
8.2 字符 136
8.3 字符串 137
8.3.1 创建字符串 138
8.3.2 字符串长度 138
8.3.3 连接字符串 139
8.3.4 创建格式化字符串 139
8.3.5 在数字和字符串之间进行转换 140
8.3.6 处理字符串中的字符 141
8.3.7 比较字符串和部分字符串 145
8.3.8 StringBuilder类 146
8.3.9 字符和字符串小结 149
问题和练习:字符和字符串 150
第9章 异常 151
9.1 异常是什么 151
9.2 捕获或者指定需求 152
9.2.1 异常的三种类型 152
9.2.2 绕过捕获或者指定 153
9.3 捕获和处理异常 153
9.3.1 try块 154
9.3.2 catch块 154
9.3.3 finally块 155
9.3.4 结合使用 156
9.4 指定方法抛出的异常 159
9.5 如何抛出异常 159
9.5.1 throw语句 160
9.5.2 Throwable类及其子类 160
9.5.3 Error类 161
9.5.4 Exception类 161
9.5.5 链式异常 161
9.5.6 创建异常类 162
9.6 关于不可控异常的争论 163
9.7 异常的优点 164
9.7.1 优点一:把错误处理代码和“常规”代码分离开 164
9.7.2 优点二:把错误沿调用栈向上传递 165
9.7.3 优点三:对错误类型进行分组和区分 166
9.8 小结 167
问题和练习:异常 167
第10章 基本I/O 169
10.1 I/O流 169
10.1.1 字节流 170
10.1.2 字符流 171
10.1.3 缓冲流 174
10.1.4 扫描和格式化 174
10.1.5 命令行I/O 179
10.1.6 数据流 180
10.1.7 对象流 182
10.2 文件I/O 185
10.2.1 File对象 185
10.2.2 随机访问文件 187
10.3 新I/O包 189
10.4 小结 189
问题和练习:基本I/O 189
第11章 集合 190
11.1 集合简介 190
11.1.1 集合框架是什么 190
11.1.2 Java集合框架的优势 190
11.2 接口 191
11.2.1 Collection接口 192
11.2.2 Set接口 195
11.2.3 List接口 198
11.2.4 Queue接口 204
11.2.5 Map接口 206
11.2.6 对象排序 212
11.2.7 SortedSet接口 216
11.2.8 SortedMap接口 219
11.2.9 接口小结 219
问题和练习:接口 220
11.3 实现 221
11.3.1 Set实现 222
11.3.2 List实现 223
11.3.3 Map实现 224
11.3.4 Queue实现 225
11.3.5 包装器实现 226
11.3.6 简便实现 227
11.3.7 实现小结 228
问题和练习:实现 229
11.4 算法 229
11.4.1 排序 229
11.4.2 混序 231
11.4.3 常规数据操作 231
11.4.4 搜索 231
11.4.5 组合 232
11.4.6 查找极值 232
11.5 定制集合实现 232
11.5.1 编写实现的原因 232
11.5.2 如何编写定制实现 233
11.6 互操作性 234
11.6.1 兼容性 235
11.6.2 API设计 236
第12章 并发 238
12.1 进程和线程 238
12.1.1 进程 238
12.1.2 线程 238
12.2 Thread对象 239
12.2.1 定义和启动线程 239
12.2.2 使用sleep暂停执行 240
12.2.3 中断 240
12.2.4 join 241
12.2.5 SimpleThreads示例 242
12.3 同步 243
12.3.1 线程干扰 243
12.3.2 内存一致性错误 244
12.3.3 同步方法 245
12.3.4 内在锁和同步 246
12.3.5 原子访问 247
12.4 活性 247
12.4.1 死锁 247
12.4.2 饿死和活锁 248
12.5 保护块 249
12.6 不可变对象 252
12.6.1 同步类示例 252
12.6.2 定义不可变对象的策略 253
12.7 高级并发对象 255
12.7.1 Lock对象 255
12.7.2 执行器 257
12.7.3 并发集合 258
12.7.4 原子变量 259
12.8 推荐阅读 260
问题和练习:并发 260
第13章 正则表达式 262
13.1 简介 262
13.1.1 正则表达式是什么 262
13.1.2 这个包如何表示正则表达式 262
13.2 测试示例 263
13.3 字符串字面量 263
13.4 字符类 264
13.5 预定义字符类 268
13.6 量词 270
13.6.1 零长度匹配 270
13.6.2 使用量词的捕获组和字符类 273
13.6.3 greedy、reluctant和possessive量词的区别 273
13.7 捕获组 274
13.7.1 编号 274
13.7.2 反向引用 275
13.8 边界匹配器 275
13.9 Pattern类的方法 277
13.9.1 创建带有标志的模式 277
13.9.2 嵌入标志表达式 278
13.9.3 使用matches(String,CharSequence)方法 279
13.9.4 使用split(String)方法 279
13.9.5 其他工具方法 280
13.9.6 java.lang.String中和Pattren等同的方法 280
13.10 Matcher类的方法 280
13.10.1 索引方法 280
13.10.2 研究方法 281
13.10.3 替换方法 281
13.10.4 使用start和end方法 281
13.10.5 使用matches和lookingAt方法 282
13.10.6 使用replaceFirst(String)和replaceAll(String) 283
13.10.7 appendReplacement(StringBuffer,String)和appendTail(String-Buffer)方法 284
13.10.8 java.lang.String中和Matcher等同的方法 284
13.11 PatternSyntaxException类的方法 284
13.12 小结 286
13.13 附加资源 287
问题和练习:正则表达式 287
第14章 平台环境 288
14.1 配置工具 288
14.1.1 属性 288
14.1.2 命令行参数 291
14.1.3 环境变量 292
14.1.4 其他配置工具 293
14.2 系统工具 294
14.2.1 命令行I/O对象 294
14.2.2 系统属性 294
14.2.3 安全管理器 296
14.2.4 系统中的杂项方法 297
14.3 PATH和CLASSPATH 297
14.3.1 更新PATH变量(Microsoft Windows NT/2000/XP) 298
14.3.2 更新PATH变量(Solaris和Linux) 298
14.3.3 检查CLASSPATH变量(所有平台) 299
问题和练习:平台环境 299
第15章 Swing 301
15.1 Swing包概述 301
15.1.1 Swing是什么 301
15.1.2 Swing演示程序 302
15.2 Swing的特性 305
15.2.1 Swing组件的可视化指导 306
15.2.2 可插拔的界面外观 310
15.2.3 拖放和数据传输 311
15.2.4 国际化和本地化 311
15.2.5 可访问性 312
15.2.6 和桌面集成 312
15.2.7 系统托盘图标支持 313
问题和练习:图形化用户界面 313
第16章 把程序打包到JAR文件中 314
16.1 使用JAR文件:基础 314
16.1.1 创建JAR文件 315
16.1.2 查看JAR文件的内容 318
16.1.3 提取JAR文件的内容 318
16.1.4 更新JAR文件 319
16.1.5 运行JAR打包的软件 321
16.2 处理清单文件:基础 322
16.2.1 了解默认的清单 322
16.2.2 修改清单文件 322
16.2.3 设置应用程序的入口点 323
16.2.4 把类添加到JAR文件的类路径 324
16.2.5 设置包版本信息 324
16.2.6 在JAR文件中密封包 326
16.3 JAR文件的签名和验证 326
16.3.1 了解签名和验证 327
16.3.2 签名JAR文件 329
16.3.3 验证签名的JAR文件 330
16.4 使用和JAR相关的API 330
16.4.1 示例——应用程序JarRunner 330
16.4.2 JarClassLoader类 331
16.4.3 JarRunner类 333
问题和练习:JAR文件 334
第17章 Java Web Start 335
17.1 运行Java Web Start应用程序 336
17.1.1 从浏览器运行Java Web Start应用程序 336
17.1.2 从Java缓存查看器运行Java Web Start应用程序 336
17.1.3 从桌面运行Java Web Start应用程序 337
17.2 部署Java Web Start应用程序 337
17.2.1 设置Web服务器 337
17.2.2 创建JNLP文件 337
17.2.3 把应用程序放到服务器上 342
17.2.4 创建Web页面 342
17.3 开发Java Web Start应用程序 342
17.3.1 把应用程序打包到JAR文件中 342
17.3.2 读取JAR文件中的资源 343
17.3.3 不被信任的应用程序 343
17.4 JNLP API 343
17.5 Java Web Start和安全 344
17 5.1 Java Web Start安全基础 344
17.5.2 Java Web Start部署的签名JAR文件 345
17.5.3 安全和JNLP文件 345
17.5.4 HTTPS证书的动态下载 345
17.6 常见的Java Web Start问题 345
问题和练习:Java Web Start 346
第18章 applet 347
18.1 applet入门 348
18.1.1 扩展Applet或者JApplet 349
18.1.2 applet的生存周期 349
18.1.3 里程碑方法 351
18.1.4 用于绘制和事件处理的方法 352
18.1.5 用于添加UI组件的方法 354
18.1.6 applet能做什么,不能做什么 357
18.2 利用applet API的优势 357
18.2.1 查找和加载数据文件 358
18.2.2 显示简短状态字符串 359
18.2.3 在浏览器中显示文档 359
18.2.4 向其他applet发送消息 360
18.2.5 播放声音 363
18.2.6 定义和使用applet参数 365
18.2.7 使用APPLET标记 367
18.3 编写applet时的考虑事项 370
18.3.1 安全限制 370
18.3.2 创建用户界面 371
18.3.3 获得系统属性 373
18.3.4 applet中的线程 374
18.3.5 处理服务器端应用程序 376
18.4 完成applet 378
18.4.1 发布applet前的工作 378
18.4.2 圆满完成的applet 379
18.5 部署applet 380
18.5.1 一般的部署考虑事项 380
18.5.2 使用applet标记 380
18.5.3 使用object标记 380
18.5.4 使用embed标记 381
18.5.5 在混合浏览器环境中部署applet 382
18.6 解决常见的applet问题 383
问题和练习:Java applet 384
附录A java语言关键字 385
附录B java编程语言认证考试的准备 386
索引 394