第1章Java 7语法新特性
前面介绍Java所面临的挑战时就提到了Java语言的语法过于复杂的问题。与其他动态语言相比,利用Java语言所编写出来的代码不够简洁和直接。Java语言一直在不断改进自身的语法,以满足开发人员的需求。*大的改动发生在J2SE 5.0版本中。泛型、增强的for循环、基本类型的自动装箱和拆箱机制、枚举类型、参数长度可变的方法、静态引入(import static)和注解等都是在这个版本中添加的。随后的Java SE 6并没有增加新的语法特性,而Java SE 7又增加了一些语法新特性。本章将会着重介绍这些新特性。
OpenJDK中的Coin项目(Project Coin)的目的就是为了收集对Java语言的语法进行增强的建议。*终有6个语法新特性被加入到了Java 7中。这些语法新特性涉及switch语句、整数字面量、异常处理、泛型、资源处理和参数长度可变方法的调用等。
下面将对新特性进行具体的介绍。每节是独立的,读者可以有选择地阅读自己感兴趣的特性的相关章节。需要注意的是,Java 7中与泛型相关的语法新特性将在专门介绍泛型的第12章中介绍。
1.1Coin项目介绍
在介绍具体的新特性之前,有必要介绍一下Coin项目。OpenJDK中的Coin项目的目的是维护对Java语言所做的语法增强。在Coin项目开始之初,曾经广泛地向社区征求提议。在短短的一个月时间内就收到了近70条提议。*后有9条提议被列入考虑之中。在这9条提议中,有6条成为Java 7的一部分,剩下的2条提议会在Java 8中重新考虑,还有1条提议被移到其他项目中实现。这6条被接纳的提议除了本章会介绍的在switch语句中使用字符串、数值字面量的改进、优化的异常处理、try-with-resources语句和优化变长参数的方法调用之外,还包括第12章中会介绍的简化泛型类创建的“<>”操作符。在Java 8中考虑的2条提议则分别是集合类字面量和为List和Map提供类似数组的按序号的访问方式。
和其他对Java平台所做的修改一样,Coin项目所建议的修改也需要通过JCP来完成。这些改动以JSR 334(Small Enhancements to the JavaTM Programming Language)的形式提交到JCP。
1.2在switch语句中使用字符串
对于switch语句,开发人员应该都不陌生。大部分编程语言中都有类似的语法结构,用来根据某个表达式的值选择要执行的语句块。对于switch语句中的条件表达式类型,不同编程语言所提供的支持是不一样的。对于Java语言来说,在Java 7之前,switch语句中的条件表达式的类型只能是与整数类型兼容的类型,包括基本类型char、byte、short和int,与这些基本类型对应的封装类Character、Byte、Short和Integer,还有枚举类型。这样的限制降低了语言的灵活性,使开发人员在需要根据其他类型的表达式来进行条件选择时,不得不增加额外的代码来绕过这个限制。为此,Java 7放宽了这个限制,额外增加了一种可以在switch语句中使用的表达式类型,那就是很常见的字符串,即String类型。