[译]Java SE 8 新特性之旅 : Java开发世界的大变动
我很自豪的成为了adopt-OpenJDK的一员,像其他专业团队成员一样,但是我只刚加入了8个月,我们一同经历了Java SE 8 的开发、编译、编码、讨论……等等,直到JDK上线。Java SE 8发布于2014年3月18日,现在可供下载使用。
我很高兴发布这一系列“Java SE 8 新特性之旅”,我会写一些例子来简化Java SE 8知识的获取、开发经验、新特性和API,然后
利用你的知识,提高你的编码能力,同时提高你的生产力。我希望你能像我写文章一样享受它。
我们将游览Java SE 8(项目和APIs)中的重要特性,平台设计支持更快、更简单的Java开发。我们会学到Lambda项目,一种在Java
代码支持Lambda表达式的新语法。了解用来处理集合和管理并行处理的新的Stream API。用代表、管理和计算日期和时间值的DateTime API来计算时间间隔。
还有Nashorn,一个新引擎,有了它,Java虚拟机可以更好的支持JavaScript代码的使用。
最后,我还会涉及到一些很少有人知道的特性,比如把strings加入到lists中的新方法和其他更多的能够帮你处理日常任务的特性。
想要获取更多的Java SE 8特性和指南,我建议你参考 http://docs.oracle.com/javase/tutorial/官方网站和Java SE 8 Java API 文档。
在这个系列中我们涉及的主题包含:
1.安装Java SE 8,注意事项和建议。
2.介绍Java SE 8 主要特性,大的改动。
3.使用lambda表达式和方法参考。
4.用streams遍历集合。
5.用新的DateTime API计算时间间隔。
6.在Java里面用Nashorn运行JavaScript。
7.其他的新特性和API变动。
1.安装Java SE 8,注意事项和建议
1)在Windows上安装Java SE 8
为了在微软Windows系统上运行Java SE 8,首先要检查你的Windows系统版本。Java SE 8 支持windows8,7,Vista和XP。
如果你想要运行Java Applets,你需要一个64位的浏览器,包含IE 7以上、Firefox3.6以上版本和支持Windows的谷歌浏览器,而不是
在Mac上的。你能下载Java SE 8的JDK从:
1.地址java.oracle.com,显示Java主页。
2. 点击Java SE。
3. 在TOP Downloads下,点击Java 8的下载链接。
2)在Mac上安装Java SE 8
为了在Mac OS X上运行Java SE 8,你必须有一个基于Intel的Mac并且运行Mac OS X 10.7.3,版本Lion或更高。如果你是Mac的老版本,你不能在其上编程来运行Java 8应用程序。为了安装Java SE 8 你需要Mac电脑的管理员权限。并且为了在浏览上运行Java Applets,你需要一个64位的浏览器,比如Safari或者Firefox。谷歌浏览器是32位的,不能运行Java Applets。和先前在Windows上安装Java SE的描述一样,一样的网站下载MAC OS版的 .dmg文件来安装。实际上这个页面包含了所有支持的操作系统的版本。然而
我们的焦点还是Widnows和Mac。
现在在Windows和MAC OS X平台上,你已经准备好开始用Java SE 8编程了吧。
在我们安装完Java SE 8之后,让我们投入第一点,简单的看一下Java SE 8的主要特性,在我们最爱的IDE上开始编程之旅。
2.介绍Java SE 8 主要特性,大改动
JSR 337概述:Java SE 8 发布内容
Java SE 8是Java编程语言和Java虚拟机的重要发布。涉及了很多改动。其中一些比其他更全面,比如Lambda表达式,但我要讲的是大的改动和一些小的变动。
JSR 335:Lambda 表达式
可能最引人注意的就是Lambda项目了,一套新的语法,让Java开发者可以像函数式程序员一样工作。这个项目包括了lambda表达式,方法参考和一些其他的能力。
JSR 310:Date和Time API
新的管理dates和times的API。替代了老版本的类。那些较老版本的类仍然在Java Runtime里面,但是当你创建新的应用程序时,你可能会迁移到这套新的API,它会简化你的代码和让你的编程更直观。有管理本地日期、时间和时区,以及计算不同时间之差的新类。
Stream API
添加了管理集合的新工具,包括lists,maps,sets,等等。stream允许你处理集合中的每一项而不用去写循环代码。它还允许你把你的处理分解到多个CPU。所有,对于复杂的大数据集,你能看到显著的性能提高。
Nashorn项目
Nashorn JavaScript引擎也是Java SE 8新加入的。这是一个全新的JavaScript引擎,允许你用JavaScript编码并和Java类整合到一起。Nashorn的目标是在原生JVM的Java中实现一个轻量级的高性能的JavaScript运行时。这个项目旨在通过JSR-223让Java开发者
在Java应用程序中嵌入JavaScript,用jrunscript命令行工具开发独立的JavaScript应用程序。在Nashorn的文章中,
我会描述怎样在命令行中运行Nashorn代码。但也怎样在不同的文件中写JavaScript,然后在你的Java代码中执行这些文件。
并行API加强
并行框架也得到了加强,允许你在多线程里管理和累积值。
String,numbers有了新工具
创建存储string限制lists的新工具和其他的新类。有计算数字的工具,包括intergers,longs,doubles等。
其他的新特性
也有新的工具能更好的检测null情况,并且我会在这个系列中描述所有这些。我还会描述怎么用新的便捷方法来处理文件。
那么,Java SE 8 什么时候能用?
答案是,现在。Java SE 8 正式发布于2014年3月18日。Java开发者可以构建客户的网站应用程序,JavaFX富网络应用框架现在也支持Java 8了。并且大多数的Java企业版的厂商也支持Java 8。你是否立即迁移到Java 8这取决于你现在正在做的项目。
对许多服务和客户网站应用程序,Java SE 8 现在就是有效的。
Android还不行
Android开发者注意:Java SE 8 语法和API现在不支持运行在Android上。
最近Android刚刚支持了Java 7 语法。所以,可能需要一些时间Android才会支持最新的语法或APIs。但对于所有的Java开发者来说,是值得了解一下这些特性的。
开发工具怎么样?
Java 8 已经在主要的Java开发环境中获得了支持,包括Oracle的Netbeans,Intellij Idea和Eclipse。我所写文章系列中的所有的例子都是在NetBeans下完成。用的NetBeans V8 ,下载地址 https://netbeans.org/downloads/。
不管怎样在我们开始深入这个系列之前,我们首先检查是否已经安装好了Java SE 8,用Netbeans开始一个新项目,包含我们会写
到的所有代码。然后开发一段lambda代码来测试我们的项目在Java SE 8是否工作正常。
你可以选择下载这个系列中的所有代码在我的Githut上, https://github.com/mohamed-taman/JavaSE8-Features。
基于Java SE 8,用Lambda表达式写的Hello world应用程序
步骤
1.打开 NetBeans 8 –> from file –> New project –> 从左侧选择 Maven –> 从右侧选择 Java Application –> 点击下一步。
2.按照下图所示填写内容,或者改成你喜欢的名字和值->点击完成按钮。
3.如果事情进展顺利你应该能看到下面的结构,用project navigator视图。
4.点击项目“Java8Features”->点击File,从上级菜单->然后,“Project properties”。
5.在Category下->从左侧选择Source,然后检查 “Scource/Binary format” 是1.8。->从左侧打开Build,然后选择 Complier,然后检查 “Java Platform” 指向了你已经安装的JDK 8,点击OK。
6.如果JDK 8 没有出现,找到tools->选择,Java Platforms->Add Platform->然后选择Java Standard Edition->然后指向你已经安装好的JDK 8。
7.现在我们的项目已经配置好了JDK 8,所以让我们添加一些Lambda代码吧。
8.在包“eg.com.tm.java8.features”,右击,从菜单中选择New->Java Interface->命名为Printable,点击finish按钮。
9.如下实现Printable接口
package eg.com.tm.java8.features.overview;
@FunctionalInterface
public interface Printable {
public void print();
}
10.在相同的包下添加如下类,命名为“Print”,主要方法如下:
package eg.com.tm.java8.features.overview;
import static java.lang.System.out;
public class Print {
public static void main(String[] args) {
Printable job = ()-> out.println("Java SE 8 is working "
+ "and Lambda Expression too.");
job.print();
}
}
11.右击Print类,选择Run。如果一切正常你会看到如下输出。
Building Java8Features 1.0-SNAPSHOT
------------------------------------------------------------------------
--- exec-maven-plugin:1.2.1:exec (default-cli) @ Java8Features ---
Java SE 8 is working and Lambda Expression too.
------------------------------------------------------------------------
BUILD SUCCESS
12.祝贺你的Java SE 8 项目工作良好,让我们解释一下刚才所写的代码。
这段代码的大部分都可以在Java 7上运行,但是有一个注解是在Java SE 8 中新添加的,FunctionalInterface。如果你的
Netbeans工作环境没有配置好Java 8,这个注解会报错,因为它会被当作是无效代码。我没看见错误,所以这是一个好迹象。
下面我们打开Print.java的定义。这个类有一个main方法,所以我可以用控制台程序来运行它,里面有一行关键代码是Java 8语法。 它lambda表达式创建了我刚刚展示给你们的功能接口的一个实例,一种Java 8之前不存在的语法。我会在下篇文章里解释这种语法的作用。 但是你现在需要知道的是如果这段代码没有报错,那么再一次,Netbeans认为它是有效代码。我创建了那个接口的实例并且调用了接口的print方法。因此,我运行了这段代码。
我点击了工具栏上的Run按钮,在控制台上我看到了成功的结果。我已经创建了一个对象,是用lambda表达创建的接口的实例。
我还调用了它的方法,它输出了一个字符串在控制台上。所以,如果所有都工作正常,你状态很好。你已经在Netbeans里用Java SE 8开始编程了。如果这过程中你有任何问题,回到上一步,检查你的步骤。一次一步。