[译]Java SE 8 新特性之旅 : Java开发世界的大变动

标签: | 发表时间:2015-08-04 15:54 | 作者:supercrsky
分享到:
出处:http://blog.csdn.net/supercrsky

我很自豪的成为了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开始编程了。如果这过程中你有任何问题,回到上一步,检查你的步骤。一次一步。

作者:supercrsky 发表于2015/8/4 15:54:14 原文链接
阅读:2 评论:0 查看评论

相关 [java se java] 推荐:

Java SE 7发布

- Jingzhi - Solidot
甲骨文宣布发布Java SE 7,这是Java在甲骨文名下发布的第一个版本. 开发者在博客上称它是五年全世界Java社区协助成果,是Java发展中的重要一步. Java SE 7主要新特性包括:Project Coin,提高生产力,简化编程任务;Fork/Join Framework,支持多核心处理器,简化问题分解并行执行;InvokeDynamic,使其它语言能更容易的在JVM中运行.

Java SE 7 Exception的使用

- - ITeye博客
Java SE 7 Exception的使用. 在Java SE 7 中,作为Project Coin项目中众多有用的细小语言变化之一的加强型异常处理,现在来学习如何利用它. 在这边文章中,我们所涉及的一些变化是作为Java平台标准版7(Java SE 7)所发布,在JSR334(Java Specification Request)有详细的说明.

[译]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 6 故障排除指南 – 3、内存泄露

- - 码蜂笔记
如果你的应用程序执行的时间越来越长,或如果操作系统执行越来越慢,这可能是内存泄露的指示. 换句话说,虚拟内存被分配但在不需要时没有归还. 最终应用程序或系统没有可用内存,应用程序非正常终止. 这篇文章提供了一些涉及内存泄露的问题诊断的建议. 3.1 OutOfMemoryError 的含义. 一个最常见的内存泄露的指示是 java.lang.OutOfMemoryError 错误.

利用Java SE 8流处理数据II(译)

- - BlogJava-首页技术区
利用Java SE 8流处理数据. -- 结合Stream API的高级操作去表示富数据处理查询. 本文是 Java Magazine 201405/06刊中的一篇文章,也是文章系列"利用Java SE 8流处理数据"中的第二篇,它基于flatMap()和collect()介绍了Java流的高级用法(2014.08.15最后更新).

Java SE 6 故障排除指南 – 4、系统崩溃故障排除

- - 码蜂笔记
崩溃或致命错误导致进程异常终止. 例如,崩溃可能是由于HotSpot VM、系统库、Java SE 库或API、程序本地代码、甚至操作系统里的 bug. 极端因素如操作系统资源耗尽也可以导致崩溃. 因 HotSpot VM 或 Java SE库代码导致的崩溃是罕见的. 有时候可以变通崩溃直到导致崩溃的源被诊断和修复(也就是可以避开崩溃).

Spring Framework 4.0相关计划公布---包括对于Java SE 8 和Groovy2的支持

- - InfoQ cn
VMware公司旗下的SpringSource团队近日宣布了Spring Framework 4.0的相关计划,这是Spring框架的下一个升级版本,新的特性包括了对Java SE 8,Groovy 2,Java EE 7部分功能和WebSockets的支持. 在介绍Spring Framework 3.2版本的.

Java SE 6 故障排除指南 – 5、挂起或循环进程故障排除

- - 码蜂笔记
本章为挂起或循环进程的故障排除在特定程序上提供了信息和指导. 问题在涉及挂起或循环进程时发生. 挂起可能因为多种原因发生,但经常是源于程序代码、API代码或库代码里的死锁. 挂起甚至是因为 HotSpot VM的bug. 有时候,一个表面上是挂起的可能是个循环. 例如,VM进程里的bug导致一个或多个线程进入死循环,会消耗掉所有可得CPU周期.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.