技术开发 频道

Java SE 7:06年12月后的首次重要更新

  【IT168 评论】Java 7于7月28日开始提供下载,这是Oracle收购Sun之后Java平台的首次发布。该版本包含了多个对语言的变更,虽然很小但却深受欢迎,还有新的文件API和Fork/Join框架,并改善了JVM的动态语言支持。

  Java 7之前是Project Coin(JSR 334)的一部分,它是JSR 201的继任者,通过一些能改善生产率的小变化来增强Java语言。尤其值得一提的是引入了“try-with-resources”,它和C#中的using语句很像,不过是基于try语句的形式,using语句只能处理单个资源,而try-with-resources可以在一个块中处理多个资源。

  关于异常处理有两个变化。首先,一个catch块中可以处理多个指定类型的异常。Java 7对try的catch子句的语法做了扩展,能接受一系列异常类型,在声明异常参数的地方用“或”操作符(即“|”)来进行分隔。其次,如果异常参数没被修改,而且在catch块里又被重新抛了出来,现在你不需要在方法签名上添加该异常了(译注:此处表达的含义不太准确,其实是说在catch块中如果重新抛出该异常,现在会有更细致的类型检查,详见官方文档)。

  其他语言变更包括:

  1、switch语句包含了对字符串的支持。

  2、为了增强可读性,数字增加了二进制表示和下划线分隔符――例如long creditCardNumber = 1234_5678_9012_3456L。

  3、简化了Varargs方法的调用:对编译器的警告做了调整,以前在结合了Varargs和非具体化数组类型的方法被调用时会有警告,现在这个警告从调用方移到了方法声明上。

  4、改善了针对泛型实例创建(< > 或菱形)的类型推断:在类实体创建时使用有限类型推断,虽然需要显式声明参数类型,但从上下文中能把它们确定下来,这样一来就可以直接使用空的类型参数集合了。以前要这么写:

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

 

  现在可以这么写:

Map<String, List<String>> anagrams = new HashMap<>();

 

  引入了两个主要的新API。第一个是JSR 203,针对文件系统访问、可扩展异步I/O操作、多播数据包、Socket通道绑定和配置添加了新的API。企业开发者特别感兴趣的是增加了真正的异步I/O API,这对需要跨多连接的低延时、高吞吐的高端服务器应用程序来说尤为重要。JSR 203还为Java添加了一个真的文件系统API,提供了对某些OS特定功能的支持。例如,你可以在支持符号链接的系统中创建符号链接。但这一特性也备受争议,虽然JSR 203提供了可运行于所有平台、支持平台特定特性的通用API,但它并非严格意义上的“一次编写到处运行”。

  第二个新API是Fork/Join框架(JSR 166的一部分),起初是计划放在Java 5里的。它为开发者提供了一种机制,可以将问题拆解为多个任务,在任意数量的处理器核心上并行执行。

  此外,平台中还有新的网络和安全特性,对国际化的扩展支持中还包括了Unicode 6.0支持。

  最后,Java SE 7使用了InvokeDynamic关键字来标记Java诞生后的首个新字节码指令。InvokeDynamic添加了一种新的调用模式和链接模式,可以通过编程支持用户定制的规范。特别是在缺乏静态类型信息的方法调用中,它能支持高效、灵活的方法执行,这大幅改善了动态语言的性能,例如运行于JVM之上的JRuby和Jython。

  新特性受到了大家的欢迎,但最重要的是这个新版本终于发布了。Sun和Apache Software Foundation的长期分歧,还有Sun最后的日子里的领导和资源问题,都是导致两个版本之间超长间隔时间的原因。正如Mark Reinhold在最近的采访中所说的:

  出于商业和政治原因,Java曾进入短期的休眠状态。但现在我们回来了,将要发布Java 7,这不是一个革命性的版本,而是一个进化版本,其中不乏一些好内容。

  对如何着手使用Java SE 7感兴趣的开发者不妨使用一下NetBeans IDE 7.0或IntelliJ IDEA 10.5,它们都支持Java SE 7平台的最新特性。Eclipse Indigo同样也有beta级别的Java 7支持,Oracle JDeveloper预计在今年下半年会有一个支持JDK 7的版本。

0
相关文章