Java完全参考手册(第8版)

Java完全参考手册(第8版)"

作者:HerbertSchildt著王德才吴明飞唐业军译
ISBN:9787302300830
定价:¥128
字数:千字
页数:
出版时间:2012.09.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

在《Java完全参考手册(第8版)》中,编程畅销书作者Herb Schildt向您展示了开发、编译、调试以及运行Java程序所需要掌握的全部知识。本书内容丰富,针对Java SE 7进行了全面更新,涵盖了Java语言的方方面面,包括语法、关键字以及基本的编程原则。此外,本书还介绍了Java API库的关键元素,分析了Java Bean、servlet、applet以及Swing,并通过真实的案例演示了Java在编程中的实际应用。在讲解的过程中,书中贯穿了Java SE 7的最新特性,例如带资源的try语句、在switch语句中使用字符串、使用菱形运算符“<>”的类型推断功能、NIO.2输入输出系统以及Fork/Join Framework。

前言

  

 前    言

  

  

  Java是当今世界最重要、也是使用最广泛的计算机语言之一。而且,在多年之前它就已经拥有这一荣誉。与其他一些计算机语言随着时间的流逝、影响也逐渐减弱不同,Java随着时间的推移反而变得更加强大。从首次发布开始,Java就跃到了Internet编程的前沿。后续的每一个版本都进一步巩固了这一地位。如今,Java依然是开发基于Web的应用程序的最佳选择。此外,Java还是智能手机变革的推手,Android编程采用的就是Java语言。在现实世界中,很多应用都是使用Java开发的,Java真的是非常重要!

  Java成功的一个关键原因是它的敏捷性。自从最初的1.0版发布以来,Java不断地进行完善以适应编程环境和开发人员编程方式的变化。最重要的是,Java不仅仅是在跟随潮流,更是在帮助创造潮流。Java能够适应计算机世界快速变化的能力,是它一直并且仍将如此成功的关键因素。

  本书自从1996年首次出版以来,已经经历了7次改版,每次改版都反映了Java的不断演化进程。这是本书的第8版,并且已经针对Java SE 7进行了升级。因此,本版包含了大量新的内容。例如,包含了Project Coin语言改进、扩展的NIO(NIO.2)以及Fork/Join框架。总体而言,对新特性的讨论被集成到已有的章节中。然而,本书的整体结构保持不变。这意味着如果您熟悉本书的以前版本,那么阅读本版本会感觉很自然。

一本适合所有编程人员的书

  本书面向所有开发人员,不管是初学者还是有经验的编程人员。初学者将从本书中发现每个主题的详细讨论,以及许多特别有帮助的例子。而对Java更高级特性和库的深入讨论,将会吸引有经验的编程人员。无论是对于初学者还是有经验的编程人员,本书都提供了持久的资源和方便实用的参考。

本书内容

  本书是对Java语言的全面指导,描述了它的语法、关键字以及基本的编程原则,另外还介绍了Java API库的重要部分。本书分为4部分,每部分关注Java开发环境的不同方面。

  第Ⅰ部分是对Java语言的深入辅导。该部分从基础知识开始讲解,包括数据类型、运算符、控制语句以及类等。然后本部分介绍继承、包、接口、异常处理以及多线程。本部分的最后几章介绍注解、枚举、自动装箱以及泛型等内容。本部分还介绍了I/O以及applet。

  第Ⅱ部分介绍Java标准API库的关键内容。本部分的主题包括字符串、I/O、网络、标准实用工具、集合框架、applet、基于GUI的控件、图像以及并发编程(包括新的Fork/Join框架)等。

  第Ⅲ部分分析三个重要的Java技术:Java Bean、servlet和Swing。

  第Ⅳ部分包含两章,这两章展示了几个实际的Java程序。本部分的第33章开发了几个执行各种流行金融计算的applet,如定期还贷、获得预期养老金的最小投资额等。本章还介绍如何将这些applet转换成servlet。本部分的第34章开发了一个用于监控文件下载过程的下载管理器,其功能包括启动、停止和恢复传输。这两章都改编自我的著作The Art Of Java,本书由我和James Holmes合著。

不要忘记:Web上的代码

  请记住,本书中全部示例程序的源代码都可以从www.oraclepressbooks.com上免费下载。

致  谢

  在此我要特别感谢Patrick Naughton、Joe O’Neil、James Holmes和Danny Coward。

  Patrick Naughton是Java语言的创立者之一,他还帮助我编写了本书的第1版。例如,本书第19、20和25章的大部分材料最初都是由Patrick提供的,他还为本书做出了其他许多贡献。他的洞察力、专业知识和活力都对本书的成功付梓贡献极大。

  在准备本书的第2版和第3版的过程中,Joe O’Neil为目前本书第28、29、31和32章的内容提供了原始素材。Joe对我的好几本书都有帮助,并且他提供的帮助一直都是最高质量的。

  James Holmes提供了第34章的内容。James是一位卓越的程序员和作者,他和我合著了The Art of Java一书,他还是Struts:The Complete Reference的作者以及JSF:The Complete Reference的合著者之一。

  Danny Coward是本书第8版的技术编辑。他的忠告、洞察力和建议都有巨大的价值,对此表示非常感谢。

如何进一步学习

  《Java完全参考手册(第8版)》开启了Herb Schildt编程图书系列的大门。下面是其他一些您可能感兴趣的图书。

  

  要进一步学些Java编程,我们推荐下列书籍:

  Herb Schildt’s Java Programming Cookbook

  Java:A Beginner’s Guide

  Swing:A Beginner’s Guide

  The Art of Java

  

  要学习C++,您将会发现下列书籍特别有用:

  C++:The Complete Reference

  Herb Schildt’s C++ Programming Cookbook

  C++:A Beginner’s Guide

  The Art of C++

  C++ From the Ground Up

  STL Programming From the Ground Up

  

  要学习C#,我们建议阅读下列图书:

  C#:The Complete Reference

  C#:A Beginner’s Guide

  

  要学习C语言,下面这本书您可能会感兴趣:

  C:The Complete Reference

  

  

  

目录

目    录

 

第Ⅰ部分  Java语言

第1章  Java的历史和演变 3

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  可移植性 9

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  文化革新 15

第2章  Java综述 17

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  两种控制语句 28

2.4.1  if语句 28

2.4.2  for循环 29

2.5  使用代码块 30

2.6  词汇问题 32

2.6.1  空白符 32

2.6.2  标识符 32

2.6.3  字面值 32

2.6.4  注释 32

2.6.5  分隔符 33

2.6.6  Java关键字 33

2.7  Java类库 34

第3章  数据类型、变量和数组 35

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  布尔型字面值 44

3.7.4  字符型字面值 44

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的自动类型转换 49

3.9.2  强制转换不兼容的类型 49

3.10  表达式中的自动类型提升 50

3.11  数组 52

3.11.1  一维数组 52

3.11.2  多维数组 54

3.11.3  另一种数组声明语法 58

3.12  关于字符串的一些说明 59

3.13  向C/C++程序员提供指针

方面的注解 60

第4章  运算符 61

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  位逻辑运算符 68

4.2.2  左移 70

4.2.3  右移 71

4.2.4  无符号右移 73

4.2.5  位运算符与赋值的组合 74

4.3  关系运算符 75

4.4  布尔逻辑运算符 76

4.5  赋值运算符 78

4.6  “?”运算符 78

4.7  运算符的优先级 79

4.8  使用圆括号 80

第5章  控制语句 83

5.1  Java的选择语句 83

5.1.1  if语句 84

5.1.2  switch语句 87

5.2  迭代语句 91

5.2.1  while语句 92

5.2.2  do-while语句 93

5.2.3  for语句 96

5.2.4  for循环的for-each版本 100

5.2.5  嵌套的循环 105

5.3  跳转语句 106

5.3.1  使用break语句 106

5.3.2  使用continue语句 110

5.3.3  return语句 111

第6章  类 113

6.1  类的基础知识 114

6.1.1  类的一般形式 114

6.1.2  一个简单的类 115

6.2  声明对象 117

6.3  为对象引用变量赋值 119

6.4  方法 120

6.4.1  为Box类添加方法 120

6.4.2  返回值 122

6.4.3  添加带参数的方法 124

6.5  构造函数 126

6.6  this关键字 129

6.7  垃圾回收 130

6.8  finalize()方法 130

6.9  堆栈类 131

第7章  方法和类的深入分析 135

7.1  重载方法 135

7.2  将对象用作参数 140

7.3  参数传递的深入分析 143

7.4  返回对象 145

7.5  递归 146

7.6  访问控制 148

7.7  理解static 151

7.8  final介绍 153

7.9  重新审视数组 154

7.10  嵌套类和内部类 156

7.11  String类介绍 158

7.12  使用命令行参数 161

7.13  varargs:可变长度参数 162

7.13.1  重载varargs方法 165

7.13.2  varargs方法与模糊性 166

第8章  继承 169

8.1  继承的基础知识 169

8.1.1  成员访问与继承 171

8.1.2  一个更实际的例子 172

8.1.3  超类变量可以引用子类

对象 174

8.2  使用super关键字 175

8.2.1  使用super调用超类的

构造函数 176

8.2.2  super的另一种用法 179

8.3  创建多级继承层次 180

8.4  构造函数的调用时机 183

8.5  方法重写 184

8.6  动态方法调度 187

8.6.1  重写方法的目的 189

8.6.2  应用方法重写 189

8.7  使用抽象类 191

8.8  在继承中使用final关键字 193

8.8.1  使用final关键字阻止

重写 194

8.8.2  使用final关键字阻止

继承 194

8.9  Object类 195

第9章  包和接口 197

9.1  包 198

9.1.1  定义包 198

9.1.2  包查找与CLASSPATH 199

9.1.3  一个简短的包示例 199

9.2  访问保护 200

9.3  导入包 204

9.4  接口 206

9.4.1  定义接口 207

9.4.2  实现接口 207

9.4.3  嵌套接口 210

9.4.4  应用接口 211

9.4.5  接口中的变量 214

9.4.6  接口可以扩展 216

第10章  异常处理 219

10.1  异常处理的基础知识 219

10.2  异常类型 220

10.3  未捕获的异常 221

10.4  使用try和catch 222

10.5  多条catch子句 224

10.6  嵌套的try语句 226

10.7  throw 228

10.8  throws 229

10.9  finally 230

10.10  Java的内置异常 232

10.11  创建自己的异常子类 233

10.12  链式异常 235

10.13  JDK 7中3个新的

异常特性 237

10.14  使用异常 238

第11章  多线程编程 239

11.1  Java线程模型 240

11.1.1  线程优先级 241

11.1.2  同步 242

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()方法 250

11.6  线程优先级 252

11.7  同步 253

11.7.1  使用同步方法 253

11.7.2  synchronized语句 255

11.8  线程间通信 257

11.9  挂起、恢复与停止线程 263

11.9.1  Java 1.1以前使用的挂起、

恢复和停止线程的方式 264

11.9.2  挂起、恢复与停止线程的

现代方式 266

11.10  获取线程的状态 268

11.11  使用多线程 270

第12章  枚举、自动装箱与注解

(元数据) 271

12.1  枚举 271

12.1.1  枚举的基础知识 272

12.1.2  values()和valueOf()

方法 274

12.1.3  Java枚举是类类型 275

12.1.4  枚举继承自Enum类 278

12.1.5  另一个枚举示例 279

12.2  类型封装器 281

12.2.1  Character封装器 281

12.2.2  Boolean封装器 282

12.2.3  数值类型封装器 282

12.3  自动装箱 283

12.3.1  自动装箱与方法 284

12.3.2  表达式中发生的

自动装箱/拆箱 285

12.3.3  布尔型和字符型数值的

自动装箱/拆箱 287

12.3.4  自动装箱/拆箱有助于

防止错误 287

12.3.5  一些警告 288

12.4  注解(元数据) 289

12.4.1  注解的基础知识 289

12.4.2  指定保留策略 289

12.4.3  在运行时使用反射获取

注解 290

12.4.4  AnnotatedElement接口 296

12.4.5  使用默认值 296

12.4.6  标记注解 297

12.4.7  单成员注解 298

12.4.8  内置注解 300

12.4.9  一些限制 301

第13章  I/O、applet以及其他主题 303

13.1  I/O的基础知识 304

13.1.1  流 304

13.1.2  字节流和字符流 304

13.1.3  预定义流 306

13.2  读取控制台输入 307

13.2.1  读取字符 307

13.2.2  读取字符串 308

13.3  向控制台写输出 310

13.4  PrintWriter类 311

13.5  读/写文件 312

13.6  自动关闭文件 318

13.7  applet的基础知识 321

13.8  transient和volatile修饰符 324

13.9  使用instanceof运算符 324

13.10  strictfp 327

13.11  本地方法 327

13.12  使用断言 331

13.13  静态导入 334

13.14  通过this()调用重载的

构造函数 336

第14章  泛型 339

14.1  什么是泛型 340

14.2  一个简单的泛型示例 340

14.2.1  泛型只使用对象 344

14.2.2  基于不同类型参数的泛型类型是不同的 344

14.2.3  泛型提升类型安全性的原理 344

14.3  带两个类型参数的泛型类 347

14.4  泛型类的一般形式 348

14.5  有界类型 349

14.6  使用通配符参数 351

14.7  创建泛型方法 359

14.8  泛型接口 362

14.9  原始类型与遗留代码 364

14.10  泛型类层次 367

14.10.1  使用泛型超类 367

14.10.2  泛型子类 369

14.10.3  泛型层次中的运行时类型比较 370

14.10.4  强制转换 373

14.10.5  重写泛型类的方法 373

14.11  泛型的类型推断 374

14.12  擦拭 376

14.13  模糊性错误 379

14.14  使用泛型的一些限制 381

14.14.1  不能实例化类型参数 381

14.14.2  对静态成员的一些限制 381

14.14.3  对泛型数组的一些限制 382

14.14.4  对泛型异常的限制 383

第Ⅱ部分  Java库

第15章  字符串处理 387

15.1  String类的构造函数 388

15.2  字符串的长度 390

15.3  特殊的字符串操作 391

15.3.1  字符串字面值 391

15.3.2  字符串连接 391

15.3.3  字符串和其他数据类型的连接 392

15.3.4  字符串转换和toString()方法 393

15.4  提取字符 394

15.4.1  charAt() 394

15.4.2  getChars() 394

15.4.3  getBytes() 395

15.4.4  toCharArray() 395

15.5  比较字符串 395

15.5.1  equals()和equalsIgnoreCase() 395

15.5.2  regionMatches() 396

15.5.3  startsWith()和endsWith() 397

15.5.4  equals()与== 397

15.5.5  compareTo() 398

15.6  查找字符串 399

15.7  修改字符串 401

15.7.1  substring() 401

15.7.2  concat() 402

15.7.3  replace() 402

15.7.4  trim() 403

15.8  使用valueOf()转换数据 404

15.9  改变字符串中字符的大小写 404

15.10  其他String方法 405

15.11  StringBuffer类 406

15.11.1  StringBuffer类的构造函数 406

15.11.2  length()与capacity() 407

15.11.3  ensureCapacity() 407

15.11.4  setLength() 408

15.11.5  charAt()与setCharAt() 408

15.11.6  getChars() 409

15.11.7  append() 409

15.11.8  insert() 409

15.11.9  reverse() 410

15.11.10  delete()与deleteCharAt() 411

15.11.11  replace() 411

15.11.12  substring() 412

15.11.13  其他StringBuffer方法 412

15.12  StringBuilder类 413

第16章  探究java.lang 415

16.1  基本类型封装器 416

16.1.1  Number 416

16.1.2  Double与Float 417

16.1.3  理解isInfinite()与isNaN() 420

16.1.4  Byte、Short、Integer和Long 420

16.1.5  Character 427

16.1.6  对Unicode代码点的附加支持 430

16.1.7  Boolean 431

16.2  Void类 432

16.3  Process类 432

16.4  Runtime类 433

16.4.1  内存管理 434

16.4.2  执行其他程序 435

16.5  ProcessBuilder类 436

16.6  System类 439

16.6.1  使用currentTimeMillis()计时程序的执行 440

16.6.2  使用arraycopy() 441

16.6.3  环境属性 442

16.7  Object类 442

16.8  使用clone()方法和Cloneable接口 443

16.9  Class类 445

16.10  ClassLoader类 448

16.11  Math类 448

16.11.1  三角函数 448

16.11.2  指数函数 449

16.11.3  舍入函数 449

16.11.4  其他数学方法 450

16.12  StrictMath类 452

16.13  Compiler类 452

16.14  Thread类、ThreadGroup类和Runnable接口 452

16.14.1  Runnable接口 452

16.14.2  Thread类 452

16.14.3  ThreadGroup类 454

16.15  ThreadLocal和InheritableThreadLocal类 459

16.16  Package类 459

16.17  RuntimePermission类 460

16.18  Throwable类 460

16.19  SecurityManager类 460

16.20  StackTraceElement类 460

16.21  Enum类 461

16.22  ClassValue类 462

16.23  CharSequence接口 462

16.24  Comparable接口 462

16.25  Appendable接口 463

16.26  Iterable接口 463

16.27  Readable接口 464

16.28  AutoCloseable接口 464

16.29  Thread.UncaughtException-Handler接口 464

16.30  java.lang子包 464

16.30.1  java.lang.annotation 465

16.30.2  java.lang.instrument 465

16.30.3  java.lang.invoke 465

16.30.4  java.lang.management 465

16.30.5  java.lang.ref 465

16.30.6  java.lang.reflect 465

第17章  java.util第1部分:集合框架 467

17.1  集合概述 468

17.2  JDK 5对集合框架的修改 469

17.2.1  泛型从根本上改变了集合框架 470

17.2.2  自动装箱使得使用基本类型更加容易 470

17.2.3  for-each风格的循环 470

17.3  集合接口 470

17.3.1  Collection接口 471

17.3.2  List接口 473

17.3.3  Set接口 474

17.3.4  SortedSet接口 474

17.3.5  NavigableSet接口 475

17.3.6  Queue接口 476

17.3.7  Deque接口 477

17.4  集合类 479

17.4.1  ArrayList类 480

17.4.2  LinkedList类 483

17.4.3  HashSet类 484

17.4.4  LinkedHashSet类 486

17.4.5  TreeSet类 486

17.4.6  PriorityQueue类 487

17.4.7  ArrayDeque类 488

17.4.8  EnumSet类 489

17.5  通过迭代器访问集合 490

17.5.1  使用迭代器 491

17.5.2  使用for-each循环替代迭代器 493

17.6  在集合中存储用户定义的类 494

17.7  RandomAccess接口 495

17.8  使用映射 496

17.8.1  映射接口 496

17.8.2  映射类 500

17.9  比较器 505

17.10  集合算法 508

17.11  Arrays类 513

17.12  需要泛型集合的原因 518

17.13  遗留的类和接口 521

17.13.1  Enumeration接口 521

17.13.2  Vector类 521

17.13.3  Stack类 525

17.13.4  Dictionary类 527

17.13.5  Hashtable类 528

17.13.6  Properties类 532

17.13.7  使用store()和load() 535

17.14  集合小结 537

第18章  java.util第2部分:更多实用工具类 539

18.1  StringTokenizer类 539

18.2  BitSet类 541

18.3  Date类 544

18.4  Calendar类 546

18.5  GregorianCalendar类 549

18.6  TimeZone类 550

18.7  SimpleTimeZone类 551

18.8  Locale类 552

18.9  Random类 554

18.10  Observable类 555

18.10.1  Observer接口 556

18.10.2  Observer示例 556

18.11  Timer和TimerTask类 559

18.12  Currency类 561

18.13  Formatter类 562

18.13.1  Formatter类的构造函数 563

18.13.2  Formatter类的方法 563

18.13.3  格式化的基础知识 564

18.13.4  格式化字符串和字符 566

18.13.5  格式化数字 566

18.13.6  格式化时间和日期 567

18.13.7  %n和%%说明符 569

18.13.8  指定最小字段宽度 569

18.13.9  指定精度 571

18.13.10  使用格式标志 572

18.13.11  对齐输出 572

18.13.12  空格、“+”、“0”以及“(”标志 573

18.13.13  逗号标志 574

18.13.14  “#:”标志 574

18.13.15  大写选项 574

18.13.16  使用参数索引 575

18.13.17  关闭Formatter对象 577

18.13.18  printf()方法 577

18.14  Scanner类 577

18.14.1  Scanner类的构造函数 577

18.14.2  扫描的基础知识 578

18.14.3  一些Scanner示例 581

18.14.4  设置定界符 585

18.14.5  其他Scanner特性 587

18.15  ResourceBundle、ListResourceBundle和PropertyResourceBundle类 588

18.16  其他实用工具类和接口 592

18.17  java.util子包 593

18.17.1  java.util.concurrent、

java.util.concurrent.atomic和java.util.concurrent.locks 593

18.17.2  java.util.jar 593

18.17.3  java.util.logging 593

18.17.4  java.util.prefs 593

18.17.5  java.util.regex 594

18.17.6  java.util.spi 594

18.17.7  java.util.zip 594

第19章  输入/输出:探究Java.io 595

19.1  I/O类和接口 596

19.2  File类 597

19.2.1   600

19.2.2  使用FilenameFilter接口 601

19.2.3  listFiles()方法 602

19.2.4  创建 602

19.3  AutoCloseable、Closeable和Flushable接口 602

19.4  I/O异常 603

19.5  关闭流的两种方式 604

19.6  流类 605

19.7  字节流 605

19.7.1  InputStream类 605

19.7.2  OutputStream类 606

19.7.3  FileInputStream类 606

19.7.4  FileOutputStream类 609

19.7.5  ByteArrayInputStream类 611

19.7.6  ByteArrayOutputStream类 613

19.7.7  过滤的字节流 614

19.7.8  缓存的字节流 614

19.7.9  SequenceInputStream类 618

19.7.10  PrintStream类 620

19.7.11  DataOutputStream和DataInputStream类 622

19.7.12  RandomAccessFile类 624

19.8  字符流 625

19.8.1  Reader类 625

19.8.2  Writer类 626

19.8.3  FileReader类 627

19.8.4  FileWriter类 627

19.8.5  CharArrayReader类 628

19.8.6  CharArrayWriter类 630

19.8.7  BufferedReader类 631

19.8.8  BufferedWriter类 633

19.8.9  PushbackReader类 633

19.8.10  PrintWriter类 634

19.9  Console类 635

19.10  串行化 637

19.10.1  Serializable接口 637

19.10.2  Externalizable接口 637

19.10.3  ObjectOutput接口 638

19.10.4  ObjectOutputStream类 638

19.10.5  ObjectInput接口 639

19.10.6  ObjectInputStream类 640

19.10.7  串行化示例 641

19.11  流的优点 642

第20章  探究NIO 643

20.1  NIO类 643

20.2  NIO的基础知识 644

20.2.1  缓存 644

20.2.2  通道 646

20.2.3  字符集和选择器 647

20.3  JDK 7对NIO的增强 648

20.3.1  Path接口 648

20.3.2  Files类 649

20.3.3  Path接口 651

20.3.4  文件属性接口 652

20.3.5  FileSystem、FileSystems和FileStore类 654

20.4  使用NIO系统 654

20.4.1  为基于通道的I/O使用NIO 654

20.4.2  为基于流的I/O使用NIO 663

20.4.3  为路径和文件系统操作使用NIO 666

20.5  JDK 7之前基于通道的例子 674

20.5.1  读文件(JDK 7之前) 674

20.5.2  写文件(JDK 7之前) 677

第21章  联网 681

21.1  联网的基础知识 682

21.2  联网类和接口 683

21.3  InetAddress类 683

21.3.1  工厂方法 684

21.3.2  实例方法 685

21.4  Inet4Address类和Inet6Address类 685

21.5  TCP/IP客户端套接字 686

21.6  URL类 689

21.7  URLConnection类 691

21.8  HttpURLConnection类 694

21.9  URI类 696

21.10  cookie 696

21.11  TCP/IP服务器套接字 696

21.12  数据报 697

21.12.1  DatagramSocket类 697

21.12.2  DatagramPacket类 698

21.12.3  数据报示例 699

第22章  Applet类 701

22.1  applet的两种类型 701

22.2  applet的基础知识 702

22.3  applet的架构 704

22.4  applet的骨架 705

22.4.1  applet的初始化和终止 706

22.4.2  重写update()方法 707

22.5  简单的applet显示方法 707

22.6  请求重画 709

22.7  使用状态栏窗口 712

22.8  HTML APPLET标签 713

22.9  向applet传递参数 714

22.10  getDocumentBase()和getCodeBase() 718

22.11  AppletContext接口和showDocument()方法 718

22.12  AudioClip接口 720

22.13  AppletStub接口 720

22.14  向控制台输出 720

第23章  事件处理 721

23.1  两种事件处理机制 722

23.2  委托事件模型 722

23.2.1  事件 722

23.2.2  事件源 723

23.2.3  事件监听器 723

23.3  事件类 724

23.3.1  ActionEvent类 725

23.3.2  AdjustmentEvent类 726

23.3.3  ComponentEvent类 726

23.3.4  ContainerEvent类 727

23.3.5  FocusEvent类 727

23.3.6  InputEvent类 728

23.3.7  ItemEvent类 729

23.3.8  KeyEvent类 730

23.3.9  MouseEvent类 730

23.3.10  MouseWheelEvent类 732

23.3.11  TextEvent类 733

23.3.12  WindowEvent类 733

23.4  事件源 734

23.5  事件监听器接口 735

23.5.1  ActionListener接口 736

23.5.2  AdjustmentListener接口 736

23.5.3  ComponentListener接口 736

23.5.4  ContainerListener接口 736

23.5.5  FocusListener接口 736

23.5.6  ItemListener接口 736

23.5.7  KeyListener接口 737

23.5.8  MouseListener接口 737

23.5.9  MouseMotionListener接口 737

23.5.10  MouseWheelListener接口 737

23.5.11  TextListener接口 738

23.5.12  WindowFocusListener接口 738

23.5.13  WindowListener接口 738

23.6  使用委托事件模型 738

23.6.1  处理鼠标事件 739

23.6.2  处理键盘事件 741

23.7  适配器类 744

23.8  内部类 746

第24章  AWT介绍:使用窗口、图形和文本 749

24.1  AWT类 750

24.2  窗口基本元素 752

24.2.1  Component类 752

24.2.2  Container类 753

24.2.3  Panel类 753

24.2.4  Window类 753

24.2.5  Frame类 753

24.2.6  Canvas类 753

24.3  使用框架窗口 753

24.3.1  设置窗口的尺寸 754

24.3.2  隐藏和显示窗口 754

24.3.3  设置窗口的标题 754

24.3.4  关闭框架窗口 754

24.4  在applet中创建框架窗口 755

24.5  创建基于窗口的程序 761

24.6  在窗口中显示信息 763

24.7  使用图形 763

24.7.1  绘制直线 764

24.7.2  绘制矩形 765

24.7.3  绘制椭圆和圆 765

24.7.4  绘制弧形 766

24.7.5  绘制多边形 767

24.7.6  改变图形的大小 767

24.8  使用颜色 768

24.8.1  Color类的方法 769

24.8.2  设置当前图形的颜色 770

24.8.3  一个演示颜色的applet 770

24.9  设置绘图模式 771

24.10  使用字体 773

24.10.1  确定可用字体 774

24.10.2  创建和选择字体 775

24.10.3  获取字体信息 777

24.11  使用FontMetrics管理文本输出 778

24.11.1  显示多行文本 779

24.11.2  居中显示文本 781

24.11.3  对齐多行文本 782

第25章  使用AWT控件、布局管理器和菜单 787

25.1  控件的基础知识 788

25.1.1  添加和移除控件 788

25.1.2  响应控件 788

25.1.3  HeadlessException异常 788

25.2  使用标签 789

25.3  使用命令按钮 790

25.4  使用复选框 793

25.5  使用复选框组 795

25.6  使用下拉列表 796

25.7  使用列表框 798

25.8  管理滚动条 801

25.9  使用TextField 804

25.10  使用TextArea 807

25.11  理解布局管理器 808

25.11.1  FlowLayout布局管理器 809

25.11.2  BorderLayout布局管理器 811

25.11.3  使用Insets 812

25.11.4  GridLayout布局管理器 814

25.11.5  CardLayout布局管理器 815

25.11.6  GridBagLayout布局管理器 818

25.12  菜单栏和菜单 823

25.13  对话框 829

25.14  FileDialog类 834

25.15  扩展AWT控件以处理事件 835

25.15.1  扩展按钮 836

25.15.2  扩展复选框 837

25.15.3  扩展复选框组 838

25.15.4  扩展下拉列表 839

25.15.5  扩展列表框 840

25.15.6  扩展滚动条 841

25.16  关于重载paint()方法 842

第26章  图像 843

26.1  文件格式 844

26.2  图像基础:创建、加载与显示 844

26.2.1  创建Image对象 844

26.2.2  加载图像 845

26.2.3  显示图像 845

26.3  ImageObserver接口 846

26.4  双缓存 848

26.5  MediaTracker类 850

26.6  ImageProducer接口 853

26.7  ImageConsumer接口 855

26.8  ImageFilter类 857

26.8.1  CropImageFilter类 858

26.8.2  RGBImageFilter类 860

26.9  单元格动画 870

26.10  其他图像类 873

第27章  并发实用工具 875

27.1  并发API包 876

27.1.1  java.util.concurrent包 876

27.1.2  java.util.concurrent.atomic包 877

27.1.3  java.util.concurrent.locks包 877

27.2  使用同步对象 877

27.2.1  Semaphore类 878

27.2.2  CountDownLatch类 884

27.2.3  CyclicBarrier类 885

27.2.4  Exchanger类 888

27.2.5  Phaser类 890

27.3  使用执行器 898

27.3.1  一个简单的执行器示例 898

27.3.2  使用Callable和Future接口 900

27.4  TimeUnit枚举 903

27.5  并发集合 904

27.6  锁 905

27.7  原子操作 908

27.8  通过Fork/Join Framework进行并行编程 909

27.8.1  主要的Fork/Join类 909

27.8.2  分而治之的策略 912

27.8.3  一个简单的Fork/Join示例 913

27.8.4  理解并行级别带来的影响 915

27.8.5  一个使用RecursiveTask<V>的例子 918

27.8.6  异步执行任务 921

27.8.7  取消任务 921

27.8.8  确定任务的完成状态 921

27.8.9  重新启动任务 922

27.8.10  深入研究 922

27.8.11  关于Fork/Join Framework的一些提示 923

27.9  并发实用工具与Java传统方式的比较 924

第28章  正则表达式和其他包 925

28.1  核心Java API包 926

28.2  正则表达式处理 927

28.2.1  Pattern类 928

28.2.2  Matcher类 928

28.2.3  正则表达式的语法 929

28.2.4  演示模式匹配 929

28.2.5  模式匹配的两个选项 935

28.2.6  探究正则表达式 935

28.3  反射 936

28.4  远程方法调用 939

28.5  文本格式化 943

28.5.1  DateFormat类 943

28.5.2  SimpleDateFormat类 945

第Ⅲ部分  使用Java开发软件

第29章 Java Bean 951

29.1  Java Bean是什么 952

29.2  Java Bean的优势 952

29.3  反省 952

29.3.1  属性的设计模式 952

29.3.2  事件的设计模式 954

29.3.3  方法与设计模式 954

29.3.4  使用BeanInfo接口 955

29.4  绑定属性与约束属性 955

29.5  持久性 955

29.6  定制器 956

29.7  Java Bean API 956

29.7.1  Introspector类 958

29.7.2  PropertyDescriptor类 958

29.7.3  EventSetDescriptor类 958

29.7.4  MethodDescriptor类 958

29.8  一个Bean示例 958

第30章  Swing简介 963

30.1  Swing的起源 964

30.2  Swing以AWT为基础 964

30.3  两个关键的Swing特性 964

30.3.1  Swing组件是轻量级的 964

30.3.2  Swing支持可插入外观 965

30.4  MVC连接 965

30.5  组件与容器 966

30.5.1  组件 966

30.5.2  容器 967

30.5.3  顶级容器窗格 967

30.6  Swing包 967

30.7  一个简单的Swing应用程序 968

30.8  事件处理 972

30.9  创建Swing applet 975

30.10  在Swing中绘图 977

30.10.1  绘图的基础知识 977

30.10.2  计算可绘制区域 978

30.10.3  一个绘图示例 979

第31章  探究Swing 983

31.1  JLabel与ImageIcon 984

31.2  JTextField 985

31.3  Swing按钮 987

31.3.1  JButton 988

31.3.2  JToggleButton 990

31.3.3  复选框 992

31.3.4  单选按钮 994

31.4  JTabbedPane 996

31.5  JScrollPane 998

31.6  JList 1000

31.7  JComboBox 1003

31.8  树 1006

31.9  JTable 1009

31.10  继续研究Swing 1011

第32章  servlet 1013

32.1  背景 1013

32.2  sevelet的生命周期 1014

32.3  Servlet开发选项 1015

32.4  使用Tomcat 1015

32.5  一个简单的servlet 1017

32.5.1  创建和编译servlet源代码 1017

32.5.2  启动Tomcat 1018

32.5.3  启动Web浏览器并请求servlet 1018

32.6  servlet API 1018

32.7  javax.servlet包 1018

32.7.1  Servlet接口 1019

32.7.2  ServletConfig接口 1020

32.7.3  ServletContext接口 1020

32.7.4  ServletRequest接口 1020

32.7.5  ServletResponse接口 1021

32.7.6  GenericServlet类 1022

32.7.7  ServletInputStream类 1022

32.7.8  ServletOutputStream类 1022

32.7.9  servlet异常类 1022

32.8  读取servlet参数 1022

32.9  javax.servlet.http包 1024

32.9.1  HttpServletRequest接口 1025

32.9.2  HttpServletResponse接口 1025

32.9.3  HttpSession接口 1026

32.9.4  HttpSessionBindingListener接口 1027

32.9.5  Cookie类 1027

32.9.6  HttpServlet类 1028

32.9.7  HttpSessionEvent类 1029

32.9.8  HttpSessionBindingEvent类 1030

32.10  处理HTTP请求和响应 1030

32.10.1  处理HTTP GET请求 1030

32.10.2  处理HTTP POST请求 1032

32.11  使用cookie 1033

32.12  会话跟踪 1035

第Ⅳ部分  Java应用

第33章  applet和servlet在金融领域的应用 1039

33.1  计算贷款的还款额 1040

33.1.1  RegPay中声明的变量 1044

33.1.2  init()方法 1044

33.1.3  makeGUI()方法 1044

33.1.4  actionPerformed()方法 1047

33.1.5  compute()方法 1048

33.2  计算投资的未来收益 1048

33.3  计算为达到未来收益所需要的初始投资额 1052

33.4  计算为拿到期望的养老金所需要的初始投资额 1056

33.5  计算给定投资的最大收益 1060

33.6  计算贷款余额 1064

33.7  创建应用于金融领域的servlet 1068

33.7.1  将RegPay applet转换为servlet 1069

33.7.2  RegPayS servlet 1069

33.8  一些尝试 1072

第34章  使用Java创建下载管理器 1073

34.1  理解Internet下载 1074

34.2  下载管理器概述 1074

34.3  DownLoad类 1075

34.3.1  DownLoad类的变量 1079

34.3.2  DownLoad类的构造函数 1079

34.3.3  download()方法 1079

34.3.4  run()方法 1079

34.3.5  stateChanged()方法 1083

34.3.6  动作和访问器方法 1083

34.4  ProgressRenderer类 1083

34.5  DownloadsTableModel类 1084

34.5.1  addDownload()方法 1086

34.5.2  clearDownload()方法 1087

34.5.3  getColumnClass()方法 1087

34.5.4  getValueAt()方法 1087

34.5.5  update()方法 1088

34.6  DownloadManager类 1088

34.6.1  DownloadManager类的变量 1094

34.6.2  DownloadManager类的构造函数 1095

34.6.3  verifyUrl()方法 1095

34.6.4  tableSelectionChanged()方法 1096

34.6.5  updateButtons()方法 1096

34.6.6  处理动作事件 1097

34.7  编译和运行下载管理器 1098

34.8  进一步完善下载管理器 1098

附录  使用Java的文档注释 1099

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个