BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Java SE 7发布:2006年12月后的首次重要更新

| 作者 Charles Humble 关注 798 他的粉丝 ,译者 丁雪丰 关注 3 他的粉丝 发布于 2011年8月1日. 估计阅读时间: 5 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

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.0IntelliJ IDEA 10.5,它们都支持Java SE 7平台的最新特性。Eclipse Indigo同样也有beta级别的Java 7支持,Oracle JDeveloper预计在今年下半年会有一个支持JDK 7的版本。

查看英文原文:Java SE 7 Released: First Major Update Since December 2006

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT