新書推薦:
《
1911:危亡警告与救亡呼吁
》
售價:HK$
76.8
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:HK$
75.9
《
笼中王国 : 18世纪法国的珍禽异兽与社会文化
》
售價:HK$
74.8
《
思考的框架3:风靡华尔街的思维训练法
》
售價:HK$
64.9
《
被记忆的西周史(中山大学中珠学术译丛)
》
售價:HK$
151.8
《
森林疗法:拥抱大自然、获得幸福的季节性方法
》
售價:HK$
74.8
《
希腊人(伊恩·莫里斯文明史系列)
》
售價:HK$
185.9
《
亚马逊六页纸 如何高效开会、写作、完成工作
》
售價:HK$
76.8
|
編輯推薦: |
《Java 11官方入门教程第8版》针对Java SE 11做了全面细致的更新。
《Java 11官方入门教程第8版》由全球著名的畅销书编程作家Herbert Schildt执笔,指导你立即着手编写Java程序。本书开篇讲解基础知识,分析如何创建、编译和运行Java程序;接着浓墨重彩地描述构成Java语言核心的关键字、语法和结构;*后讲述Java的一些高级特性,包括多线程编程、泛型、lambda表达式、模块、Swing以及Java交互编程工具JShell。本书通俗易懂、简明扼要、详略得当,成为全球数百万读者的理想选择。
|
內容簡介: |
便于学习的设计
● 关键技能与概念:每章开头列出要介绍的技能和概念
● 专家解答:以问答形式提供附加信息和实用提示
● 编程练习:示范如何运用编程技能的紧贴实用的练习
● 自测题:每章末尾都有一些测试题,以帮助读者扎实掌握Java技能
● 语法注释:示例代码中的注释阐述正在演示的编程技巧
|
關於作者: |
Herbert Schildt是权威的Java语言专家、畅销书作家。三十多年来,Herbert撰写的程序设计图书在全球的销量达数百万册,并被翻译成多种语言。Herbert已撰写大量关于Java、C、C和C#编程语言的书籍和文章,包括 《Java 9编程参考官方大全第10版》、Herb Schildts Java Programming Cookbook、Introducing JavaFX 8 Programming和Swing: A Beginners Guide。
Herbert对计算机的各个方面充满兴趣,其中投入精力最多的是计算机语言,尤其是计算机语言的标准化。Herbert是ANSIISO委员会的成员,参与了1989年C语言的标准化、1998年C语言的标准化,以及2011年C标准的更新。Herbert拥有伊利诺伊大学的学士和硕士学位。他的个人网站为www.HerbSchildt.com。
|
目錄:
|
第1章 Java基础1
1.1 Java的历史和基本原则2
1.1.1 Java的起源2
1.1.2 Java与C和C的关系3
1.1.3 Java对Internet的贡献3
1.1.4 Java的魔法:字节码4
1.1.5 超越applet5
1.1.6 更快速的发布时间表6
1.1.7 Java的主要术语6
1.2 面向对象程序设计6
1.2.1 封装7
1.2.2 多态性8
1.2.3 继承8
1.3 Java开发工具包8
1.4 第一个简单的程序9
1.4.1 输入程序9
1.4.2 编译程序10
1.4.3 逐行分析第一个程序10
1.5 处理语法错误12
1.6 第二个简单程序12
1.7 另一种数据类型14
1.8 两个控制语句16
1.8.1 if语句16
1.8.2 for循环语句18
1.9 创建代码块19
1.10 分号和定位20
1.11 缩进原则20
1.12 Java关键字22
1.13 Java标识符23
1.14 Java类库23
1.15 自测题23
第2章 数据类型与运算符25
2.1 数据类型为什么重要26
2.2 Java的基本类型26
2.2.1 整数类型26
2.2.2 浮点型27
2.2.3 字符型28
2.2.4 布尔类型29
2.3 字面值31
2.3.1 十六进制、八进制和二进制字面值31
2.3.2 字符转义序列32
2.3.3 字符串字面值32
2.4 变量详解33
2.4.1 初始化变量33
2.4.2 动态初始化33
2.5 变量的作用域和生命期34
2.6 运算符36
2.7 算术运算符36
2.8 关系运算符和逻辑运算符37
2.9 短路逻辑运算符39
2.10 赋值运算符40
2.11 速记赋值40
2.12 赋值中的类型转换41
2.13 不兼容类型的强制转换42
2.14 运算符的优先级43
2.15 表达式45
2.15.1 表达式中的类型转换45
2.15.2 间距和圆括号46
2.16 自测题47
第3章 程序控制语句49
3.1 从键盘输入字符50
3.2 if语句51
3.2.1 嵌套if语句52
3.2.2 if-else-if阶梯状结构53
3.3 switch语句54
3.4 for循环58
3.4.1 for循环的一些变体60
3.4.2 缺失部分要素的for循环61
3.4.3 无限循环61
3.4.4 没有循环体的循环62
3.4.5 在for循环内部声明循环控制变量62
3.4.6 增强型for循环63
3.5 while循环63
3.6 do-while循环64
3.7 使用break语句退出循环69
3.8 将break语句作为一种goto语句使用70
3.9 使用continue语句73
3.10 嵌套循环77
3.11 自测题78
第4章 类、对象和方法81
4.1 类的基础知识82
4.1.1 类的基本形式82
4.1.2 定义类83
4.2 如何创建对象85
4.3 引用变量和赋值85
4.4 方法86
4.5 从方法返回值88
4.6 返回值89
4.7 使用形参90
4.8 构造函数98
4.9 带形参的构造函数99
4.10 深入介绍new运算符100
4.11 垃圾回收101
4.12 this关键字101
4.13 自测题103
第5章 其他数据类型与运算符105
5.1 数组106
5.2 多维数组110
5.2.1 二维数组110
5.2.2 不规则数组111
5.2.3 三维或更多维的数组112
5.2.4 初始化多维数组112
5.3 另一种声明数组的语法113
5.4 数组引用赋值114
5.5 使用length成员115
5.6 for-each形式的循环119
5.6.1 迭代多维数组122
5.6.2 应用增强型for循环123
5.7 字符串123
5.7.1 构造字符串124
5.7.2 操作字符串124
5.7.3 字符串数组126
5.7.4 字符串是不可变的127
5.7.5 使用String控制switch语句128
5.8 使用命令行实参128
5.9 使用局部变量的类型推断功能130
5.9.1 引用类型的局部变量类型推断131
5.9.2 在for循环中使用局部变量类型推断132
5.9.3 var的一些限制133
5.10 位运算符133
5.10.1 位运算符的与、或、异或和非134
5.10.2 移位运算符137
5.10.3 位运算符的赋值速记符139
5.11 ?运算符141
5.12 自测题143
第6章 方法和类详解145
6.1 控制对类成员的访问146
6.2 向方法传递对象150
6.3 返回对象153
6.4 方法重载155
6.5 重载构造函数159
6.6 递归163
6.7 理解static关键字165
6.8 嵌套类和内部类170
6.9 varargs173
6.9.1 varargs基础173
6.9.2 重载varargs方法175
6.9.3 varargs和歧义177
6.10 自测题178
第7章 继承179
7.1 继承的基础知识180
7.2 成员访问与继承182
7.3 构造函数和继承184
7.4 使用super调用超类构造函数186
7.5 使用super访问超类成员189
7.6 创建多级层次结构192
7.7 何时调用构造函数195
7.8 超类引用和子类对象196
7.9 方法重写200
7.10 重写的方法支持多态性202
7.11 为何使用重写方法203
7.12 使用抽象类207
7.13 使用final210
7.13.1 使用final防止重写210
7.13.2 使用final防止继承210
7.13.3 对数据成员使用final211
7.14 Object类212
7.15 自测题213
第8章 包和接口215
8.1 包216
8.1.1 定义包216
8.1.2 寻找包和CLASSPATH217
8.1.3 一个简短的包示例217
8.2 包和成员访问218
8.3 理解被保护的成员220
8.4 导入包222
8.5 Java的类库位于包中223
8.6 接口223
8.7 实现接口224
8.8 使用接口引用227
8.9 接口中的变量233
8.10 接口能够扩展234
8.11 默认接口方法235
8.11.1 默认方法的基础知识235
8.11.2 默认方法的实际应用236
8.11.3 多继承问题237
8.12 在接口中使用静态方法238
8.13 私有接口方法239
8.14 有关包和接口的最后思考240
8.15 自测题240
第9章 异常处理241
9.1 异常的层次结构242
9.2 异常处理基础242
9.2.1 使用关键字try和catch242
9.2.2 一个简单的异常示例243
9.3 未捕获异常的结果245
9.4 使用多个catch语句247
9.5 捕获子类异常247
9.6 try代码块可以嵌套248
9.7 抛出异常249
9.8 Throwable详解251
9.9 使用finally252
9.10 使用throws语句254
9.11 另外3种异常功能255
9.12 Java的内置异常256
9.13 创建异常子类258
9.14 自测题262
第10章 使用IO265
10.1 基于流的Java IO266
10.2 字节流和字符流266
10.3 字节流类266
10.4 字符流类267
10.5 预定义流267
10.6 使用字节流268
10.6.1 读取控制台输入269
10.6.2 写入控制台输出269
10.7 使用字节流读写文件270
10.7.1 从文件输入270
10.7.2 写入文件273
10.8 自动关闭文件275
10.9 读写二进制数据277
10.10 随机访问文件281
10.11 使用Java字符流283
10.11.1 使用字符流的控制台输入284
10.11.2 使用字符流的控制台输出286
10.12 使用字符流的文件IO287
10.12.1 使用FileWriter287
10.12.2 使用FileReader288
10.13 使用Java的类型封装器转换数值字符串289
10.14 自测题296
第11章 多线程程序设计299
11.1 多线程的基础知识300
11.2 Thread类和Runnable接口300
11.3 创建一个线程301
11.4 创建多个线程309
11.5 确定线程何时结束311
11.6 线程的优先级314
11.7 同步316
11.8 使用同步方法317
11.9 同步语句319
11.10 使用notify 、wait 和notifyAll 的线程通信321
11.11 线程的挂起、继续执行和停止326
11.12 自测题330
第12章 枚举、自动装箱、静态导入和注解333
12.1 枚举334
12.2 Java语言中的枚举是类类型336
12.3 values 和valueOf 方法336
12.4 构造函数、方法、实例变量和枚举337
12.5 枚举继承enum339
12.6 自动装箱344
12.7 类型封装器344
12.8 自动装箱的基础知识346
12.9 自动装箱和方法347
12.10 发生在表达式中的自动装箱自动拆箱348
12.11 静态导入349
12.12 注解元数据352
12.13 自测题354
第13章 泛型355
13.1 泛型的基础知识356
13.2 简单的泛型示例356
13.2.1 泛型只能用于引用类型359
13.2.2 泛型类型是否相同基于其类型实参359
13.2.3 带有两个类型形参的泛型类360
13.2.4 泛型类的一般形式361
13.3 受限类型361
13.4 使用通配符实参364
13.5 受限通配符366
13.6 泛型方法369
13.7 泛型构造函数370
13.8 泛型接口371
13.9 原类型和遗留代码377
13.10 使用菱形运算符进行类型推断379
13.11 局部变量类型推断和泛型380
13.12 擦除特性380
13.13 歧义错误380
13.14 一些泛型限制381
13.14.1 类型形参不能实例化381
13.14.2 对静态成员的限制381
13.14.3 泛型数组限制382
13.14.4 泛型异常限制383
13.15 继续学习泛型383
13.16 自测题383
第14章 lambda表达式和方法引用385
14.1 lambda表达式简介386
14.1.1 lambda表达式的基础知识386
14.1.2 函数式接口387
14.1.3 几个lambda表达式示例389
14.2 块lambda表达式392
14.3 泛型函数式接口393
14.4 lambda表达式和变量捕获398
14.5 从 lambda表达式中抛出异常399
14.6 方法引用401
14.6.1 静态方法的方法引用401
14.6.2 实例方法的方法引用402
14.7 构造函数引用406
14.8 预定义的函数式接口408
14.9 自测题409
第15章 模块411
15.1 模块基础412
15.1.1 简单的模块示例413
15.1.2 编译、运行第一个模块示例416
15.1.3 requires和exports417
15.2 java.base和平台模块417
15.3 旧代码和未命名的模块418
15.4 导出到特定的模块419
15.5 使用requires transitive420
15.6 使用服务423
15.6.1 服务和服务提供程序的基础知识423
15.6.2 基于服务的关键字424
15.6.3 基于模块的服务示例424
15.7 其他模块功能430
15.7.1 open模块430
15.7.2 opens语句430
15.7.3 requires static430
15.8 继续模块的学习431
15.9 自测题431
第16章 Swing介绍433
16.1 Swing的起源和设计原则434
16.2 组件和容器435
16.2.1 组件435
16.2.2 容器436
16.2.3 顶级容器窗格436
16.3 布局管理器436
16.4 第一个简单的Swing程序437
16.5 Swing事件处理440
16.5.1 事件441
16.5.2 事件源441
16.5.3 事件监听器441
16.5.4 事件类和监听器接口441
16.6 使用JButton442
16.7 使用JTextField445
16.8 使用JCheckBox448
16.9 使用JList450
16.10 使用匿名内部类或lambda表达式来处理事件458
16.11 自测题459
附录A 自测题答案461
附录B 使用Java的文档注释495
附录C 编译运行简单的单文件程序503
附录D JShell简介505
附录E 更多Java关键字513
|
內容試閱:
|
《Java 11官方入门教程第8版》旨在帮助你学习Java程序设计的基础知识,采用循序渐进的教学方法,安排了许多示例、自测题和编程练习。《Java 11官方入门教程第8版》不需要读者具备编程经验,而是从最基础的知识,从如何编译并运行Java程序开始讲起。然后讨论构成Java语言核心的关键字、功能和结构。还介绍Java的一些最重要高级功能,如多线程编程、泛型、lambda表达式和模块。此外,《Java 11官方入门教程第8版》还介绍Swing基础。学完《Java 11官方入门教程第8版》后,读者将牢固掌握Java编程精髓。
值得说明的是,《Java 11官方入门教程第8版》只是学习Java的起点。Java不仅是一些定义语言的元素,还包括扩展的库和工具来帮助开发程序。要想成为顶尖的Java程序员,就必须掌握这些知识。读者在学完《Java 11官方入门教程第8版》后,就有了足够的知识来继续学习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重新包装为J2SEJava 2 Platform Standard Edition,并且开始把版本号应用于该产品。
Java的下一次升级是J2SE 1.3,它是Java 2版本首次较大的升级。它增强了已有的功能,精简了开发环境。J2SE 1.4进一步增强了Java。该版本包括一些重要的新功能,如链式异常、基于通道的IO以及assert关键字。
Java的下一版本是J2SE 5,它是Java的第二次变革。以前的几次Java升级提供的改进虽然重要,但都是增量式的,而J2SE 5却从该语言的作用域、功能和范围等方面提供了根本性改进。为帮助理解J2SE 5的修改程度,下面列出了J2SE 5中的一些主要新功能:
● 泛型
● 自动装箱自动拆箱
● 枚举
● 增强型for循环for-each
● 可变长度实参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 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 SE 8,对应的开发工具包是JDK 8,内部的开发版本号是1.8。JDK 8表示这是对Java语言的一次重大升级,因为本次升级包含了一种意义深远的新语言功能:lambda表达式。lambda表达式不但改变了概念化的编程方式,而且改变了Java代码的编写方式。使用lambda表达式,可以简化并减少创建某个结构所需的源代码量。另外,使用lambda表达式还可将新的运算符- 和一种新的语法元素引入Java语言中。
除了lambda表达式,JDK 8中还新增了其他一些重要功能。例如,从JDK 8开始,通过接口可以为指定的方法定义默认实现。总之,Java SE 8扩展了Java语言的功能,并且改变了Java代码的编写方式,带来的影响足够深远。
再后的Java版本是Java SE 9,对应的开发工具包是JDK 9。JDK 9表示这是对Java语言的一次重大升级,合并了对Java语言及其库的重大改进。主要的新功能是模块,它允许指定构成应用程序的代码之间的关系和依赖。模块还给Java的访问控制功能添加了另一种方式。包括模块导致一个新的语法元素、几个新的关键字和各种工具改进被添加到Java中。模块还对API库具有深远的影响,因为从JDK 9开始,库包现在组织为模块。
除了模块之外,JDK 9还包括几个新功能。其中一个特别有趣的是JShell,它是一个支持交互式程序体验和学习的工具有关Jshell的简介,见附录D。另一个有趣的升级是支持私有接口方法。包含它们进一步增强了JDK 8对接口中默认方法的支持。JDK 9给javadoc工具添加了搜索功能,还添加了一个新的标记@index来支持它。与以前的版本一样,JDK 9包含对Java API库的许多更新和改进。
作为一般规则,在任何Java版本中,都有令人瞩目的新功能。但JDK 9废弃了Java高度配置的一个方面:applet。从JDK 9开始,applet不再推荐在新项目中使用。如第1章所述,因为applet需要浏览器支持以及其他一些因素,JDK 9废弃了整个applet API。
Java的下一个版本是Java SE 10 JDK 10。然而,在发布它之前,Java发布计划发生了重大变化。过去,主要发行版通常间隔两年或更长时间。然而,从JDK 10开始,发行版之间的时间明显缩短了。现在预计发布将严格按照基于时间的计划表进行,主要发布版本现在称为功能发布版本之间的预期时间只有6个月。因此,JDK 10于2018年3月发布,也就是JDK 9发布6个月之后。这种更快的发布节奏使Java程序员能够快速获得新特性和改进。当一个新特性准备好时,它将成为下一个预定发行版的一部分,而不是等待两年或更长时间。
JDK 10增加的主要新语言特性是支持本地变量类型推断。有了局部变量类型推断,现在可以在初始化器的类型中推断局部变量的类型,而不是显式指定其类型。为了支持这个新功能,将上下文敏感的标识符var添加到Java中,作为保留类型名。类型推断可以简化代码,因为如果可以从初始化器中推断变量的类型,就不需要指定多余的变量类型。在难以识别类型或无法显式指定类型的情况下,它还可以简化声明。局部变量类型推断已经成为当代编程环境的一个常见部分。它包含在Java中,帮助Java跟上语言设计不断发展的趋势。除了其他一些更改外,JDK 10还重新定义了Java版本字符串,更改了版本号的含义,以便更好地与新的基于时间的发布计划保持一致。
在撰写《Java 11官方入门教程第8版》时,Java的最新版本是Java SE 11 JDK 11。它于2018年9月发布,比JDK 10晚了6个月。JDK 11中主要的新语言特性是支持在lambda表达式中使用var。此外,还向Java启动程序添加了另一种执行模式,使其能够直接执行简单的单文件程序。JDK 11还删除了一些特性。也许最有趣的是取消对applet的支持,这是因为applet的历史意义。回顾一下,applet最初是由JDK 9禁用的。随着JDK 11的发布,applet支持已经被移除。JDK 11还删除了对另一种与部署相关的技术Java Web Start的支持。JDK 11中还有一个引人注目的删除:JavaFX;这个GUI框架不再是JDK的一部分,而是成为一个独立的开源项目。因为JDK已经删除了这些特性,所以《Java 11官方入门教程第8版》不讨论它们。
关于Java演化的另一要点是:从2006年开始,Java的开源过程就开始了。今天,JDK的开源实现是可用的。开源进一步促进了Java开发的动态性。归根结底,Java的创新是安全的。Java仍然是编程界所期待的充满活力、灵活的语言。
《Java 11官方入门教程第8版》中的内容已通过JDK 11更新。然而,如前所述,Java编程的历史是以动态变化为标志的。随着对Java的学习不断深入,用户将希望查看后续Java发行版的每个新特性。简单地说:Java的演化还在继续!
0.3 《Java 11官方入门教程第8版》的组织结构
《Java 11官方入门教程第8版》采用教程式的组织结构,每一章都建立在前面的基础之上。《Java 11官方入门教程第8版》共分16章,每一章讨论Java的一个方面。《Java 11官方入门教程第8版》的特色就在于包含许多便于读者学习的特色内容。
● 关键技能与概念:每一章首先介绍一些该章中要介绍的重要技能。
● 自测题:每一章都有自测题,测试读者学习到的知识。答案在附录A中提供。
● 专家解答:每一章中都穿插一些专家解答,以一问一答的形式介绍补充知识和要点。
● 编程练习:每一章中都包含一两道编程练习,以帮助读者将学到的知识应用到实践中。很多这样的练习都是实际的示例,读者可以将其用作自己的程序的起点。
0.4 《Java 11官方入门教程第8版》不需要读者具有编程经验
《Java 11官方入门教程第8版》假定读者没有任何编程经验。如果读者没有编程经验,阅读《Java 11官方入门教程第8版》是正确的选择。如果读者有一些编程经验,在阅读《Java 11官方入门教程第8版》时可以加快速度。但要记住,Java在几个重要的地方与其他一些流行的计算机语言不同,所以不要急于下结论。因此,即使读者是经验丰富的程序员,也仍然建议仔细阅读《Java 11官方入门教程第8版》。
0.5 《Java 11官方入门教程第8版》需要的软件环境
要编译和运行《Java 11官方入门教程第8版》提供的所有程序,需要获得最新版本的Java Development Kit JDK。在撰写《Java 11官方入门教程第8版》时,最新版本为JDK 11,这是Java SE 11使用的JDK版本。《Java 11官方入门教程第8版》第1章介绍如何获得Java JDK。
如果读者使用早期版本的Java,也仍然可以阅读《Java 11官方入门教程第8版》,只是无法编译和运行使用了Java新功能的程序。
0.6 不要忘记Web上的代码
《Java 11官方入门教程第8版》所有示例和编程项目的源代码都可以免费从网址www.oraclepressbooks.com下载,也可以扫《Java 11官方入门教程第8版》封底二维码下载。
0.7 特别感谢
特别感谢《Java 11官方入门教程第8版》的技术编辑Danny Coward。Danny编辑过我写的多《Java 11官方入门教程第8版》籍,他的见解和建议总是很有价值,也很受赞赏。
0.8 进一步学习
《Java 11官方入门教程第8版》是引导读者进入Herbert Schildt系列编程图书的大门,下面的一些书你也会感兴趣:
Java: The Complete Reference
Herb Schildts Java Programming Cookbook
The Art of Java
Swing: a Beginners Guide
Introducing JavaFX 8 Programming
|
|