重磅推荐
【编辑推荐】
图书特色:关键技能与概念:每章开头列出要介绍的技能和概念 专家解答:以问答形式提供附加信息和实用提示
编程练习:示范如何运用编程技能的紧贴实用的练习
自测题:每章后有一些测试题,以帮助读者扎实掌握Java技能
语法注释:示例代码中的注释阐述所演示的编程技巧


【内容简介】
针对Java SE 9做了全面细致的更新,将引导你轻松学习新的核心Java编程技能,指导你立即着手编写Java程序。《Java编程入门官方教程(第7版)》开篇讲述Java语言基础知识(如创建、编译和运行Java程序的方式),此后浓墨重彩地描述构成Java语言核心的关键字、语法和结构。*后介绍Java的一些高级特性,如多线程程序设计、泛型、lambda表达式、Swing、JavaFX、新“模块”功能以及Java*的交互式编程工具Jshell。
【作者简介】
畅销书作家Herbert Schildt是Java语言的权威,他撰写程序设计图书超过三十年,在全世界销售了数百万册,并被翻译成了多种语言。他撰写了众多关于Java的图书,包括Java: The Complete Reference、Herb Schildt’s Java Programming Cookbook、Introducing JavaFX 8 Programming和Swing: A Beginner’s Guide,还撰写了一些有关C、C 和C#方面的书籍。虽然他对计算机的方方面面都很感兴趣,但主要关注点是计算机语言。Schildt获得了伊利诺伊大学的学士和硕士学位。
【目录】

第1章 Java基础 1

1.1 Java的起源 1

1.2 Java对Internet的贡献 2

1.2.1 Java简化了基于Web的编程 3

1.2.2 Java applet 3

1.2.3 安全性 3

1.2.4 可移植性 3

1.3 Java的魔法:字节码 3

1.4 超越applet 4

1.5 Java的主要术语 4

1.6 面向对象程序设计 5

1.6.1 封装 5

1.6.2 多态性 6

1.6.3 继承 6

1.7 获得Java开发工具包 6

1.8 *个简单的程序 7

1.8.1 输入程序 7

1.8.2 编译程序 8

1.8.3 逐行分析*个程序 8

1.9 处理语法错误 9

1.10 第二个简单程序 10

1.11 另一种数据类型 11

1.12 两条控制语句 13

1.12.1 if语句 13

1.12.2 for循环语句 14

1.13 创建代码块 15

1.14 分号和定位 16

1.15 缩进原则 16

1.16 Java关键字 18

1.17 Java标识符 18

1.18 Java类库 19

1.19 自测题 19

第2章 数据类型与运算符 21

2.1 数据类型为什么重要 21

2.2 Java的基本类型 21

2.2.1 整数类型 22

2.2.2 浮点型 23

2.2.3 字符型 23

2.2.4 布尔类型 24

2.3 字面值 26

2.3.1 十六进制、八进制和二进制
字面值 26

2.3.2 字符转义序列 26

2.3.3 字符串字面值 27

2.4 变量详解 28

2.4.1 初始化变量 28

2.4.2 动态初始化 28

2.5 变量的作用域和生命期 28

2.6 运算符 30

2.7 算术运算符 30

2.8 关系运算符和逻辑运算符 32

2.9 短路逻辑运算符 33

2.10 赋值运算符 34

2.11 速记赋值 34

2.12 赋值中的类型转换 35

2.13 不兼容类型的强制转换 36

2.14 运算符的优先级 37

2.15 表达式 38

2.15.1 表达式中的类型转换 38

2.15.2 间距和圆括号 40

2.16 自测题 40

第3章 程序控制语句 41

3.1 从键盘输入字符 41

3.2 if语句 42

3.2.1 嵌套if语句 43

3.2.2 if-else-if阶梯状结构 44

3.3 switch语句 44

3.4 for循环 48

3.4.1 for循环的一些变体 50

3.4.2 缺失部分要素的for循环 50

3.4.3 无限循环 51

3.4.4 没有循环体的循环 51

3.4.5 在for循环内部声明循环控制
变量 52

3.4.6 增强型for循环 52

3.5 while循环 52

3.6 do-while循环 54

3.7 使用break语句退出循环 57

3.8 将break语句作为一种goto语句使用 58

3.9 使用continue语句 61

3.10 嵌套循环 65

3.11 自测题 65

第4章 类、对象和方法 67

4.1 类的基础知识 67

4.1.1 类的基本形式 67

4.1.2 定义类 68

4.2 如何创建对象 70

4.3 引用变量和赋值 70

4.4 方法 71

4.5 从方法返回值 73

4.6 返回值 73

4.7 使用形参 75

4.8 构造函数 81

4.9 带形参的构造函数 82

4.10 深入介绍new运算符 83

4.11 垃圾回收 83

4.12 this关键字 84

4.13 自测题 85

第5章 其他数据类型与运算符 87

5.1 数组 87

5.2 多维数组 91

5.3 不规则数组 91

5.3.1 三维或更多维的数组 92

5.3.2 初始化多维数组 93

5.4 另一种声明数组的语法 93

5.5 数组引用赋值 94

5.6 使用length成员 95

5.7 for-each形式的循环 99

5.7.1 迭代多维数组 101

5.7.2 应用增强型for循环 102

5.8 字符串 102

5.8.1 构造字符串 102

5.8.2 操作字符串 103

5.8.3 字符串数组 104

5.8.4 字符串是不可变的 105

5.8.5 使用String控制switch语句 106

5.9 使用命令行实参 106

5.10 位运算符 107

5.10.1 位运算符的与、或、异或和非 108

5.10.2 移位运算符 111

5.10.3 位运算符的赋值速记符 112

5.11 ?运算符 114

5.12 自测题 115

第6章 方法和类详解 117

6.1 控制对类成员的访问 117

6.2 向方法传递对象 121

6.3 返回对象 124

6.4 方法重载 125

6.5 重载构造函数 129

6.6 递归 132

6.7 理解static关键字 134

6.8 嵌套类和内部类 138

6.9 varargs 140

6.9.1 varargs基础 141

6.9.2 重载varargs方法 143

6.9.3 varargs和歧义 144

6.10 自测题 145

第7章 继承 147

7.1 继承的基础知识 147

7.2 成员访问与继承 149

7.3 构造函数和继承 151

7.4 使用super调用超类构造函数 152

7.5 使用super访问超类成员 155

7.6 创建多级层次结构 158

7.7 何时调用构造函数 160

7.8 超类引用和子类对象 161

7.9 方法重写 164

7.10 重写的方法支持多态性 166

7.11 为何使用重写方法 167

7.12 使用抽象类 170

7.13 使用final 173

7.13.1 使用final防止重写 173

7.13.2 使用final防止继承 174

7.13.3 对数据成员使用final 174

7.14 Object类 175

7.15 自测题 175

第8章 包和接口 177

8.1 包 177

8.1.1 定义包 177

8.1.2 寻找包和CLASSPATH 178

8.1.3 一个简短的包示例 178

8.2 包和成员访问 179

8.3 理解被保护的成员 181

8.4 导入包 182

8.5 Java的类库位于包中 183

8.6 接口 184

8.7 实现接口 185

8.8 使用接口引用 187

8.9 接口中的变量 192

8.10 接口能够扩展 193

8.11 默认接口方法 193

8.11.1 默认方法的基础知识 194

8.11.2 默认方法的实际应用 195

8.11.3 多继承问题 196

8.12 在接口中使用静态方法 196

8.13 私有接口方法 197

8.14 有关包和接口的*后思考 198

8.15 自测题 198

第9章 异常处理 199

9.1 异常的层次结构 199

9.2 异常处理基础 200

9.2.1 使用关键字try和catch 200

9.2.2 一个简单的异常示例 200

9.3 未捕获异常的结果 202

9.4 使用多个catch语句 203

9.5 捕获子类异常 204

9.6 try代码块可以嵌套 205

9.7 抛出异常 206

9.8 Throwable详解 207

9.9 使用finally 208

9.10 使用throws语句 210

9.11 新增的3种异常功能 211

9.12 Java的内置异常 212

9.13 创建异常子类 213

9.14 自测题 217

第10章 使用I/O 219

10.1 Java的I/O基于流 219

10.2 字节流和字符流 219

10.3 字节流类 220

10.4 字符流类 220

10.5 预定义流 221

10.6 使用字节流 221

10.6.1 读取控制台输入 222

10.6.2 写入控制台输出 223

10.7 使用字节流读写文件 223

10.7.1 从文件输入 223

10.7.2 写入文件 226

10.8 自动关闭文件 227

10.9 读写二进制数据 229

10.10 随机访问文件 232

10.11 使用Java字符流 234

10.11.1 使用字符流的控制台输入 235

10.11.2 使用字符流的控制台输出 237

10.12 使用字符流的文件I/O 237

10.12.1 使用FileWriter 238

10.12.2 使用FileReader 238

10.13 使用Java的类型封装器转换数值
字符串 239

10.14 自测题 246

第11章 多线程程序设计 247

11.1 多线程的基础知识 247

11.2 Thread类和Runnable接口 248

11.3 创建一个线程 248

11.4 创建多个线程 255

11.5 确定线程何时结束 257

11.6 线程的优先级 259

11.7 同步 262

11.8 使用同步方法 262

11.9 同步语句 264

11.10 使用notify( )、wait( )和notifyAll( )
的线程通信 266

11.11 线程的挂起、继续执行和停止 270

11.12 自测题 274

第12章 枚举、自动装箱、静态导入和
注解 275

12.1 枚举 275

12.2 Java语言中的枚举是类类型 277

12.3 values( )和valueOf( )方法 277

12.4 构造函数、方法、实例变量和
枚举 278

12.5 枚举继承enum 279

12.6 自动装箱 284

12.7 类型封装器 284

12.8 自动装箱的基础知识 286

12.9 自动装箱和方法 286

12.10 发生在表达式中的自动装箱/自动
拆箱 287

12.11 静态导入 289

12.12 注解(元数据) 290

12.13 自测题 292

第13章 泛型 295

13.1 泛型的基础知识 295

13.2 一个简单的泛型示例 296

13.2.1 泛型只能用于引用类型 298

13.2.2 泛型类型是否相同基于其类型
实参 298

13.2.3 带有两个类型形参的泛型类 299

13.2.4 泛型类的一般形式 300

13.3 约束类型 300

13.4 使用通配符实参 302

13.5 约束通配符 304

13.6 泛型方法 306

13.7 泛型构造函数 308

13.8 泛型接口 308

13.9 原类型和遗留代码 313

13.10 使用菱形运算符进行类型推断 315

13.11 擦除特性 315

13.12 歧义错误 316

13.13 一些泛型限制 316

13.13.1 类型形参不能实例化 316

13.13.2 对静态成员的限制 317

13.13.3 泛型数组限制 317

13.13.4 泛型异常限制 318

13.14 继续学习泛型 318

13.15 自测题 318

第14章 lambda表达式和方法引用 319

14.1 lambda表达式简介 319

14.1.1 lambda表达式的基础知识 320

14.1.2 函数式接口 320

14.1.3 几个lambda表达式示例 322

14.2 块lambda表达式 325

14.3 泛型函数式接口 326

14.4 lambda表达式和变量捕获 330

14.5 从 lambda表达式中抛出异常 331

14.6 方法引用 332

14.6.1 静态方法的方法引用 332

14.6.2 实例方法的方法引用 334

14.7 构造函数引用 336

14.8 预定义的函数式接口 338

14.9 自测题 339

第15章 模块 341

15.1 模块基础 341

15.1.1 简单的模块示例 342

15.1.2 编译、运行*个模块示例 345

15.1.3 requires和exports 346

15.2 java.base和平台模块 346

15.3 旧代码和未命名的模块 347

15.4 导出到特定的模块 347

15.5 使用requires transitive 348

15.6 使用服务 351

15.6.1 服务和服务提供程序的基础
知识 351

15.6.2 基于服务的关键字 351

15.6.3 基于模块的服务示例 352

15.7 其他模块功能 356

15.7.1 open模块 357

15.7.2 opens语句 357

15.7.3 requires static 357

15.8 继续模块的学习 357

15.9 自测题 358

第16章 Swing介绍 359

16.1 Swing的起源和设计原则 359

16.2 组件和容器 360

16.2.1 组件 361

16.2.2 容器 361

16.2.3 *容器窗格 361

16.3 布局管理器 362

16.4 *个简单的Swing程序 362

16.5 Swing事件处理 365

16.5.1 事件 365

16.5.2 事件源 365

16.5.3 事件监听器 366

16.5.4 事件类和监听器接口 366

16.6 使用JButton 366

16.7 使用JTextField 369

16.8 使用JCheckBox 371

16.9 使用JList 374

16.10 使用匿名内部类或lambda表达式
来处理事件 380

16.11 自测题 381

第17章 JavaFX简介 383

17.1 JavaFX的基本概念 383

17.1.1 JavaFX包 384

17.1.2 Stage和Scene类 384

17.1.3 节点和场景图 384

17.1.4 布局 384

17.1.5 Application类和生命周期方法 384

17.1.6 启动JavaFX应用程序 385

17.2 JavaFX应用程序的骨架 385

17.3 编译和运行JavaFX程序 387

17.4 应用程序线程 387

17.5 使用简单的JavaFX控件Label 387

17.6 使用按钮和事件 389


17.6.1 事件基础 389

17.6.2 按钮控件简介 390

17.6.3 演示事件处理和按钮 390

17.7 其他3个JavaFX控件 392

17.7.1 CheckBox 392

17.7.2 ListView 396

17.7.3 TextField 399

17.8 效果和变换简介 401

17.8.1 效果 401

17.8.2 变换 403

17.8.3 演示效果和变换 403

17.9 进一步学习 406

17.10 自测题 406

附录A 自测题答案 409

附录B 使用Java的文档注释 439

附录C Java Web Start概述 445

附录D JShell简介 451

附录E 更多Java关键字
【前言】
前 言

《Java编程入门官方教程(第7版)》旨在帮助你学习Java程序设计的基础知识,采用循序渐进的教学方法,安排了许多示例、自测题和编程练习。《Java编程入门官方教程(第7版)》不需要读者具备编程经验,而是从*基础的知识,从如何编译并运行一个Java程序开始讲起。然后讨论构成Java语言核心的关键字、功能和结构。还介绍Java的一些*重要高级功能,如多线程编程、泛型和lambda表达式和模块。此外,《Java编程入门官方教程(第7版)》还介绍Swing基础和JavaFX。学完《Java编程入门官方教程(第7版)》后,读者将牢固掌握Java编程精髓。值得说明的是,《Java编程入门官方教程(第7版)》只是学习Java的起点。Java不仅是一些定义语言的元素,还包括扩展的库和工具来帮助开发程序。要想成为*的Java程序员,就必须掌握这些知识。读者在学习完《Java编程入门官方教程(第7版)》后,就有了足够的知识来继续学习Java的其他方面。0.1 Java的发展历程只有少数几种编程语言对程序设计带来过根本性影响。其中,Java的影响由于迅速和广泛而格外突出。可以毫不夸张地说,1995年Sun公司发布的Java 1.0给计算机程序设计领域带来了一场变革。这场变革迅速地把Web转变成了一个高度交互的环境,也给计算机语言的设计设置了一个新标准。多年来,Java不断发展、演化和修订。和其他语言加入新功能的动作迟缓不同,Java一直站在计算机程序设计语言的前沿,部分原因是其变革的文化,部分原因是它所面对的变化。Java已经做过或大或小的多次升级。*次主要升级是Java 1.1版,这次升级比较大,加入了很多新的库元素,修订了处理事件的方式,重新配置了1.0版本的库中的许多功能。第二个主要版本是Java 2,它代表Java的第二代,标志着Java“现代化”的到来。Java 2*个发布的版本号是1.2。Java 2在*次发布时使用1.2版本号看上去有些奇怪。原因在于,该号码*初指Java库的内部版本号,后来就泛指整个版本号了。Java 2被Sun重新包装为J2SE(Java 2 Platform Standard Edition),并且开始把版本号应用于该产品。Java的下一次升级是J2SE 1.3,它是Java 2版本首次较大的升级。它增强了一些已有的功能,并且精简了开发环境。J2SE 1.4进一步增强了Java。该版本包括一些重要的新功能,如链式异常、基于通道的I/O以及assert关键字。Java的下一版本是J2SE 5,它是Java的第二次变革。以前的几次Java升级提供的改进虽然重要,但都是增量式的,而J2SE 5却从该语言的作用域、功能和范围等方面提供了根本性改进。为帮助理解J2SE 5的修改程度,下面列出了J2SE 5中的一些主要新功能:● 泛型● 自动装箱/自动拆箱● 枚举● 增强型for-each形式的for循环● 可变长度实参(varargs)● 静态导入● 注解(annotation)这些条目都是重要升级,每个条目都代表了Java语言的一处重要改进。其中,泛型、增强型for循环和可变长度实参引入了新的语法元素;自动装箱和自动拆箱修改了语法规则;注解增加了一种全新的编程注释方法。这些新功能的重要性反映在使用的版本号“5”上。从版本号的变化方式看,这一版本的Java应该是1.5。由于新功能和变革如此之多,常规的版本号升级(从1.4到1.5)已无法标识实际的变化,因此Sun决定使用版本号5,以强调发生了重要改进。因此,当前的版本称为J2SE 5,开发工具包称为JDK 5。但是,为了保持和以前的一致性,Sun决定使用1.5作为内部版本号,也称为开发版本号。J2SE 5中的“5”称为产品版本号。之后发布的Java版本是Java SE 6,Sun再次决定修改Java平台的名称,把“2”从版本号中删除了。因此,Java平台现在的名称是Java SE,官方产品名称是Java Platform Standard Edition 6,对应的Java开发工具包称为JDK 6。和J2SE 5一样,Java SE 6中的“6”是指产品的版本号,内部的开发版本号是1.6。Java SE 6 建立在J2SE 5的基础之上,做了进一步的增强和改进。Java SE 6并没有对Java语言本身添加较大的功能,而是增强了API库,添加了多个新包,改进了运行时环境。它在漫长的生命周期(Java术语)内经历了一些更新,添加了一些升级功能。总之,Java SE 6进一步巩固了J2SE 5建立的领先地位。Java的下一版本是Java SE 7,对应的Java开发工具包称为JDK 7,内部版本号是1.7。Java SE 7是Oracle收购Sun Microsystems之后发布的*个主版本。Java SE 7包含许多新功能,对语言和API库做了许多增强。Java SE 7添加的*重要功能是在Project Coin中开发的那些功能。Project Coin的目的是确保把对Java语言所做的很多小改动包含到JDK 7中,其中包括:● 现在String可控制switch语句。● 二进制整型字面值。● 在数值字面值中使用下画线。● 新增一种称为try-with-resources的try语句,支持自动资源管理。● 构造泛型实例时,通过菱形运算符使用类型推断。● 增强了异常处理,可以使用单个catch捕获两个或更多个异常(多重捕获),并且对重新抛出的异常可以进行更好的类型检查。可以看到,虽然Project Coin中的功能被视为小改动,但是“小”这个词实在不能体现它们所带来的好处。特别是,try-with-resources语句会对大量代码的编写方式产生深远影响。Java的下一版本是Java SE 8,对应的开发工具包是JDK 8,内部的开发版本号是1.8。JDK 8表示这是对Java语言的一次重大升级,因为本次升级包含了一种意义深远的新语言功能:lambda表达式。lambda表达式的影响深远:不但改变了概念化的编程方式,而且改变了Java代码的编写方式。使用lambda表达式,可以简化并减少创建某个结构所需的源代码量。另外,使用lambda表达式还可将新的运算符-> 和一种新的语法元素引入Java语言中。除了lambda表达式,JDK 8中还新增了其他一些重要功能。例如,从JDK 8开始,通过接口可以为指定的方法定义默认实现。JDK 8也捆绑了对JavaFX、Java的新GUI框架的支持。期待JavaFX不久便能在几乎所有的Java应用程序中扮演重要的角色,并且*终替代用于大多数基于GUI项目的Swing。总之,Java SE 8主要版本扩展了Java语言的功能,并且改变了Java代码的编写方式,带来的影响足够深远。0.2 Java SE 9Java的*版本是Java SE 9,对应的开发工具包是JDK 9,内部的开发版本号也是9。JDK 9表示这是对Java语言的一次重大升级,合并了对Java语言及其库的重大改进。主要的新功能是模块,它允许指定构成应用程序的代码之间的关系和依赖。模块还给Java的访问控制功能添加了另一种方式。包括模块导致了一个新的语法元素、几个新关键字和各种工具改进添加到Java中。模块还对API库有深远的影响,因为在JDK 9中,库包现在组织为模块。除了模块之外,JDK 9还包括几个新功能。其中一个特别有趣的是JShell,它是一个支持交互式程序体验和学习的工具(JShell简介见附录D)。另一个有趣的升级是支持私有接口方法。包含它们进一步增强了JSK 8对接口中默认方法的支持。JDK 9给javadoc工具添加了搜索功能,还添加了一个新的标记@index来支持它。与以前的版本一样,JDK 9包含对Java API库的许多更新和改进。作为一般规则,在任何Java版本中,都有*受人瞩目的新功能。但JDK 9废弃了Java高度配置的一个方面:applet。从JDK 9开始,applet不再推荐在新项目中使用。如第1章所述,因为applet需要浏览器支持(和其他因素),JDK 9废弃了整个applet API。目前,建议使用Java Web Start在Internet上部署应用程序(Java Web Start简介见附录C)。因为applet被设置为过时,不推荐用于新代码,所以《Java编程入门官方教程(第7版)》不再讨论它。但是对applet感兴趣的读者可以在《Java编程入门官方教程(第7版)》以前的版本中找到它们的内容。总之,JDK 9继续Java的革新,确保Java成为用户所期望的充满活力且敏捷的语言。《Java编程入门官方教程(第7版)》中的内容已更新至Java SE 9版本(JDK 9),包括一些新的功能、更新和其他内容。0.3 《Java编程入门官方教程(第7版)》的组织结构《Java编程入门官方教程(第7版)》采用教程式的组织结构,每一章都建立在前面的基础之上。《Java编程入门官方教程(第7版)》共分17章,每一章讨论一个有关Java的主题。《Java编程入门官方教程(第7版)》的特色就在于包含许多便于读者学习的特色内容。● 关键技能与概念:每一章都首先介绍一些该章中要介绍的重要技能。● 自测题:每一章都有自测题,测试读者学习到的知识。答案在附录A中提供。● 专家解答:每一章中都穿插一些“专家解答”,以一问一答的形式介绍补充知识和要点。● 编程练习:每一章中都包含一两个编程练习,以帮助读者将学习到的知识应用到实践中。很多这样的练习都是实际的示例,读者可以将其用作自己的程序的起点。0.4 《Java编程入门官方教程(第7版)》不需要读者具备编程经验《Java编程入门官方教程(第7版)》假定读者没有任何编程经验。如果读者没有编程经验,阅读《Java编程入门官方教程(第7版)》是正确的选择。如果读者有过一些编程经验,在阅读《Java编程入门官方教程(第7版)》时可以加快速度。但是要记住,Java在几个重要的地方与其他一些流行的计算机语言不同,所以不要急于下结论。因此,即使读者是经验丰富的程序员,也仍然建议仔细阅读《Java编程入门官方教程(第7版)》。0.5 《Java编程入门官方教程(第7版)》需要的软件环境要编译和运行《Java编程入门官方教程(第7版)》提供的所有程序,需要获得Oracle提供的*版本的Java Development Kit (JDK)。在撰写《Java编程入门官方教程(第7版)》时,*版本为JDK 9,这是Java SE 9使用的JDK版本。《Java编程入门官方教程(第7版)》第1章介绍如何获得Java JDK。如果读者使用早期版本的Java,也仍然可以阅读《Java编程入门官方教程(第7版)》,只是无法编译和运行使用了Java新功能的程序。0.6 不要忘记Web上的代码《Java编程入门官方教程(第7版)》所有示例和编程项目的源代码都可以免费从Web网址www.oraclepressbooks.com下载,也可以扫描《Java编程入门官方教程(第7版)》封底二维码下载。0.7 特别感谢特别感谢《Java编程入门官方教程(第7版)》的技术编辑Danny Coward。他对《Java编程入门官方教程(第7版)》提出了许多宝贵的建议和意见,对此十分感谢。0.8 进一步学习《Java编程入门官方教程(第7版)》是引导读者进入Herbert Schildt系列编程图书的大门,对下面的一些书你也会感兴趣:Java: The Complete ReferenceHerb Schildt’s Java Programming CookbookThe Art of JavaSwing: a Beginner’s GuideIntroducing JavaFX 8 Programming
【书摘与插画】

返回顶部