前言
前 言
《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 9
Java的最新版本是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 Reference
Herb Schildt’s Java Programming Cookbook
The Art of Java
Swing: a Beginner’s Guide
Introducing JavaFX 8 Programming